From 82b2c3c9279604bd56fa0adf9aac3ddfa7682430 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Thu, 5 Sep 2024 13:03:38 +0200 Subject: [PATCH 001/175] Post-release version bump --- CHANGELOG.md | 10 ++++++++++ assets/multiqc_config.yml | 4 ++-- nextflow.config | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 67b1238a..6e889026 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,16 @@ 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). +## v2.1.0 - [unreleased] + +### `Added` + +### `Fixed` + +### `Dependencies` + +### `Deprecated` + ## v2.0.0 - [2024-09-05] ### `Breaking change` diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 5471c44d..45ddd48c 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,7 @@ report_comment: > - This report has been generated by the nf-core/funcscan + This report has been generated by the nf-core/funcscan analysis pipeline. For information about how to interpret these results, please see the - documentation. + documentation. report_section_order: "nf-core-funcscan-methods-description": order: -1000 diff --git a/nextflow.config b/nextflow.config index dea546e0..ca13a027 100644 --- a/nextflow.config +++ b/nextflow.config @@ -445,7 +445,7 @@ manifest { description = """Pipeline for screening for functional components of assembled contigs""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '2.0.0' + version = '2.1.0dev' doi = '10.5281/zenodo.7643099' } From 62d753890de85344e0d1dafd74ab3afc14b9c587 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Tue, 8 Oct 2024 12:31:12 +0000 Subject: [PATCH 002/175] Template update for nf-core/tools version 3.0.0 --- .editorconfig | 4 + .github/CONTRIBUTING.md | 10 +- .github/PULL_REQUEST_TEMPLATE.md | 2 +- .github/workflows/awsfulltest.yml | 23 +- .github/workflows/ci.yml | 17 +- .github/workflows/download_pipeline.yml | 53 ++- .github/workflows/linting.yml | 23 +- .github/workflows/linting_comment.yml | 2 +- .github/workflows/release-announcements.yml | 2 +- .../workflows/template_version_comment.yml | 43 ++ .gitpod.yml | 7 +- .nf-core.yml | 18 +- .pre-commit-config.yaml | 2 +- .prettierignore | 1 + CHANGELOG.md | 2 +- CITATIONS.md | 4 +- README.md | 5 +- assets/schema_input.json | 2 +- conf/base.config | 34 +- conf/igenomes_ignored.config | 9 + conf/modules.config | 1 - conf/test.config | 13 +- docs/images/mqc_fastqc_adapter.png | Bin 23458 -> 0 bytes docs/images/mqc_fastqc_counts.png | Bin 33918 -> 0 bytes docs/images/mqc_fastqc_quality.png | Bin 55769 -> 0 bytes docs/output.md | 11 +- docs/usage.md | 12 +- main.nf | 10 +- modules.json | 12 +- modules/nf-core/fastqc/environment.yml | 2 - modules/nf-core/fastqc/main.nf | 5 +- modules/nf-core/fastqc/meta.yml | 57 +-- modules/nf-core/fastqc/tests/main.nf.test | 225 ++++++++--- .../nf-core/fastqc/tests/main.nf.test.snap | 370 ++++++++++++++++-- modules/nf-core/multiqc/environment.yml | 4 +- modules/nf-core/multiqc/main.nf | 14 +- modules/nf-core/multiqc/meta.yml | 78 ++-- modules/nf-core/multiqc/tests/main.nf.test | 8 + .../nf-core/multiqc/tests/main.nf.test.snap | 20 +- modules/nf-core/multiqc/tests/nextflow.config | 5 + nextflow.config | 148 ++++--- nextflow_schema.json | 85 +--- .../utils_nfcore_funcscan_pipeline/main.nf | 56 +-- .../nf-core/utils_nextflow_pipeline/main.nf | 24 +- .../tests/nextflow.config | 2 +- .../nf-core/utils_nfcore_pipeline/main.nf | 45 ++- .../nf-core/utils_nfschema_plugin/main.nf | 46 +++ .../nf-core/utils_nfschema_plugin/meta.yml | 35 ++ .../utils_nfschema_plugin/tests/main.nf.test | 117 ++++++ .../tests/nextflow.config | 8 + .../tests/nextflow_schema.json | 8 +- .../nf-core/utils_nfvalidation_plugin/main.nf | 62 --- .../utils_nfvalidation_plugin/meta.yml | 44 --- .../tests/main.nf.test | 200 ---------- .../utils_nfvalidation_plugin/tests/tags.yml | 2 - workflows/funcscan.nf | 23 +- 56 files changed, 1207 insertions(+), 808 deletions(-) create mode 100644 .github/workflows/template_version_comment.yml create mode 100644 conf/igenomes_ignored.config delete mode 100755 docs/images/mqc_fastqc_adapter.png delete mode 100755 docs/images/mqc_fastqc_counts.png delete mode 100755 docs/images/mqc_fastqc_quality.png create mode 100644 modules/nf-core/multiqc/tests/nextflow.config create mode 100644 subworkflows/nf-core/utils_nfschema_plugin/main.nf create mode 100644 subworkflows/nf-core/utils_nfschema_plugin/meta.yml create mode 100644 subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test create mode 100644 subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config rename subworkflows/nf-core/{utils_nfvalidation_plugin => utils_nfschema_plugin}/tests/nextflow_schema.json (95%) delete mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/main.nf delete mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml delete mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test delete mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml diff --git a/.editorconfig b/.editorconfig index 72dda289..e1058815 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,6 +11,7 @@ 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 @@ -25,9 +26,12 @@ 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 diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index fbf55836..867f8876 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -19,7 +19,7 @@ If you'd like to write some code for nf-core/funcscan, the standard workflow is 1. Check that there isn't already an issue about your idea in the [nf-core/funcscan issues](https://github.com/nf-core/funcscan/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 [nf-core/funcscan repository](https://github.com/nf-core/funcscan) to your GitHub account 3. Make the necessary changes / additions within your forked repository following [Pipeline conventions](#pipeline-contribution-conventions) -4. Use `nf-core schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). +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 If you're not used to this workflow with git, you can start with some [docs from GitHub](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or even their [excellent `git` resources](https://try.github.io/). @@ -40,7 +40,7 @@ There are typically two types of tests that run: ### Lint tests `nf-core` has a [set of guidelines](https://nf-co.re/developers/guidelines) which all pipelines must adhere to. -To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core lint ` command. +To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core pipelines lint ` command. If any failures or warnings are encountered, please follow the listed URL for more documentation. @@ -75,7 +75,7 @@ If you wish to contribute a new step, please use the following coding standards: 2. Write the process block (see below). 3. Define the output channel if needed (see below). 4. Add any new parameters to `nextflow.config` with a default (see below). -5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core schema build` tool). +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`. @@ -86,7 +86,7 @@ If you wish to contribute a new step, please use the following coding standards: Parameters should be initialised / defined with default values in `nextflow.config` under the `params` scope. -Once there, use `nf-core schema build` to add to `nextflow_schema.json`. +Once there, use `nf-core pipelines schema build` to add to `nextflow_schema.json`. ### Default processes resource requirements @@ -103,7 +103,7 @@ Please use the following naming schemes, to make it easy to understand what is g ### Nextflow version bumping -If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core bump-version --nextflow . [min-nf-version]` +If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core pipelines bump-version --nextflow . [min-nf-version]` ### Images and figures diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index fa844526..b6e5cebd 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -17,7 +17,7 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/func - [ ] 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/nf-core/funcscan/tree/master/.github/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/funcscan _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. -- [ ] Make sure your code lints (`nf-core lint`). +- [ ] 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 `). - [ ] Usage Documentation in `docs/usage.md` is updated. diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index a373f370..7d1f54ce 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -1,18 +1,33 @@ name: nf-core AWS full size tests -# This workflow is triggered on published releases. +# This workflow is triggered on PRs opened against the master branch. # It can be additionally triggered manually with GitHub actions workflow dispatch button. # It runs the -profile 'test_full' on AWS batch on: - release: - types: [published] + pull_request: + branches: + - master workflow_dispatch: + pull_request_review: + types: [submitted] + jobs: run-platform: name: Run AWS full tests - if: github.repository == 'nf-core/funcscan' + if: github.repository == 'nf-core/funcscan' && github.event.review.state == 'approved' runs-on: ubuntu-latest steps: + - uses: octokit/request-action@v2.x + id: check_approvals + with: + route: GET /repos/${{ github.repository }}/pulls/${{ github.event.review.number }}/reviews + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - id: test_variables + run: | + JSON_RESPONSE='${{ steps.check_approvals.outputs.data }}' + CURRENT_APPROVALS_COUNT=$(echo $JSON_RESPONSE | jq -c '[.[] | select(.state | contains("APPROVED")) ] | length') + test $CURRENT_APPROVALS_COUNT -ge 2 || exit 1 # At least 2 approvals are required - name: Launch workflow via Seqera Platform uses: seqeralabs/action-tower-launch@v2 # TODO nf-core: You can customise AWS full pipeline tests as required diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8c6c7a00..c29a55c3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,6 +7,7 @@ on: pull_request: release: types: [published] + workflow_dispatch: env: NXF_ANSI_LOG: false @@ -24,7 +25,7 @@ jobs: strategy: matrix: NXF_VER: - - "23.04.0" + - "24.04.2" - "latest-everything" steps: - name: Check out pipeline code @@ -38,9 +39,21 @@ jobs: - name: Disk space cleanup uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - name: Run pipeline with test data + - name: Run pipeline with test data (docker) # TODO nf-core: You can customise CI pipeline run tests as required # For example: adding multiple test runs with different parameters # Remember that you can parallelise this by using strategy.matrix run: | nextflow run ${GITHUB_WORKSPACE} -profile test,docker --outdir ./results + + - name: Run pipeline with test data (singularity) + # TODO nf-core: You can customise CI pipeline run tests as required + run: | + nextflow run ${GITHUB_WORKSPACE} -profile test,singularity --outdir ./results + if: "${{ github.base_ref == 'master' }}" + + - name: Run pipeline with test data (conda) + # TODO nf-core: You can customise CI pipeline run tests as required + run: | + nextflow run ${GITHUB_WORKSPACE} -profile test,conda --outdir ./results + if: "${{ github.base_ref == 'master' }}" diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 2d20d644..713dc3e7 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -1,4 +1,4 @@ -name: Test successful pipeline download with 'nf-core download' +name: Test successful pipeline download with 'nf-core pipelines download' # Run the workflow when: # - dispatched manually @@ -8,7 +8,7 @@ on: workflow_dispatch: inputs: testbranch: - description: "The specific branch you wish to utilize for the test execution of nf-core download." + description: "The specific branch you wish to utilize for the test execution of nf-core pipelines download." required: true default: "dev" pull_request: @@ -39,9 +39,11 @@ jobs: with: python-version: "3.12" architecture: "x64" - - uses: eWaterCycle/setup-singularity@931d4e31109e875b13309ae1d07c70ca8fbc8537 # v7 + + - name: Setup Apptainer + uses: eWaterCycle/setup-apptainer@4bb22c52d4f63406c49e94c804632975787312b3 # v2.0.0 with: - singularity-version: 3.8.3 + apptainer-version: 1.3.4 - name: Install dependencies run: | @@ -54,33 +56,64 @@ jobs: echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> ${GITHUB_ENV} echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> ${GITHUB_ENV} + - name: Make a cache directory for the container images + run: | + mkdir -p ./singularity_container_images + - name: Download the pipeline env: - NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images run: | - nf-core download ${{ env.REPO_LOWERCASE }} \ + nf-core pipelines download ${{ env.REPO_LOWERCASE }} \ --revision ${{ env.REPO_BRANCH }} \ --outdir ./${{ env.REPOTITLE_LOWERCASE }} \ --compress "none" \ --container-system 'singularity' \ - --container-library "quay.io" -l "docker.io" -l "ghcr.io" \ + --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io" \ --container-cache-utilisation 'amend' \ - --download-configuration + --download-configuration 'yes' - name: Inspect download run: tree ./${{ env.REPOTITLE_LOWERCASE }} + - name: Count the downloaded number of container images + id: count_initial + run: | + image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) + echo "Initial container image count: $image_count" + echo "IMAGE_COUNT_INITIAL=$image_count" >> ${GITHUB_ENV} + - name: Run the downloaded pipeline (stub) id: stub_run_pipeline continue-on-error: true env: - NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results - name: Run the downloaded pipeline (stub run not supported) id: run_pipeline if: ${{ job.steps.stub_run_pipeline.status == failure() }} env: - NXF_SINGULARITY_CACHEDIR: ./ + NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -profile test,singularity --outdir ./results + + - name: Count the downloaded number of container images + id: count_afterwards + run: | + image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) + echo "Post-pipeline run container image count: $image_count" + echo "IMAGE_COUNT_AFTER=$image_count" >> ${GITHUB_ENV} + + - name: Compare container image counts + run: | + if [ "${{ env.IMAGE_COUNT_INITIAL }}" -ne "${{ env.IMAGE_COUNT_AFTER }}" ]; then + initial_count=${{ env.IMAGE_COUNT_INITIAL }} + final_count=${{ env.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 + exit 1 + else + echo "The pipeline can be downloaded successfully!" + fi diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 1fcafe88..b882838a 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -1,6 +1,6 @@ name: nf-core linting # This workflow is triggered on pushes and PRs to the repository. -# It runs the `nf-core lint` and markdown lint tests to ensure +# It runs the `nf-core pipelines lint` and markdown lint tests to ensure # that the code meets the nf-core guidelines. on: push: @@ -41,17 +41,32 @@ jobs: python-version: "3.12" architecture: "x64" + - name: read .nf-core.yml + uses: pietrobolcato/action-read-yaml@1.0.0 + id: read_yml + with: + config: ${{ github.workspace }}/.nf-core.yaml + - name: Install dependencies run: | python -m pip install --upgrade pip - pip install nf-core + pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} + + - name: Run nf-core pipelines lint + if: ${{ github.base_ref != 'master' }} + env: + GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} + run: nf-core -l lint_log.txt pipelines lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - - name: Run nf-core lint + - name: Run nf-core pipelines lint --release + if: ${{ github.base_ref == 'master' }} env: GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} - run: nf-core -l lint_log.txt lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md + run: nf-core -l lint_log.txt pipelines lint --release --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - name: Save PR number if: ${{ always() }} diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 40acc23f..42e519bf 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@09f2f74827fd3a8607589e5ad7f9398816f540fe # v3 + uses: dawidd6/action-download-artifact@bf251b5aa9c2f7eeb574a96ee720e24f801b7c11 # v6 with: workflow: linting.yml workflow_conclusion: completed diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index 03ecfcf7..c6ba35df 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -12,7 +12,7 @@ jobs: - name: get topics and convert to hashtags id: get_topics run: | - echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" >> $GITHUB_OUTPUT + echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" | sed 's/-//g' >> $GITHUB_OUTPUT - uses: rzr/fediverse-action@master with: diff --git a/.github/workflows/template_version_comment.yml b/.github/workflows/template_version_comment.yml new file mode 100644 index 00000000..9dea41f0 --- /dev/null +++ b/.github/workflows/template_version_comment.yml @@ -0,0 +1,43 @@ +name: nf-core template version comment +# This workflow is triggered on PRs to check if the pipeline template version matches the latest nf-core version. +# It posts a comment to the PR, even if it comes from a fork. + +on: pull_request_target + +jobs: + template_version: + runs-on: ubuntu-latest + steps: + - name: Check out pipeline code + uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + + - name: Read template version from .nf-core.yml + uses: pietrobolcato/action-read-yaml@1.0.0 + id: read_yml + with: + config: ${{ github.workspace }}/.nf-core.yml + + - name: Install nf-core + run: | + python -m pip install --upgrade pip + pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }} + + - name: Check nf-core outdated + id: nf_core_outdated + run: pip list --outdated | grep nf-core + + - name: Post nf-core template version comment + uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2 + if: | + ${{ steps.nf_core_outdated.outputs.stdout }} =~ 'nf-core' + with: + repo-token: ${{ secrets.NF_CORE_BOT_AUTH_TOKEN }} + allow-repeats: false + message: | + ## :warning: Newer version of the nf-core template is available. + + Your pipeline is using an old version of the nf-core template: ${{ steps.read_yml.outputs['nf_core_version'] }}. + Please update your pipeline to the latest version. + + For more documentation on how to update your pipeline, please see the [nf-core documentation](https://github.com/nf-core/tools?tab=readme-ov-file#sync-a-pipeline-with-the-template) and [Synchronisation documentation](https://nf-co.re/docs/contributing/sync). + # diff --git a/.gitpod.yml b/.gitpod.yml index 105a1821..46118637 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -4,17 +4,14 @@ tasks: command: | pre-commit install --install-hooks nextflow self-update - - name: unset JAVA_TOOL_OPTIONS - command: | - unset JAVA_TOOL_OPTIONS vscode: extensions: # based on nf-core.nf-core-extensionpack - - esbenp.prettier-vscode # Markdown/CommonMark linting and style checking for Visual Studio Code + #- esbenp.prettier-vscode # Markdown/CommonMark linting and style checking for Visual Studio Code - EditorConfig.EditorConfig # override user/workspace settings with settings found in .editorconfig files - Gruntfuggly.todo-tree # Display TODO and FIXME in a tree view in the activity bar - mechatroner.rainbow-csv # Highlight columns in csv files in different colors - # - nextflow.nextflow # Nextflow syntax highlighting + - nextflow.nextflow # Nextflow syntax highlighting - oderwat.indent-rainbow # Highlight indentation level - streetsidesoftware.code-spell-checker # Spelling checker for source code - charliermarsh.ruff # Code linter Ruff diff --git a/.nf-core.yml b/.nf-core.yml index e0b85a77..98117c52 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,2 +1,18 @@ +bump_version: null +lint: + actions_ci: false +nf_core_version: 3.0.0 +org_path: null repository_type: pipeline -nf_core_version: "2.14.1" +template: + author: Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James + A. Fellows Yates + description: Pipeline for screening for functional components of assembled contigs + force: false + is_nfcore: true + name: funcscan + org: nf-core + outdir: . + skip_features: null + version: 2.1.0dev +update: null diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4dc0f1dc..9e9f0e1c 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: "2.7.3" + rev: "3.0.3" hooks: - id: editorconfig-checker alias: ec diff --git a/.prettierignore b/.prettierignore index 437d763d..610e5069 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,4 @@ + email_template.html adaptivecard.json slackreport.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 4db4fc6a..a1d052a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ 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.2.0dev - [date] +## v2.1.0dev - [date] Initial release of nf-core/funcscan, created with the [nf-core](https://nf-co.re/) template. diff --git a/CITATIONS.md b/CITATIONS.md index bd67a904..fd005177 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -12,11 +12,11 @@ - [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) - > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. +> Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. - [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) - > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. +> Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. ## Software packaging/containerisation tools diff --git a/README.md b/README.md index 3fd02539..8c207e26 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![GitHub Actions Linting Status](https://github.com/nf-core/funcscan/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/funcscan/results)[![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%A523.04.0-23aa62.svg)](https://www.nextflow.io/) +[![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/) @@ -67,8 +67,7 @@ nextflow run nf-core/funcscan \ ``` > [!WARNING] -> 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/usage/configuration#custom-configuration-files). +> 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). For more details and further functionality, please refer to the [usage documentation](https://nf-co.re/funcscan/usage) and the [parameter documentation](https://nf-co.re/funcscan/parameters). diff --git a/assets/schema_input.json b/assets/schema_input.json index 382cc97f..df1294f0 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/funcscan/master/assets/schema_input.json", "title": "nf-core/funcscan pipeline - params.input schema", "description": "Schema for the file provided with params.input", diff --git a/conf/base.config b/conf/base.config index 66a643fa..9c812893 100644 --- a/conf/base.config +++ b/conf/base.config @@ -11,9 +11,9 @@ process { // TODO nf-core: Check the defaults for all processes - cpus = { check_max( 1 * task.attempt, 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 1 * task.attempt } + memory = { 6.GB * task.attempt } + time = { 4.h * task.attempt } errorStrategy = { task.exitStatus in ((130..145) + 104) ? 'retry' : 'finish' } maxRetries = 1 @@ -27,30 +27,30 @@ process { // TODO nf-core: Customise requirements for specific processes. // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors withLabel:process_single { - cpus = { check_max( 1 , 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 1 } + memory = { 6.GB * task.attempt } + time = { 4.h * task.attempt } } withLabel:process_low { - cpus = { check_max( 2 * task.attempt, 'cpus' ) } - memory = { check_max( 12.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { 2 * task.attempt } + memory = { 12.GB * task.attempt } + time = { 4.h * task.attempt } } withLabel:process_medium { - cpus = { check_max( 6 * task.attempt, 'cpus' ) } - memory = { check_max( 36.GB * task.attempt, 'memory' ) } - time = { check_max( 8.h * task.attempt, 'time' ) } + cpus = { 6 * task.attempt } + memory = { 36.GB * task.attempt } + time = { 8.h * task.attempt } } withLabel:process_high { - cpus = { check_max( 12 * task.attempt, 'cpus' ) } - memory = { check_max( 72.GB * task.attempt, 'memory' ) } - time = { check_max( 16.h * task.attempt, 'time' ) } + cpus = { 12 * task.attempt } + memory = { 72.GB * task.attempt } + time = { 16.h * task.attempt } } withLabel:process_long { - time = { check_max( 20.h * task.attempt, 'time' ) } + time = { 20.h * task.attempt } } withLabel:process_high_memory { - memory = { check_max( 200.GB * task.attempt, 'memory' ) } + memory = { 200.GB * task.attempt } } withLabel:error_ignore { errorStrategy = 'ignore' diff --git a/conf/igenomes_ignored.config b/conf/igenomes_ignored.config new file mode 100644 index 00000000..b4034d82 --- /dev/null +++ b/conf/igenomes_ignored.config @@ -0,0 +1,9 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for iGenomes paths +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Empty genomes dictionary to use when igenomes is ignored. +---------------------------------------------------------------------------------------- +*/ + +params.genomes = [:] diff --git a/conf/modules.config b/conf/modules.config index d203d2b6..d266a387 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -21,7 +21,6 @@ process { withName: FASTQC { ext.args = '--quiet' } - withName: 'MULTIQC' { ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } publishDir = [ diff --git a/conf/test.config b/conf/test.config index 4c23fd45..a55b8e32 100644 --- a/conf/test.config +++ b/conf/test.config @@ -10,15 +10,18 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + params { config_profile_name = 'Test profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // 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 diff --git a/docs/images/mqc_fastqc_adapter.png b/docs/images/mqc_fastqc_adapter.png deleted file mode 100755 index 361d0e47acfb424dea1f326590d1eb2f6dfa26b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23458 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 diff --git a/docs/images/mqc_fastqc_quality.png b/docs/images/mqc_fastqc_quality.png deleted file mode 100755 index a4b89bf56ab2ba88cab87841916eb680a816deae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55769 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�)v~C(0C)c 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 M)78&qol`;+0Fu7JivR!s diff --git a/docs/output.md b/docs/output.md index 0e8ecc31..642c4ff9 100644 --- a/docs/output.md +++ b/docs/output.md @@ -14,6 +14,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [FastQC](#fastqc) - Raw read QC - [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline + - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution ### FastQC @@ -29,16 +30,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). -![MultiQC - FastQC sequence counts plot](images/mqc_fastqc_counts.png) - -![MultiQC - FastQC mean quality scores plot](images/mqc_fastqc_quality.png) - -![MultiQC - FastQC adapter content plot](images/mqc_fastqc_adapter.png) - -:::note -The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. -::: - ### MultiQC -[AMPcombi](https://github.com/Darcy220606/AMPcombi) summarizes the results of **antimicrobial peptide (AMP)** prediction tools (ampir, AMPlify, Macrel, and other non-nf-core tools) into a single table and aligns the hits against a reference AMP database for functional and taxonomic classification. It assigns the physiochemical properties (e.g. hydrophobicity, molecular weight) using the [Biopython toolkit](https://github.com/biopython/biopython). Additionally, it clusters the resulting AMP hits from all samples using [MMseqs2](https://github.com/soedinglab/MMseqs2). For further filtering for AMPs with signaling peptides, the output file `Ampcombi_summary_cluster.tsv` or `ampcombi_complete_summary_taxonomy.tsv.gz` can be used downstream as detailed [here](https://github.com/Darcy220606/AMPcombi/blob/main/README.md). +[AMPcombi](https://github.com/Darcy220606/AMPcombi) summarizes the results of **antimicrobial peptide (AMP)** prediction tools (ampir, AMPlify, Macrel, and other non-nf-core tools) into a single table and aligns the hits against a reference AMP database for functional, structural and taxonomic classification using [MMseqs2](https://github.com/soedinglab/MMseqs2). It further assigns the physiochemical properties (e.g. hydrophobicity, molecular weight) using the [Biopython toolkit](https://github.com/biopython/biopython) and clusters the resulting AMP hits from all samples using [MMseqs2](https://github.com/soedinglab/MMseqs2). To further filter the recovered AMPs using the presence of signaling peptides, the output file `Ampcombi_summary_cluster.tsv` or `ampcombi_complete_summary_taxonomy.tsv.gz` can be used downstream as detailed [here](https://ampcombi.readthedocs.io/en/main/usage.html#signal-peptide). The final tables generated may also be visualized and explored using an interactive [user interface](https://ampcombi.readthedocs.io/en/main/visualization.html). + +AMPcombi interface + #### hAMRonization diff --git a/docs/usage.md b/docs/usage.md index 7d220c49..f5a86b88 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -224,14 +224,35 @@ wget https://github.com/nf-core/funcscan/raw//bin/ampcombi_dow python3 ampcombi_download.py ``` -However, the user can also supply their own custom AMP database by following the guidelines in [AMPcombi](https://github.com/Darcy220606/AMPcombi). +IN addition to [DRAMP](http://dramp.cpu-bioinfor.org/), two more reference databases can be used to classify the recovered AMPs in the AMP workflow; [APD](https://aps.unmc.edu/) and [UniRef100](https://academic.oup.com/bioinformatics/article/23/10/1282/197795). Only one database can be used at a time using `--amp_ampcombi_db database_name`. + +However, the user can also supply their own custom AMP database by following the guidelines in [AMPcombi](https://ampcombi.readthedocs.io/en/main/). This can then be passed to the pipeline with: ```bash ---amp_ampcombi_db '/// +--amp_ampcombi_db_dir_path '/// ``` -The contents of the directory should have files such as `*.dmnd` and `*.fasta` in the top level. +The contents of the directory should have files such as `*.fasta` and `*.tsv` in the top level; a fasta file and the corresponding table with structural, functional and (if reported) taxonomic classifications. AMPcombi will then generate the corresponding `mmseqs2` directory, in which all binary files are prepared for downstream alignment of the recovered AMPs with [MMseqs2](https://github.com/soedinglab/MMseqs2). These can also be provided by the user by setting up an mmseqs2 compatible database using `mmseqs createdb *.fasta` in a directory called `mmseqs2`. An example file structure for [DRAMP](http://dramp.cpu-bioinfor.org/) used as the reference database: + +```bash +amp_DRAMP_database/ +├── general_amps_2024_11_13.fasta +├── general_amps_2024_11_13.txt +└── mmseqs2 + ├── ref_DB + ├── ref_DB.dbtype + ├── ref_DB_h + ├── ref_DB_h.dbtype + ├── ref_DB_h.index + ├── ref_DB.index + ├── ref_DB.lookup + └── ref_DB.source +``` + +🗒️ **Note**: For both [DRAMP](http://dramp.cpu-bioinfor.org/) and [APD](https://aps.unmc.edu/), AMPcombi removes entries that contains any non amino acid residues by default. + + :::warning The pipeline will automatically run Pyrodigal instead of Prodigal if the parameters `--run_annotation_tool prodigal --run_amp_screening` are both provided. From 9dc0d0f9ba6bd74911631fc3b7803c4a4dfc64a6 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Wed, 4 Dec 2024 09:42:26 +0000 Subject: [PATCH 021/175] [automated] Fix code linting --- CHANGELOG.md | 6 +++--- docs/output.md | 1 - docs/usage.md | 2 -- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d535af2c..66627e61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,9 +15,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Dependencies` -| Tool | Previous version | New version | -| ------------- | ---------------- | ----------- | -| AMPcombi | 0.2.2 | 2.0.1 | +| Tool | Previous version | New version | +| -------- | ---------------- | ----------- | +| AMPcombi | 0.2.2 | 2.0.1 | ### `Deprecated` diff --git a/docs/output.md b/docs/output.md index 5480716a..9303d23c 100644 --- a/docs/output.md +++ b/docs/output.md @@ -512,7 +512,6 @@ Note that filtered FASTA is only used for BGC workflow for run-time optimisation AMPcombi interface - #### hAMRonization
diff --git a/docs/usage.md b/docs/usage.md index f5a86b88..3d214647 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -252,8 +252,6 @@ amp_DRAMP_database/ 🗒️ **Note**: For both [DRAMP](http://dramp.cpu-bioinfor.org/) and [APD](https://aps.unmc.edu/), AMPcombi removes entries that contains any non amino acid residues by default. - - :::warning The pipeline will automatically run Pyrodigal instead of Prodigal if the parameters `--run_annotation_tool prodigal --run_amp_screening` are both provided. This is due to an incompatibility issue of Prodigal's output `.gbk` file with multiple downstream tools. From 15a4429f49825d9c83e54dbc319b3beaebe477fd Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Wed, 4 Dec 2024 12:10:05 +0100 Subject: [PATCH 022/175] add review suggestions --- docs/output.md | 6 ++++-- docs/usage.md | 7 +++++-- nextflow_schema.json | 4 ++-- subworkflows/local/amp.nf | 8 ++++---- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/docs/output.md b/docs/output.md index 9303d23c..577f0ae8 100644 --- a/docs/output.md +++ b/docs/output.md @@ -443,7 +443,9 @@ Note that filtered FASTA is only used for BGC workflow for run-time optimisation [GECCO](https://gecco.embl.de) is a fast and scalable method for identifying putative novel Biosynthetic Gene Clusters (BGCs) in genomic and metagenomic data using Conditional Random Fields (CRFs). -### Summary too](#ampcombi), [hAMRonization](#hamronization), [comBGC](#combgc), [MultiQC](#multiqc), [pipeline information](#pipeline-information), [argNorm](#argnorm). +### Summary tools + +[AMPcombi](#ampcombi), [hAMRonization](#hamronization), [comBGC](#combgc), [MultiQC](#multiqc), [pipeline information](#pipeline-information), [argNorm](#argnorm). #### AMPcombi @@ -508,7 +510,7 @@ Note that filtered FASTA is only used for BGC workflow for run-time optimisation
-[AMPcombi](https://github.com/Darcy220606/AMPcombi) summarizes the results of **antimicrobial peptide (AMP)** prediction tools (ampir, AMPlify, Macrel, and other non-nf-core tools) into a single table and aligns the hits against a reference AMP database for functional, structural and taxonomic classification using [MMseqs2](https://github.com/soedinglab/MMseqs2). It further assigns the physiochemical properties (e.g. hydrophobicity, molecular weight) using the [Biopython toolkit](https://github.com/biopython/biopython) and clusters the resulting AMP hits from all samples using [MMseqs2](https://github.com/soedinglab/MMseqs2). To further filter the recovered AMPs using the presence of signaling peptides, the output file `Ampcombi_summary_cluster.tsv` or `ampcombi_complete_summary_taxonomy.tsv.gz` can be used downstream as detailed [here](https://ampcombi.readthedocs.io/en/main/usage.html#signal-peptide). The final tables generated may also be visualized and explored using an interactive [user interface](https://ampcombi.readthedocs.io/en/main/visualization.html). +[AMPcombi](https://github.com/Darcy220606/AMPcombi) summarizes the results of **antimicrobial peptide (AMP)** prediction tools (ampir, AMPlify, Macrel, and other non-nf-core supported tools) into a single table and aligns the hits against a reference AMP database for functional, structural and taxonomic classification using [MMseqs2](https://github.com/soedinglab/MMseqs2). It further assigns the physiochemical properties (e.g. hydrophobicity, molecular weight) using the [Biopython toolkit](https://github.com/biopython/biopython) and clusters the resulting AMP hits from all samples using [MMseqs2](https://github.com/soedinglab/MMseqs2). To further filter the recovered AMPs using the presence of signaling peptides, the output file `Ampcombi_summary_cluster.tsv` or `ampcombi_complete_summary_taxonomy.tsv.gz` can be used downstream as detailed [here](https://ampcombi.readthedocs.io/en/main/usage.html#signal-peptide). The final tables generated may also be visualized and explored using an interactive [user interface](https://ampcombi.readthedocs.io/en/main/visualization.html). AMPcombi interface diff --git a/docs/usage.md b/docs/usage.md index 3d214647..f017212d 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -224,7 +224,7 @@ wget https://github.com/nf-core/funcscan/raw//bin/ampcombi_dow python3 ampcombi_download.py ``` -IN addition to [DRAMP](http://dramp.cpu-bioinfor.org/), two more reference databases can be used to classify the recovered AMPs in the AMP workflow; [APD](https://aps.unmc.edu/) and [UniRef100](https://academic.oup.com/bioinformatics/article/23/10/1282/197795). Only one database can be used at a time using `--amp_ampcombi_db database_name`. +In addition to [DRAMP](http://dramp.cpu-bioinfor.org/), two more reference databases can be used to classify the recovered AMPs in the AMP workflow; [APD](https://aps.unmc.edu/) and [UniRef100](https://academic.oup.com/bioinformatics/article/23/10/1282/197795). Only one database can be used at a time using `--amp_ampcombi_db database_name`. However, the user can also supply their own custom AMP database by following the guidelines in [AMPcombi](https://ampcombi.readthedocs.io/en/main/). This can then be passed to the pipeline with: @@ -250,7 +250,10 @@ amp_DRAMP_database/ └── ref_DB.source ``` -🗒️ **Note**: For both [DRAMP](http://dramp.cpu-bioinfor.org/) and [APD](https://aps.unmc.edu/), AMPcombi removes entries that contains any non amino acid residues by default. +:::note{.fa-whale} +For both [DRAMP](http://dramp.cpu-bioinfor.org/) and [APD](https://aps.unmc.edu/), AMPcombi removes entries that contains any non amino acid residues by default. +::: + :::warning The pipeline will automatically run Pyrodigal instead of Prodigal if the parameters `--run_annotation_tool prodigal --run_amp_screening` are both provided. diff --git a/nextflow_schema.json b/nextflow_schema.json index bc2eae35..b1a7bf06 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -626,7 +626,7 @@ "description": "Antimicrobial peptides parsing, filtering, and annotating submodule of AMPcombi2. More info: https://github.com/Darcy220606/AMPcombi", "default": "", "properties": { - "amp_ampcombi_db": { + "amp_ampcombi_db_id": { "type": "string", "description": "The name of the database used to classify the AMPs.", "help_text": "AMPcombi can use three different AMP databases to classify the recovered AMPS. These can either be: \n\n- [DRAMP database](http://dramp.cpu-bioinfor.org/downloads/): Only general AMPs are downloaded and filtered to remove any entry that has an instance of non amino acid residues in their sequence.\n\n- [APD](https://aps.unmc.edu/): Only experimentally validated AMPs are present.\n\n- [UniRef100](https://academic.oup.com/bioinformatics/article/23/10/1282/197795): Combines a more general protein dataset including curated and non curated AMPs. Helpful for identifying the clusters to remove any potential false positives. Beware: If the thresholds are for ampcombi are not strict enough, alignment with this database can take a long time. \n\nBy default this is set to 'DRAMP'. Other valid options include 'APD' or 'UniRef100'.\n\nFor more information check the AMPcombi [documentation](https://ampcombi.readthedocs.io/en/main/usage.html#parse-tables).", @@ -634,7 +634,7 @@ "default": "DRAMP", "enum": ["DRAMP", "APD", "UniRef100"] }, - "amp_ampcombi_db_dir_path": { + "amp_ampcombi_db": { "type": "string", "description": "The path to the folder containing the reference database files.", "help_text": "The path to the folder containing the reference database files (`*.fasta` and `*.tsv`); a fasta file and the corresponding table with structural, functional and if reported taxonomic classifications. AMPcombi will then generate the corresponding `mmseqs2` directory, in which all binary files are prepared for the downstream alignment of teh recovered AMPs with [MMseqs2](https://github.com/soedinglab/MMseqs2). These can also be provided by the user by setting up an mmseqs2 compatible database using `mmseqs createdb *.fasta` in a directory called `mmseqs2`.\n\nExample file structure for the reference database supplied by the user:\n\n```bash\namp_DRAMP_database/\n\u251c\u2500\u2500 general_amps_2024_11_13.fasta\n\u251c\u2500\u2500 general_amps_2024_11_13.txt\n\u2514\u2500\u2500 mmseqs2\n \u251c\u2500\u2500 ref_DB\n \u251c\u2500\u2500 ref_DB.dbtype\n \u251c\u2500\u2500 ref_DB_h\n \u251c\u2500\u2500 ref_DB_h.dbtype\n \u251c\u2500\u2500 ref_DB_h.index\n \u251c\u2500\u2500 ref_DB.index\n \u251c\u2500\u2500 ref_DB.lookup\n \u2514\u2500\u2500 ref_DB.source\n\nFor more information check the AMPcombi [documentation](https://ampcombi.readthedocs.io/en/main/usage.html#parse-tables)." diff --git a/subworkflows/local/amp.nf b/subworkflows/local/amp.nf index f64ec770..f04d1843 100644 --- a/subworkflows/local/amp.nf +++ b/subworkflows/local/amp.nf @@ -110,14 +110,14 @@ workflow AMP { gbk: it[3] } - if ( params.amp_ampcombi_db_dir_path != null ) { - ch_ampcombi_input_db = Channel.of( file(params.amp_ampcombi_db_dir_path) ) + if ( params.amp_ampcombi_db != null ) { + ch_ampcombi_input_db = Channel.of( file(params.amp_ampcombi_db) ) } else { - AMP_DATABASE_DOWNLOAD( params.amp_ampcombi_db ) + AMP_DATABASE_DOWNLOAD( params.amp_ampcombi_db_id ) ch_versions = ch_versions.mix( AMP_DATABASE_DOWNLOAD.out.versions ) ch_ampcombi_input_db = AMP_DATABASE_DOWNLOAD.out.db } - AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db, ch_ampcombi_input_db ) + AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db_id, ch_ampcombi_input_db ) ch_versions = ch_versions.mix( AMPCOMBI2_PARSETABLES.out.versions ) ch_ampcombi_summaries = AMPCOMBI2_PARSETABLES.out.tsv.map{ it[1] }.collect() From 5c8144a2c191397c794d93cfa4ff7faacfb44747 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Wed, 4 Dec 2024 11:12:35 +0000 Subject: [PATCH 023/175] [automated] Fix code linting --- docs/usage.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index f017212d..a2fce4f6 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -254,7 +254,6 @@ amp_DRAMP_database/ For both [DRAMP](http://dramp.cpu-bioinfor.org/) and [APD](https://aps.unmc.edu/), AMPcombi removes entries that contains any non amino acid residues by default. ::: - :::warning The pipeline will automatically run Pyrodigal instead of Prodigal if the parameters `--run_annotation_tool prodigal --run_amp_screening` are both provided. This is due to an incompatibility issue of Prodigal's output `.gbk` file with multiple downstream tools. From a69830ad26e955e74e1702ad3217b9cd0bd30b8f Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Wed, 4 Dec 2024 12:18:34 +0100 Subject: [PATCH 024/175] update nextflow.config --- nextflow.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow.config b/nextflow.config index 4c98910d..623c1d36 100644 --- a/nextflow.config +++ b/nextflow.config @@ -119,8 +119,8 @@ params { amp_hmmsearch_savetargets = false amp_hmmsearch_savedomains = false - amp_ampcombi_db = 'DRAMP' - amp_ampcombi_db_dir_path = null + amp_ampcombi_db_id = 'DRAMP' + amp_ampcombi_db = null amp_ampcombi_parsetables_cutoff = 0.6 amp_ampcombi_parsetables_ampir = '.ampir.tsv' amp_ampcombi_parsetables_amplify = '.amplify.tsv' From 86592d995ed4cea2549b0fa5374d33d932a896ae Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Thu, 5 Dec 2024 13:34:56 +0100 Subject: [PATCH 025/175] install interproscan in funcscan --- conf/modules.config | 17 ++ modules/nf-core/interproscan/environment.yml | 5 + modules/nf-core/interproscan/main.nf | 66 ++++++ modules/nf-core/interproscan/meta.yml | 82 +++++++ .../nf-core/interproscan/tests/main.nf.test | 100 +++++++++ .../interproscan/tests/main.nf.test.snap | 207 ++++++++++++++++++ .../interproscan/tests/nextflow.config | 5 + modules/nf-core/interproscan/tests/tags.yml | 2 + nextflow.config | 7 + subworkflows/local/function.nf | 26 +++ workflows/funcscan.nf | 14 ++ 11 files changed, 531 insertions(+) create mode 100644 modules/nf-core/interproscan/environment.yml create mode 100644 modules/nf-core/interproscan/main.nf create mode 100644 modules/nf-core/interproscan/meta.yml create mode 100644 modules/nf-core/interproscan/tests/main.nf.test create mode 100644 modules/nf-core/interproscan/tests/main.nf.test.snap create mode 100644 modules/nf-core/interproscan/tests/nextflow.config create mode 100644 modules/nf-core/interproscan/tests/tags.yml create mode 100644 subworkflows/local/function.nf diff --git a/conf/modules.config b/conf/modules.config index b8c8f747..9efc7e26 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -96,6 +96,23 @@ process { ].join(' ').trim() } + withName: INTERPROSCAN { + ext.prefix = { "${meta.id}_interproscan.faa.tsv" } + publishDir = [ + path: { "${params.outdir}/function/interproscan/" }, + mode: params.publish_dir_mode, + enabled: params.run_function_interproscan, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + ext.args = [ + "--applications ${params.function_interproscan_applications}", + params.function_interproscan_enableprecalc ? '' : '--disable-precalc', + params.function_interproscan_enableresidueannot ? '' : '--disable-residue-annot', + params.function_interproscan_disableresidueannottsv ? '--enable-tsv-residue-annot' : '', + "--formats tsv" + ].join(' ').trim() + } + withName: PROKKA { ext.prefix = { "${meta.id}_prokka" } publishDir = [ diff --git a/modules/nf-core/interproscan/environment.yml b/modules/nf-core/interproscan/environment.yml new file mode 100644 index 00000000..d1ce2af7 --- /dev/null +++ b/modules/nf-core/interproscan/environment.yml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::interproscan=5.59_91.0 diff --git a/modules/nf-core/interproscan/main.nf b/modules/nf-core/interproscan/main.nf new file mode 100644 index 00000000..add9b031 --- /dev/null +++ b/modules/nf-core/interproscan/main.nf @@ -0,0 +1,66 @@ +process INTERPROSCAN { + tag "$meta.id" + label 'process_medium' + label 'process_long' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/interproscan:5.59_91.0--hec16e2b_1' : + 'biocontainers/interproscan:5.59_91.0--hec16e2b_1' }" + + input: + tuple val(meta), path(fasta) + path(interproscan_database, stageAs: 'data') + + output: + tuple val(meta), path('*.tsv') , optional: true, emit: tsv + tuple val(meta), path('*.xml') , optional: true, emit: xml + tuple val(meta), path('*.gff3'), optional: true, emit: gff3 + tuple val(meta), path('*.json'), optional: true, emit: json + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def is_compressed = fasta.name.endsWith(".gz") + def fasta_name = fasta.name.replace(".gz", "") + """ + if [ -d 'data' ]; then + # Find interproscan.properties to link data/ from work directory + INTERPROSCAN_DIR="\$( dirname "\$( dirname "\$( which interproscan.sh )" )" )" + INTERPROSCAN_PROPERTIES="\$( find "\$INTERPROSCAN_DIR/share" -name "interproscan.properties" )" + cp "\$INTERPROSCAN_PROPERTIES" . + sed -i "/^bin\\.directory=/ s|.*|bin.directory=\$INTERPROSCAN_DIR/bin|" interproscan.properties + export INTERPROSCAN_CONF=interproscan.properties + fi # else use sample DB included with conda ( testing only! ) + + if ${is_compressed} ; then + gzip -c -d ${fasta} > ${fasta_name} + fi + + interproscan.sh \\ + --cpu ${task.cpus} \\ + --input ${fasta_name} \\ + ${args} \\ + --output-file-base ${prefix} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + interproscan: \$( interproscan.sh --version | sed '1!d; s/.*version //' ) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.{tsv,xml,json,gff3} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + interproscan: \$( interproscan.sh --version | sed '1!d; s/.*version //' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/interproscan/meta.yml b/modules/nf-core/interproscan/meta.yml new file mode 100644 index 00000000..0bb10f7d --- /dev/null +++ b/modules/nf-core/interproscan/meta.yml @@ -0,0 +1,82 @@ +name: "interproscan" +description: Produces protein annotations and predictions from an amino acids FASTA + file +keywords: + - annotation + - fasta + - protein + - dna + - interproscan +tools: + - "interproscan": + description: "InterPro integrates together predictive information about proteins + function from a number of partner resources" + homepage: "https://www.ebi.ac.uk/interpro/search/sequence/" + documentation: "https://interproscan-docs.readthedocs.io" + tool_dev_url: "https://github.com/ebi-pf-team/interproscan" + doi: "10.1093/bioinformatics/btu031" + licence: ["GPL v3"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input fasta file containing the amino acid or dna query sequences + pattern: "*.{fa,fasta,fa.gz,fasta.gz}" + - - interproscan_database: + type: directory + description: Path to the interproscan database (untarred + http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/${version_major}-${version_minor}/interproscan-${version_major}-${version_minor}-64-bit.tar.gz) +output: + - tsv: + - meta: + type: file + description: Tab separated file containing with detailed hits + pattern: "*.{tsv}" + - "*.tsv": + type: file + description: Tab separated file containing with detailed hits + pattern: "*.{tsv}" + - xml: + - meta: + type: file + description: XML file containing with detailed hits + pattern: "*.{xml}" + - "*.xml": + type: file + description: XML file containing with detailed hits + pattern: "*.{xml}" + - gff3: + - meta: + type: file + description: GFF3 file containing with detailed hits + pattern: "*.{gff3}" + - "*.gff3": + type: file + description: GFF3 file containing with detailed hits + pattern: "*.{gff3}" + - json: + - meta: + type: file + description: JSON file containing with detailed hits + pattern: "*.{json}" + - "*.json": + type: file + description: JSON file containing with detailed hits + pattern: "*.{json}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@toniher" + - "@mahesh-panchal" +maintainers: + - "@toniher" + - "@vagkaratzas" + - "@mahesh-panchal" diff --git a/modules/nf-core/interproscan/tests/main.nf.test b/modules/nf-core/interproscan/tests/main.nf.test new file mode 100644 index 00000000..1fe4625d --- /dev/null +++ b/modules/nf-core/interproscan/tests/main.nf.test @@ -0,0 +1,100 @@ +nextflow_process { + + name "Test Process INTERPROSCAN" + script "../main.nf" + process "INTERPROSCAN" + config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "interproscan" + + // Note: Regular tests have been commented out because Interproscan has a harded coded a requirement of 10G memory, + // and so will therefore not run on the nf-core test runners without being killed. + + // test("sarscov2 - proteome_fasta") { + + // when { + // process { + // """ + // input[0] = [ + // [ id:'test' ], + // file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta', checkIfExists: true) + // ] + // input[1] = [] + // """ + // } + // } + + // then { + // assertAll( + // { assert process.success }, + // { assert snapshot( + // path(process.out.tsv[0][1]).readLines()[0] + // .contains("ENSSASP00005000004.1 4c35f09aac2f7be4f3cffd30c6aecac8 1273 Coils Coil Coil 1176 1203 - T"), + // process.out.xml, + // process.out.json, + // path(process.out.gff3[0][1]).readLines()[0..4,6..-1], + // process.out.versions, + // ).match() + // } + // ) + // } + + // } + + // test("sarscov2 - proteome_fasta_gz") { + + // when { + // process { + // """ + // input[0] = [ + // [ id:'test' ], + // file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta.gz', checkIfExists: true) + // ] + // input[1] = [] + // """ + // } + // } + + // then { + // assertAll( + // { assert process.success }, + // { assert snapshot( + // path(process.out.tsv[0][1]).readLines()[0] + // .contains("ENSSASP00005000004.1 4c35f09aac2f7be4f3cffd30c6aecac8 1273 Coils Coil Coil 1176 1203 - T"), + // process.out.xml, + // process.out.json, + // path(process.out.gff3[0][1]).readLines()[0..4,6..-1], + // process.out.versions, + // ).match() + // } + // ) + // } + + // } + + test("sarscov2 - proteome_fasta_gz - stub") { + + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/proteome.fasta.gz', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } +} diff --git a/modules/nf-core/interproscan/tests/main.nf.test.snap b/modules/nf-core/interproscan/tests/main.nf.test.snap new file mode 100644 index 00000000..0529dfe4 --- /dev/null +++ b/modules/nf-core/interproscan/tests/main.nf.test.snap @@ -0,0 +1,207 @@ +{ + "sarscov2 - proteome_fasta_gz - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.xml:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test" + }, + "test.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,8bd8c66c2f1a7854faa29781761642c2" + ], + "gff3": [ + [ + { + "id": "test" + }, + "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test" + }, + "test.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tsv": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,8bd8c66c2f1a7854faa29781761642c2" + ], + "xml": [ + [ + { + "id": "test" + }, + "test.xml:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-05-27T12:51:27.943051636" + }, + "sarscov2 - proteome_fasta_gz": { + "content": [ + true, + [ + [ + { + "id": "test" + }, + "test.xml:md5,7a211c1a4761e2b9b8700e6e9abbb15f" + ] + ], + [ + [ + { + "id": "test" + }, + "test.json:md5,b05cffc28b7bfeb3dabe43c2927b2024" + ] + ], + [ + "##gff-version 3", + "##feature-ontology http://song.cvs.sourceforge.net/viewvc/song/ontology/sofa.obo?revision=1.269", + "##interproscan-version 5.59-91.0", + "##sequence-region ENSSASP00005000004.1 1 1273", + "ENSSASP00005000004.1\t.\tpolypeptide\t1\t1273\t.\t+\t.\tID=ENSSASP00005000004.1;md5=4c35f09aac2f7be4f3cffd30c6aecac8", + "##FASTA", + ">ENSSASP00005000004.1", + "MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSSVLHSTQDLFLPFFS", + "NVTWFHAIHVSGTNGTKRFDNPVLPFNDGVYFASTEKSNIIRGWIFGTTLDSKTQSLLIV", + "NNATNVVIKVCEFQFCNDPFLGVYYHKNNKSWMESEFRVYSSANNCTFEYVSQPFLMDLE", + "GKQGNFKNLREFVFKNIDGYFKIYSKHTPINLVRDLPQGFSALEPLVDLPIGINITRFQT", + "LLALHRSYLTPGDSSSGWTAGAAAYYVGYLQPRTFLLKYNENGTITDAVDCALDPLSETK", + "CTLKSFTVEKGIYQTSNFRVQPTESIVRFPNITNLCPFGEVFNATRFASVYAWNRKRISN", + "CVADYSVLYNSASFSTFKCYGVSPTKLNDLCFTNVYADSFVIRGDEVRQIAPGQTGKIAD", + "YNYKLPDDFTGCVIAWNSNNLDSKVGGNYNYLYRLFRKSNLKPFERDISTEIYQAGSTPC", + "NGVEGFNCYFPLQSYGFQPTNGVGYQPYRVVVLSFELLHAPATVCGPKKSTNLVKNKCVN", + "FNFNGLTGTGVLTESNKKFLPFQQFGRDIADTTDAVRDPQTLEILDITPCSFGGVSVITP", + "GTNTSNQVAVLYQDVNCTEVPVAIHADQLTPTWRVYSTGSNVFQTRAGCLIGAEHVNNSY", + "ECDIPIGAGICASYQTQTNSPRRARSVASQSIIAYTMSLGAENSVAYSNNSIAIPTNFTI", + "SVTTEILPVSMTKTSVDCTMYICGDSTECSNLLLQYGSFCTQLNRALTGIAVEQDKNTQE", + "VFAQVKQIYKTPPIKDFGGFNFSQILPDPSKPSKRSFIEDLLFNKVTLADAGFIKQYGDC", + "LGDIAARDLICAQKFNGLTVLPPLLTDEMIAQYTSALLAGTITSGWTFGAGAALQIPFAM", + "QMAYRFNGIGVTQNVLYENQKLIANQFNSAIGKIQDSLSSTASALGKLQDVVNQNAQALN", + "TLVKQLSSNFGAISSVLNDILSRLDKVEAEVQIDRLITGRLQSLQTYVTQQLIRAAEIRA", + "SANLAATKMSECVLGQSKRVDFCGKGYHLMSFPQSAPHGVVFLHVTYVPAQEKNFTTAPA", + "ICHDGKAHFPREGVFVSNGTHWFVTQRNFYEPQIITTDNTFVSGNCDVVIGIVNNTVYDP", + "LQPELDSFKEELDKYFKNHTSPDVDLGDISGINASVVNIQKEIDRLNEVAKNLNESLIDL", + "QELGKYEQYIKWPWYIWLGFIAGLIAIVMVTIMLCCMTSCCSCLKGCCSCGSCCKFDEDD", + "SEPVLKGVKLHYT", + ">match$1_1176_1203", + "VVNIQKEIDRLNEVAKNLNESLIDLQEL" + ], + [ + "versions.yml:md5,8bd8c66c2f1a7854faa29781761642c2" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-05-27T12:51:14.476645388" + }, + "sarscov2 - proteome_fasta": { + "content": [ + true, + [ + [ + { + "id": "test" + }, + "test.xml:md5,7a211c1a4761e2b9b8700e6e9abbb15f" + ] + ], + [ + [ + { + "id": "test" + }, + "test.json:md5,b05cffc28b7bfeb3dabe43c2927b2024" + ] + ], + [ + "##gff-version 3", + "##feature-ontology http://song.cvs.sourceforge.net/viewvc/song/ontology/sofa.obo?revision=1.269", + "##interproscan-version 5.59-91.0", + "##sequence-region ENSSASP00005000004.1 1 1273", + "ENSSASP00005000004.1\t.\tpolypeptide\t1\t1273\t.\t+\t.\tID=ENSSASP00005000004.1;md5=4c35f09aac2f7be4f3cffd30c6aecac8", + "##FASTA", + ">ENSSASP00005000004.1", + "MFVFLVLLPLVSSQCVNLTTRTQLPPAYTNSFTRGVYYPDKVFRSSVLHSTQDLFLPFFS", + "NVTWFHAIHVSGTNGTKRFDNPVLPFNDGVYFASTEKSNIIRGWIFGTTLDSKTQSLLIV", + "NNATNVVIKVCEFQFCNDPFLGVYYHKNNKSWMESEFRVYSSANNCTFEYVSQPFLMDLE", + "GKQGNFKNLREFVFKNIDGYFKIYSKHTPINLVRDLPQGFSALEPLVDLPIGINITRFQT", + "LLALHRSYLTPGDSSSGWTAGAAAYYVGYLQPRTFLLKYNENGTITDAVDCALDPLSETK", + "CTLKSFTVEKGIYQTSNFRVQPTESIVRFPNITNLCPFGEVFNATRFASVYAWNRKRISN", + "CVADYSVLYNSASFSTFKCYGVSPTKLNDLCFTNVYADSFVIRGDEVRQIAPGQTGKIAD", + "YNYKLPDDFTGCVIAWNSNNLDSKVGGNYNYLYRLFRKSNLKPFERDISTEIYQAGSTPC", + "NGVEGFNCYFPLQSYGFQPTNGVGYQPYRVVVLSFELLHAPATVCGPKKSTNLVKNKCVN", + "FNFNGLTGTGVLTESNKKFLPFQQFGRDIADTTDAVRDPQTLEILDITPCSFGGVSVITP", + "GTNTSNQVAVLYQDVNCTEVPVAIHADQLTPTWRVYSTGSNVFQTRAGCLIGAEHVNNSY", + "ECDIPIGAGICASYQTQTNSPRRARSVASQSIIAYTMSLGAENSVAYSNNSIAIPTNFTI", + "SVTTEILPVSMTKTSVDCTMYICGDSTECSNLLLQYGSFCTQLNRALTGIAVEQDKNTQE", + "VFAQVKQIYKTPPIKDFGGFNFSQILPDPSKPSKRSFIEDLLFNKVTLADAGFIKQYGDC", + "LGDIAARDLICAQKFNGLTVLPPLLTDEMIAQYTSALLAGTITSGWTFGAGAALQIPFAM", + "QMAYRFNGIGVTQNVLYENQKLIANQFNSAIGKIQDSLSSTASALGKLQDVVNQNAQALN", + "TLVKQLSSNFGAISSVLNDILSRLDKVEAEVQIDRLITGRLQSLQTYVTQQLIRAAEIRA", + "SANLAATKMSECVLGQSKRVDFCGKGYHLMSFPQSAPHGVVFLHVTYVPAQEKNFTTAPA", + "ICHDGKAHFPREGVFVSNGTHWFVTQRNFYEPQIITTDNTFVSGNCDVVIGIVNNTVYDP", + "LQPELDSFKEELDKYFKNHTSPDVDLGDISGINASVVNIQKEIDRLNEVAKNLNESLIDL", + "QELGKYEQYIKWPWYIWLGFIAGLIAIVMVTIMLCCMTSCCSCLKGCCSCGSCCKFDEDD", + "SEPVLKGVKLHYT", + ">match$1_1176_1203", + "VVNIQKEIDRLNEVAKNLNESLIDLQEL" + ], + [ + "versions.yml:md5,8bd8c66c2f1a7854faa29781761642c2" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.1" + }, + "timestamp": "2024-05-27T12:50:27.562653728" + } +} \ No newline at end of file diff --git a/modules/nf-core/interproscan/tests/nextflow.config b/modules/nf-core/interproscan/tests/nextflow.config new file mode 100644 index 00000000..2043e2c7 --- /dev/null +++ b/modules/nf-core/interproscan/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: INTERPROSCAN { + ext.args = '-appl Coils' + } +} diff --git a/modules/nf-core/interproscan/tests/tags.yml b/modules/nf-core/interproscan/tests/tags.yml new file mode 100644 index 00000000..ddb90f86 --- /dev/null +++ b/modules/nf-core/interproscan/tests/tags.yml @@ -0,0 +1,2 @@ +interproscan: + - modules/nf-core/interproscan/** diff --git a/nextflow.config b/nextflow.config index 49f88337..a5b6c901 100644 --- a/nextflow.config +++ b/nextflow.config @@ -50,6 +50,13 @@ params { taxa_classification_mmseqs_taxonomy_lcamode = 3 taxa_classification_mmseqs_taxonomy_votemode = 1 + // Function classification options + run_function_interproscan = true + function_interproscan_applications = 'Pfam' + function_interproscan_enableprecalc = false + function_interproscan_enableresidueannot = false + function_interproscan_disableresidueannottsv = false + // Annotation options annotation_tool = 'pyrodigal' save_annotations = false diff --git a/subworkflows/local/function.nf b/subworkflows/local/function.nf new file mode 100644 index 00000000..d72f260d --- /dev/null +++ b/subworkflows/local/function.nf @@ -0,0 +1,26 @@ +/* + RUN FUNCTIONAL CLASSIFICATION +*/ + +include { INTERPROSCAN } from '../../modules/nf-core/interproscan/main' + +workflow FUNCTION { + take: + faas // tuple val(meta), path(PROKKA/PRODIGAL.out.faa) + + main: + ch_versions = Channel.empty() + ch_interproscan_tsv = Channel.empty() + + ch_faa_for_interproscan = faas + + INTERPROSCAN( ch_faa_for_interproscan, [] ) + + ch_interproscan_tsv = ch_interproscan_tsv.mix(INTERPROSCAN.out.tsv) + + ch_versions = ch_versions.mix(INTERPROSCAN.out.versions) + + emit: + versions = ch_versions + interproscan_tsv = ch_interproscan_tsv // channel: [ val(meta), tsv ] +} diff --git a/workflows/funcscan.nf b/workflows/funcscan.nf index e0db12c0..a162c37f 100644 --- a/workflows/funcscan.nf +++ b/workflows/funcscan.nf @@ -20,6 +20,7 @@ include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // include { ANNOTATION } from '../subworkflows/local/annotation' +include { FUNCTION } from '../subworkflows/local/function' include { AMP } from '../subworkflows/local/amp' include { ARG } from '../subworkflows/local/arg' include { BGC } from '../subworkflows/local/bgc' @@ -174,6 +175,19 @@ workflow FUNCSCAN { ch_taxonomy_tsv = Channel.empty() } + /* + FUNCTION + */ + if ( params.run_function_interproscan ) { + ch_prepped_input.faas.filter { meta, file -> + if (file != [] && file.isEmpty()) { + log.warn("[nf-core/funcscan] Annotation of following sample produced an empty FAA file. InterProScan classification of the CDS requiring this file will not be executed: ${meta.id}") + } + !file.isEmpty() + } + ch_versions = ch_versions.mix(FUNCTION.out.versions) + } + /* SCREENING */ From 491f25da03fc1ee832a4a08fbd557f04cce7cd95 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Thu, 5 Dec 2024 13:41:27 +0100 Subject: [PATCH 026/175] add module in modules.json --- modules.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules.json b/modules.json index ec386d66..f178e5e7 100644 --- a/modules.json +++ b/modules.json @@ -140,6 +140,11 @@ "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, + "interproscan": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "macrel/contigs": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", From bbd456e22aafec9ddf600121607475b2e6ed7f9b Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Mon, 9 Dec 2024 08:18:31 +0100 Subject: [PATCH 027/175] start adding interproscan_amp functionality --- conf/base.config | 6 ++++ conf/modules.config | 24 +++++++++++++- modules/local/interproscan_download.nf | 33 +++++++++++++++++++ nextflow.config | 15 +++++---- nextflow_schema.json | 20 +++++++++++- subworkflows/local/function.nf | 24 +++++++++++--- workflows/funcscan.nf | 45 ++++++++++++++++++++------ 7 files changed, 144 insertions(+), 23 deletions(-) create mode 100644 modules/local/interproscan_download.nf diff --git a/conf/base.config b/conf/base.config index b16699af..be47988e 100644 --- a/conf/base.config +++ b/conf/base.config @@ -228,4 +228,10 @@ process { memory = { 6.GB * task.attempt } time = { 2.h * task.attempt } } + + withName: INTERPROSCAN_DATABASE { + memory = { 6.GB * task.attempt } + time = { 4.h * task.attempt } + } + } diff --git a/conf/modules.config b/conf/modules.config index 9efc7e26..c2582fe8 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -83,7 +83,7 @@ process { ] } - withName: SEQKIT_SEQ { + withName: SEQKIT_SEQ_LENGTH { ext.prefix = { "${meta.id}_long" } publishDir = [ path: { "${params.outdir}/bgc/seqkit/" }, @@ -96,6 +96,28 @@ process { ].join(' ').trim() } + withName: SEQKIT_SEQ_FILTER { + ext.prefix = { "${meta.id}_cleaned.faa" } // i think it will ad .tsv by default + publishDir = [ + path: { "${params.outdir}/function/seqkit" }, + mode: params.publish_dir_mode, + enabled: { params.run_function_interproscan }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + ext.args = [ + "--gap-letters '* \t.' --remove-gaps" + ].join(' ').trim() + } + + withName: INTERPROSCAN_DATABASE { + publishDir = [ + path: { "${params.outdir}/databases/interproscan" }, + mode: params.publish_dir_mode, + enabled: params.save_db, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: INTERPROSCAN { ext.prefix = { "${meta.id}_interproscan.faa.tsv" } publishDir = [ diff --git a/modules/local/interproscan_download.nf b/modules/local/interproscan_download.nf new file mode 100644 index 00000000..9b46f07e --- /dev/null +++ b/modules/local/interproscan_download.nf @@ -0,0 +1,33 @@ +process INTERPROSCAN_DATABASE { + tag "interproscan_database_download" + //label 'process_medium' + + conda "conda-forge::sed=4.7" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/curl:7.80.0' : + 'biocontainers/curl:7.80.0' }" + + input: + val (database_url) + + output: + path("interproscan_db/*") , emit: db + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + mkdir interproscan_db/ + + curl -L ${database_url} -o interproscan_db/interproscan-5.59-91.0-64-bit.tar.gz + tar -xzf interproscan_db/interproscan-5.59-91.0-64-bit.tar.gz -C interproscan_db/ + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tar: \$(tar --version 2>&1 | sed -n '1s/tar (busybox) //p') + curl: "\$(curl --version 2>&1 | sed -n '1s/^curl \\([0-9.]*\\).*/\\1/p')" + END_VERSIONS + """ +} diff --git a/nextflow.config b/nextflow.config index a5b6c901..5266fd9d 100644 --- a/nextflow.config +++ b/nextflow.config @@ -50,13 +50,6 @@ params { taxa_classification_mmseqs_taxonomy_lcamode = 3 taxa_classification_mmseqs_taxonomy_votemode = 1 - // Function classification options - run_function_interproscan = true - function_interproscan_applications = 'Pfam' - function_interproscan_enableprecalc = false - function_interproscan_enableresidueannot = false - function_interproscan_disableresidueannottsv = false - // Annotation options annotation_tool = 'pyrodigal' save_annotations = false @@ -106,6 +99,14 @@ params { annotation_prokka_addgenes = false annotation_prokka_retaincontigheaders = false + // Function classification options + run_function_interproscan = false + function_interproscan_db = null + function_interproscan_applications = 'Pfam' //PANTHER,ProSiteProfiles,ProSitePatterns,Pfam + function_interproscan_enableprecalc = false + function_interproscan_enableresidueannot = false + function_interproscan_disableresidueannottsv = false + // Database downloading options save_db = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 6b56c8f1..89137f39 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1622,5 +1622,23 @@ { "$ref": "#/$defs/generic_options" } - ] + ], + "properties": { + "run_function_interproscan": { + "type": "boolean" + }, + "function_interproscan_applications": { + "type": "string", + "default": "Pfam" + }, + "function_interproscan_enableprecalc": { + "type": "boolean" + }, + "function_interproscan_enableresidueannot": { + "type": "boolean" + }, + "function_interproscan_disableresidueannottsv": { + "type": "boolean" + } + } } diff --git a/subworkflows/local/function.nf b/subworkflows/local/function.nf index d72f260d..4c30fdca 100644 --- a/subworkflows/local/function.nf +++ b/subworkflows/local/function.nf @@ -2,7 +2,8 @@ RUN FUNCTIONAL CLASSIFICATION */ -include { INTERPROSCAN } from '../../modules/nf-core/interproscan/main' +include { INTERPROSCAN } from '../../modules/nf-core/interproscan/main' +include { INTERPROSCAN_DATABASE } from '../../modules/local/interproscan_download' workflow FUNCTION { take: @@ -11,16 +12,29 @@ workflow FUNCTION { main: ch_versions = Channel.empty() ch_interproscan_tsv = Channel.empty() + ch_interproscan_db = Channel.empty() ch_faa_for_interproscan = faas - INTERPROSCAN( ch_faa_for_interproscan, [] ) - + //TODO: Download DB if not supplied by user + if ( params.function_interproscan_db != null ) { + ch_interproscan_db = Channel + .fromPath( params.function_interproscan_db ) + .first() // i dont know if this is required + } else { + INTERPROSCAN_DATABASE ('http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.59-91.0/interproscan-5.59-91.0-64-bit.tar.gz') + ch_versions = ch_versions.mix( INTERPROSCAN_DATABASE.out.versions ) + ch_interproscan_db = ( INTERPROSCAN_DATABASE.out.db ) + } + + INTERPROSCAN( ch_faa_for_interproscan, [] ) // change to this: ch_interproscan_db + //INTERPROSCAN( ch_faa_for_interproscan, [] ) // change to this: ch_interproscan_db ch_interproscan_tsv = ch_interproscan_tsv.mix(INTERPROSCAN.out.tsv) ch_versions = ch_versions.mix(INTERPROSCAN.out.versions) emit: - versions = ch_versions - interproscan_tsv = ch_interproscan_tsv // channel: [ val(meta), tsv ] + versions = ch_versions + tsv = ch_interproscan_tsv // channel: [ val(meta), tsv ] + db = INTERPROSCAN_DATABASE.out.db } diff --git a/workflows/funcscan.nf b/workflows/funcscan.nf index a162c37f..5ae6646b 100644 --- a/workflows/funcscan.nf +++ b/workflows/funcscan.nf @@ -35,8 +35,9 @@ include { TAXA_CLASS } from '../subworkflows/local/taxa_class' // // MODULE: Installed directly from nf-core/modules // -include { GUNZIP as GUNZIP_INPUT_PREP } from '../modules/nf-core/gunzip/main' -include { SEQKIT_SEQ } from '../modules/nf-core/seqkit/seq/main' +include { GUNZIP as GUNZIP_INPUT_PREP } from '../modules/nf-core/gunzip/main' +include { SEQKIT_SEQ as SEQKIT_SEQ_LENGTH } from '../modules/nf-core/seqkit/seq/main' +include { SEQKIT_SEQ as SEQKIT_SEQ_FILTER } from '../modules/nf-core/seqkit/seq/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -100,17 +101,17 @@ workflow FUNCSCAN { // Duplicate and filter the duplicated file for long contigs only for BGC // This is to speed up BGC run and prevent 'no hits found' fails if (params.run_bgc_screening) { - SEQKIT_SEQ(ch_intermediate_input.fastas.map { meta, fasta, faa, gbk -> [meta, fasta] }) + SEQKIT_SEQ_LENGTH(ch_intermediate_input.fastas.map { meta, fasta, faa, gbk -> [meta, fasta] }) ch_input_for_annotation = ch_intermediate_input.fastas .map { meta, fasta, protein, gbk -> [meta, fasta] } - .mix(SEQKIT_SEQ.out.fastx.map { meta, fasta -> [meta + [category: 'long'], fasta] }) + .mix(SEQKIT_SEQ_LENGTH.out.fastx.map { meta, fasta -> [meta + [category: 'long'], fasta] }) .filter { meta, fasta -> if (fasta != [] && fasta.isEmpty()) { log.warn("[nf-core/funcscan] Sample ${meta.id} does not have contigs longer than ${params.bgc_mincontiglength} bp. Will not be screened for BGCs.") } !fasta.isEmpty() } - ch_versions = ch_versions.mix(SEQKIT_SEQ.out.versions) + ch_versions = ch_versions.mix(SEQKIT_SEQ_LENGTH.out.versions) } else { ch_input_for_annotation = ch_intermediate_input.fastas.map { meta, fasta, protein, gbk -> [meta, fasta] } @@ -178,14 +179,40 @@ workflow FUNCSCAN { /* FUNCTION */ - if ( params.run_function_interproscan ) { - ch_prepped_input.faas.filter { meta, file -> + if (params.run_function_interproscan) { + // TODO:: fix this + def filtered_faas = ch_prepped_input.faas.filter { meta, file -> if (file != [] && file.isEmpty()) { - log.warn("[nf-core/funcscan] Annotation of following sample produced an empty FAA file. InterProScan classification of the CDS requiring this file will not be executed: ${meta.id}") + log.warn("[nf-core/funcscan] Annotation of the following sample produced an empty FAA file. InterProScan classification of the CDS requiring this file will not be executed: ${meta.id}") } - !file.isEmpty() + !file.isEmpty() // Ensure this is the last statement for implicit return value } + SEQKIT_SEQ_FILTER(filtered_faas) + ch_versions = ch_versions.mix(SEQKIT_SEQ_FILTER.out.versions) + ch_input_for_function = SEQKIT_SEQ_FILTER.out.fastx + FUNCTION ( + ch_input_for_function + ) + //FUNCTION ( + // ch_prepped_input.faas.filter { meta, file -> + // if (file != [] && file.isEmpty()) { + // log.warn("[nf-core/funcscan] Annotation of the following sample produced an empty FAA file. InterProScan classification of the CDS requiring this file will not be executed: ${meta.id}") + // } + // !file.isEmpty() // Ensure this is the last statement for implicit return value + // } + // .map { meta, file -> + // SEQKIT_SEQ_FILTER([meta, file]) + // }.filter { meta, filtered_file -> + // if (filtered_file.isEmpty()) { + // log.warn("[nf-core/funcscan] SEQKIT_SEQ_FILTER produced an empty FAA file. InterProScan classification of the CDS requiring this file will not be executed: ${meta.id}") + // } + // !filtered_file.isEmpty() // Ensure this is the last statement for implicit return value + // } + //) ch_versions = ch_versions.mix(FUNCTION.out.versions) + ch_interproscan_tsv = FUNCTION.out.tsv + } else { + ch_interproscan_tsv = Channel.empty() } /* From 5b5cb3eddbfe8184061ecc93d2ca8a8c5b6c408a Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Mon, 9 Dec 2024 08:40:44 +0100 Subject: [PATCH 028/175] add citation --- CITATIONS.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CITATIONS.md b/CITATIONS.md index 80493194..28ecdd97 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -70,6 +70,14 @@ > Eddy S. R. (2011). Accelerated Profile HMM Searches. PLoS computational biology, 7(10), e1002195. [DOI: 10.1371/journal.pcbi.1002195](https://doi.org/10.1371/journal.pcbi.1002195) +- [InterPro](https://doi.org/10.1093/nar/gkaa977) + + >Blum, M., Chang, H-Y., Chuguransky, S., Grego, T., Kandasaamy, S., Mitchell, A., Nuka, G., Paysan-Lafosse, T., Qureshi, M., Raj, S., Richardson, L., Salazar, G.A., Williams, L., Bork, P., Bridge, A., Gough, J., Haft, D.H., Letunic, I., Marchler-Bauer, A., Mi, H., Natale, D.A., Necci, M., Orengo, C.A., Pandurangan, A.P., Rivoire, C., Sigrist, C.A., Sillitoe, I., Thanki, N., Thomas, P.D., Tosatto, S.C.E, Wu, C.H., Bateman, A., Finn, R.D. (2021) The InterPro protein families and domains database: 20 years on, Nucleic Acids Research, 49(D1), D344–D354.[DOI: 10.1093/nar/gkaa977](https://doi.org/10.1093/nar/gkaa977). + +- [InterProScan](https://doi.org/10.1093/bioinformatics/btu031) + + > Jones, P., Binns, D., Chang, H-Y., Fraser, M., Li, W., McAnulla, C., McWilliam, H., Maslen, J., Mitchell, A., Nuka, G., Pesseat, S., Quinn, A.F., Sangrador-Vegas, A., Scheremetjew, M., Yong, S-Y., Lopez, R., Hunter, S. (2014)InterProScan 5: genome-scale protein function classification, Bioinformatics, 30(9), 1236–1240. [DOI: 10.1093/bioinformatics/btu031](https://doi.org/10.1093/bioinformatics/btu031) + - [Macrel](https://doi.org/10.7717/peerj.10555) > Santos-Júnior, C. D., Pan, S., Zhao, X. M., & Coelho, L. P. (2020). Macrel: antimicrobial peptide screening in genomes and metagenomes. PeerJ, 8, e10555. [DOI: 10.7717/peerj.10555](https://doi.org/10.7717/peerj.10555) From d8c5bf207ff12d2fdff57302ee11fc3b01ed7287 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Mon, 9 Dec 2024 16:20:25 +0100 Subject: [PATCH 029/175] update documentations --- CHANGELOG.md | 5 +++++ docs/output.md | 22 ++++++++++++++++++++++ docs/usage.md | 16 +++++++++++++++- 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e889026..d6534a30 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,11 +6,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## v2.1.0 - [unreleased] ### `Added` +- - [#XXX](https://github.com/nf-core/funcscan/pull/XXX) Added InterProScan annotation workflow to the pipeline, which is also integrated in AMPcombi results. (by @darcy220606) ### `Fixed` ### `Dependencies` +| Tool | Previous version | New version | +| ------------- | ---------------- | ----------- | +| InterProScan | - | 5.59_91.0 | + ### `Deprecated` ## v2.0.0 - [2024-09-05] diff --git a/docs/output.md b/docs/output.md index 9f71278a..bc06070c 100644 --- a/docs/output.md +++ b/docs/output.md @@ -25,6 +25,8 @@ results/ | ├── prodigal/ | ├── prokka/ | └── pyrodigal/ +├── function/ +| └── interproscan/ ├── amp/ | ├── ampir/ | ├── amplify/ @@ -74,6 +76,10 @@ ORF prediction and annotation with any of: - [Prokka](#prokka) – open reading frame prediction and functional protein annotation. - [Bakta](#bakta) – open reading frame prediction and functional protein annotation. +CDS domain annotation: + +- [InterProScan](#interproscan) (default) – for open reading frame protein and domain predictions. + Antimicrobial Resistance Genes (ARGs): - [ABRicate](#abricate) – antimicrobial resistance gene detection, based on alignment to one of several databases. @@ -216,6 +222,22 @@ Output Summaries: [Bakta](https://github.com/oschwengers/bakta) is a tool for the rapid & standardised annotation of bacterial genomes and plasmids from both isolates and MAGs. It provides dbxref-rich, sORF-including and taxon-independent annotations in machine-readable JSON & bioinformatics standard file formats for automated downstream analysis. The output is used by some of the functional screening tools. +### Functional classifications + +[InterProScan](#interproscan) + +#### InterProScan +
+Output files + +- `interproscan/` + - `_cleaned.faa`: clean version of the fasta files (amino acids) generated by one of the annotated tools. These contain sequences with no special character + - `_interproscan_faa.tsv`: predicted proteins and domains using the InterPro database in TSV format + +
+ +[InterProScan](https://academic.oup.com/bioinformatics/article/30/9/1236/237988?login=true) (**a**nti**m**icrobial **p**eptide **p**rediction **i**n **r**) was designed to predict the protein function and and provide possible domain and motif information for the coding regions. It utilizes the InterPro database that consists of multiple sister databases such as PANTHER, ProSite, Pfam, etc. More details can be found in the [documentation](https://interproscan-docs.readthedocs.io/en/latest/index.html). + ### AMP detection tools [ampir](#ampir), [AMPlify](#amplify), [hmmsearch](#hmmsearch), [Macrel](#macrel) diff --git a/docs/usage.md b/docs/usage.md index 7d220c49..44f7c7ef 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -112,7 +112,7 @@ We highly recommend performing quality control on input contigs before running t For example, ideally BGC screening requires contigs of at least 3,000 bp else downstream tools may crash. ::: -## Notes on screening tools and taxonomic classification +## Notes on screening tools, taxonomic and functional classifications The implementation of some tools in the pipeline may have some particular behaviours that you should be aware of before you run the pipeline. @@ -134,6 +134,16 @@ MMseqs2 is currently the only taxonomic classification tool used in the pipeline --taxa_classification_mmseqs_db_id 'Kalamari' ``` +### InterProScan +[InterProScan](https://github.com/ebi-pf-team/interproscan) is currently the only functional classification tool that gives a snapshot of the protein families and domains for each coding region. By runnning this tool `--run_function_interproscan`, the [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/) v5.67-99.0 is by default downloaded and prepared. This can be changed by downloading and extracting the files from any [InterPro version](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/) and the path to the folder assigned. + + ```bash + --function_interproscan_db 'path/to/InterPro_directory/' + ``` +:::info +By default the databases used to assign the nearest protein domain is set as `PANTHER,ProSiteProfiles,ProSitePatterns,Pfam`. An addition of other application to the list, does not guarantee that the results will be integrated correctly within `AMPcombi`. +::: + ### antiSMASH antiSMASH has a minimum contig parameter, in which only contigs of a certain length (or longer) will be screened. In cases where no hits are found in these, the tool ends successfully without hits. However if no contigs in an input file reach that minimum threshold, the tool will end with a 'failure' code, and cause the pipeline to crash. @@ -238,6 +248,10 @@ The pipeline will automatically run Pyrodigal instead of Prodigal if the paramet This is due to an incompatibility issue of Prodigal's output `.gbk` file with multiple downstream tools. ::: +:::tip +If the `run_function_interproscan` is activated, protein and domain classifications of the coding regions are generated and the output is then integrated into the `AMPcombi parsetables` resulting table for every sample and the complete summary files e.g., `Ampcombi_summary.tsv`. +::: + ### Abricate The default ABRicate installation comes with a series of 'default' databases: From fd1ef460131d5ce23814d60054d78b376691337c Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Mon, 9 Dec 2024 16:22:46 +0100 Subject: [PATCH 030/175] update dynamic optional parameter path --- conf/base.config | 1 + conf/modules.config | 9 +++--- modules/local/interproscan_download.nf | 1 + nextflow.config | 5 +-- subworkflows/local/amp.nf | 43 +++++++++++++++++++++++--- subworkflows/local/function.nf | 21 ++++++------- workflows/funcscan.nf | 42 +++++++++++++------------ 7 files changed, 80 insertions(+), 42 deletions(-) diff --git a/conf/base.config b/conf/base.config index be47988e..8e35dc70 100644 --- a/conf/base.config +++ b/conf/base.config @@ -232,6 +232,7 @@ process { withName: INTERPROSCAN_DATABASE { memory = { 6.GB * task.attempt } time = { 4.h * task.attempt } + cpus = { 6 * task.attempt } } } diff --git a/conf/modules.config b/conf/modules.config index c2582fe8..8b99c18c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -99,7 +99,7 @@ process { withName: SEQKIT_SEQ_FILTER { ext.prefix = { "${meta.id}_cleaned.faa" } // i think it will ad .tsv by default publishDir = [ - path: { "${params.outdir}/function/seqkit" }, + path: { "${params.outdir}/function/interproscan" }, mode: params.publish_dir_mode, enabled: { params.run_function_interproscan }, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -119,11 +119,11 @@ process { } withName: INTERPROSCAN { - ext.prefix = { "${meta.id}_interproscan.faa.tsv" } + ext.prefix = { "${meta.id}_interproscan.faa" } // add .tsv -- i tested it but it now saves it correctly as *faa.tsv which is what ampcombi requires publishDir = [ path: { "${params.outdir}/function/interproscan/" }, mode: params.publish_dir_mode, - enabled: params.run_function_interproscan, + enabled: params.run_function_interproscan, // SHould also be with save_annotation activated? saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] ext.args = [ @@ -598,7 +598,8 @@ process { "--hmm_evalue ${params.amp_ampcombi_parsetables_hmmevalue}", "--window_size_stop_codon ${params.amp_ampcombi_parsetables_windowstopcodon}", "--window_size_transporter ${params.amp_ampcombi_parsetables_windowtransport}", - params.amp_ampcombi_parsetables_removehitswostopcodons ? '--remove_stop_codons' : '' + params.amp_ampcombi_parsetables_removehitswostopcodons ? '--remove_stop_codons' : '', + "${params.dynamic_extra_args}" //dynamic arguments ].join(' ').trim() ext.prefix = { "${meta.id}" } } diff --git a/modules/local/interproscan_download.nf b/modules/local/interproscan_download.nf index 9b46f07e..98464548 100644 --- a/modules/local/interproscan_download.nf +++ b/modules/local/interproscan_download.nf @@ -1,6 +1,7 @@ process INTERPROSCAN_DATABASE { tag "interproscan_database_download" //label 'process_medium' + //TODO DOnt forget to change the link to the db :: the version optimized to AMPcombi conda "conda-forge::sed=4.7" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? diff --git a/nextflow.config b/nextflow.config index 5266fd9d..6d7c8236 100644 --- a/nextflow.config +++ b/nextflow.config @@ -101,8 +101,8 @@ params { // Function classification options run_function_interproscan = false - function_interproscan_db = null - function_interproscan_applications = 'Pfam' //PANTHER,ProSiteProfiles,ProSitePatterns,Pfam + function_interproscan_db = '/Net/Groups/ccdata/databases/interproscan_5.67-99.0/'//null - change that in interproscan_download.nf + function_interproscan_applications = 'PANTHER,ProSiteProfiles,ProSitePatterns,Pfam' function_interproscan_enableprecalc = false function_interproscan_enableresidueannot = false function_interproscan_disableresidueannottsv = false @@ -139,6 +139,7 @@ params { amp_ampcombi_parsetables_windowstopcodon = 60 amp_ampcombi_parsetables_windowtransport = 11 amp_ampcombi_parsetables_removehitswostopcodons = false + dynamic_extra_args = '' amp_ampcombi_cluster_covmode = 0 amp_ampcombi_cluster_mode = 1 amp_ampcombi_cluster_coverage = 0.8 diff --git a/subworkflows/local/amp.nf b/subworkflows/local/amp.nf index 88f75393..a52f7655 100644 --- a/subworkflows/local/amp.nf +++ b/subworkflows/local/amp.nf @@ -17,10 +17,11 @@ include { MERGE_TAXONOMY_AMPCOMBI } from '.. workflow AMP { take: - fastas // tuple val(meta), path(contigs) - faas // tuple val(meta), path(PROKKA/PRODIGAL.out.faa) - tsvs // tuple val(meta), path(MMSEQS_CREATETSV.out.tsv) - gbks // tuple val(meta), path(ANNOTATION_ANNOTATION_TOOL.out.gbk) + fastas // tuple val(meta), path(contigs) + faas // tuple val(meta), path(PROKKA/PRODIGAL.out.faa) + tsvs // tuple val(meta), path(MMSEQS_CREATETSV.out.tsv) + gbks // tuple val(meta), path(ANNOTATION_ANNOTATION_TOOL.out.gbk) + tsvs_interpro // tuple val(meta), path(INTERPROSCAN.out.tsv)' main: ch_versions = Channel.empty() @@ -110,8 +111,40 @@ workflow AMP { gbk: it[3] } + // INTERPROSCAN INPUT CHECK + // Check if tsv_interpro is empty, if not empty update the params.dynamic_extra_ergs and if empty dont update that and continue the commands + // dynamik arg + ampcombi_parse_optional_args = tsvs_interpro + .map { meta, file -> + "--interproscan_input ${file}" + } + // pass dynamik arg + ampcombi_parse_optional_args + .first() + .ifEmpty {} // just silently skip if empty + .subscribe { dynamik_arg -> // terminal, consumes value + // log.info "Resolved dynamic argument: ${dynamik_arg}" // only for debugging + params.dynamic_extra_args = dynamik_arg + } + // Pass combined args to ext.args in modules.config + if ( params.amp_ampcombi_db != null ) { - AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db ) + //AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db ) + //// dynamik arg + //ampcombi_parse_optional_args = tsvs_interpro + // .map { meta, file -> + // "--interproscan_input ${file}" + // } + //// pass dynamik arg + //ampcombi_parse_optional_args + // .first() + // .ifEmpty {} // just silently skip if empty + // .subscribe { dynamik_arg -> // terminal, consumes value + // // log.info "Resolved dynamic argument: ${dynamik_arg}" // only for debugging + // params.dynamic_extra_args = dynamik_arg + // } + // Pass combined args to ext.args in modules.config + AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db) } else { DRAMP_DOWNLOAD() ch_versions = ch_versions.mix( DRAMP_DOWNLOAD.out.versions ) diff --git a/subworkflows/local/function.nf b/subworkflows/local/function.nf index 4c30fdca..d66ebe87 100644 --- a/subworkflows/local/function.nf +++ b/subworkflows/local/function.nf @@ -10,31 +10,30 @@ workflow FUNCTION { faas // tuple val(meta), path(PROKKA/PRODIGAL.out.faa) main: - ch_versions = Channel.empty() - ch_interproscan_tsv = Channel.empty() - ch_interproscan_db = Channel.empty() + ch_versions = Channel.empty() + ch_interproscan_tsv = Channel.empty() + ch_interproscan_db = Channel.empty() ch_faa_for_interproscan = faas - //TODO: Download DB if not supplied by user if ( params.function_interproscan_db != null ) { ch_interproscan_db = Channel .fromPath( params.function_interproscan_db ) - .first() // i dont know if this is required + .first() // i dont know if this is required!!!? } else { - INTERPROSCAN_DATABASE ('http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.59-91.0/interproscan-5.59-91.0-64-bit.tar.gz') + // NOTE: when url is changed here also change in 'funcscan/modules/local/interproscan_download.nf' + INTERPROSCAN_DATABASE ('http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.59-91.0/interproscan-5.59-91.0-64-bit.tar.gz') //change to the newest version tested with AMP: http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz ch_versions = ch_versions.mix( INTERPROSCAN_DATABASE.out.versions ) ch_interproscan_db = ( INTERPROSCAN_DATABASE.out.db ) } - INTERPROSCAN( ch_faa_for_interproscan, [] ) // change to this: ch_interproscan_db - //INTERPROSCAN( ch_faa_for_interproscan, [] ) // change to this: ch_interproscan_db + //INTERPROSCAN( ch_faa_for_interproscan, [] ) + INTERPROSCAN( ch_faa_for_interproscan, ch_interproscan_db ) ch_interproscan_tsv = ch_interproscan_tsv.mix(INTERPROSCAN.out.tsv) ch_versions = ch_versions.mix(INTERPROSCAN.out.versions) emit: - versions = ch_versions - tsv = ch_interproscan_tsv // channel: [ val(meta), tsv ] - db = INTERPROSCAN_DATABASE.out.db + versions = ch_versions + tsv = ch_interproscan_tsv // channel: [ val(meta), tsv ] } diff --git a/workflows/funcscan.nf b/workflows/funcscan.nf index 5ae6646b..30e85b9a 100644 --- a/workflows/funcscan.nf +++ b/workflows/funcscan.nf @@ -180,36 +180,22 @@ workflow FUNCSCAN { FUNCTION */ if (params.run_function_interproscan) { - // TODO:: fix this def filtered_faas = ch_prepped_input.faas.filter { meta, file -> if (file != [] && file.isEmpty()) { log.warn("[nf-core/funcscan] Annotation of the following sample produced an empty FAA file. InterProScan classification of the CDS requiring this file will not be executed: ${meta.id}") } - !file.isEmpty() // Ensure this is the last statement for implicit return value + !file.isEmpty() } + SEQKIT_SEQ_FILTER(filtered_faas) ch_versions = ch_versions.mix(SEQKIT_SEQ_FILTER.out.versions) ch_input_for_function = SEQKIT_SEQ_FILTER.out.fastx + FUNCTION ( ch_input_for_function ) - //FUNCTION ( - // ch_prepped_input.faas.filter { meta, file -> - // if (file != [] && file.isEmpty()) { - // log.warn("[nf-core/funcscan] Annotation of the following sample produced an empty FAA file. InterProScan classification of the CDS requiring this file will not be executed: ${meta.id}") - // } - // !file.isEmpty() // Ensure this is the last statement for implicit return value - // } - // .map { meta, file -> - // SEQKIT_SEQ_FILTER([meta, file]) - // }.filter { meta, filtered_file -> - // if (filtered_file.isEmpty()) { - // log.warn("[nf-core/funcscan] SEQKIT_SEQ_FILTER produced an empty FAA file. InterProScan classification of the CDS requiring this file will not be executed: ${meta.id}") - // } - // !filtered_file.isEmpty() // Ensure this is the last statement for implicit return value - // } - //) ch_versions = ch_versions.mix(FUNCTION.out.versions) + //ch_interproscan_tsv = FUNCTION.out.tsv.map{ it[1] }.collect() ch_interproscan_tsv = FUNCTION.out.tsv } else { ch_interproscan_tsv = Channel.empty() @@ -232,7 +218,15 @@ workflow FUNCSCAN { !file.isEmpty() }, ch_taxonomy_tsv, - ch_prepped_input.gbks + //ch_prepped_input.gbks + ch_prepped_input.gbks, + ch_interproscan_tsv.filter { meta, file -> + if (file != [] && file.isEmpty()) { + log.warn("[nf-core/funcscan] Functional annotation with INTERPROSCAN produced an empty TSV file. No InterProScan classifications will be added in the final table: ${meta.id}") + } + //file + !file.isEmpty() + }//.collect() ) ch_versions = ch_versions.mix(AMP.out.versions) } @@ -251,7 +245,15 @@ workflow FUNCSCAN { } !file.isEmpty() }, - ch_prepped_input.gbks + //ch_prepped_input.gbks + ch_prepped_input.gbks, + ch_interproscan_tsv.filter { meta, file -> + if (file != [] && file.isEmpty()) { + log.warn("[nf-core/funcscan] Functional annotation with INTERPROSCAN produced an empty TSV file. No InterProScan classifications will be added in the final table: ${meta.id}") + } + //file + !file.isEmpty() + }//.collect() ) ch_versions = ch_versions.mix(AMP.out.versions) } From b54f1ea155020e61748745c48b3a881d51d32be4 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Wed, 11 Dec 2024 21:19:50 +0100 Subject: [PATCH 031/175] remove dynamik ext.arg --- conf/modules.config | 10 ++--- modules/local/interproscan_download.nf | 14 ++++--- nextflow.config | 3 +- nextflow_schema.json | 29 +++++++++----- subworkflows/local/amp.nf | 52 ++++++++++---------------- subworkflows/local/function.nf | 3 +- 6 files changed, 56 insertions(+), 55 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 8b99c18c..80df7223 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -97,7 +97,7 @@ process { } withName: SEQKIT_SEQ_FILTER { - ext.prefix = { "${meta.id}_cleaned.faa" } // i think it will ad .tsv by default + ext.prefix = { "${meta.id}_cleaned.faa" } publishDir = [ path: { "${params.outdir}/function/interproscan" }, mode: params.publish_dir_mode, @@ -119,11 +119,11 @@ process { } withName: INTERPROSCAN { - ext.prefix = { "${meta.id}_interproscan.faa" } // add .tsv -- i tested it but it now saves it correctly as *faa.tsv which is what ampcombi requires + ext.prefix = { "${meta.id}_interproscan.faa" } // add .tsv -- i tested it but it now saves it correctly as *faa.tsv which is what ampcombi requires -check! publishDir = [ path: { "${params.outdir}/function/interproscan/" }, mode: params.publish_dir_mode, - enabled: params.run_function_interproscan, // SHould also be with save_annotation activated? + enabled: params.run_function_interproscan, // SHould also be with save_annotation activated?! saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] ext.args = [ @@ -598,8 +598,8 @@ process { "--hmm_evalue ${params.amp_ampcombi_parsetables_hmmevalue}", "--window_size_stop_codon ${params.amp_ampcombi_parsetables_windowstopcodon}", "--window_size_transporter ${params.amp_ampcombi_parsetables_windowtransport}", - params.amp_ampcombi_parsetables_removehitswostopcodons ? '--remove_stop_codons' : '', - "${params.dynamic_extra_args}" //dynamic arguments + params.amp_ampcombi_parsetables_removehitswostopcodons ? '--remove_stop_codons' : '' + //"${params.dynamic_extra_args}" //dynamic arguments ].join(' ').trim() ext.prefix = { "${meta.id}" } } diff --git a/modules/local/interproscan_download.nf b/modules/local/interproscan_download.nf index 98464548..170f8278 100644 --- a/modules/local/interproscan_download.nf +++ b/modules/local/interproscan_download.nf @@ -9,21 +9,23 @@ process INTERPROSCAN_DATABASE { 'biocontainers/curl:7.80.0' }" input: - val (database_url) + val database_url output: - path("interproscan_db/*") , emit: db - path "versions.yml" , emit: versions + path("interproscan_db/*") , emit: db + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: """ - mkdir interproscan_db/ + mkdir -p interproscan_db/ - curl -L ${database_url} -o interproscan_db/interproscan-5.59-91.0-64-bit.tar.gz - tar -xzf interproscan_db/interproscan-5.59-91.0-64-bit.tar.gz -C interproscan_db/ + filename=\$(basename ${database_url}) + + curl -L ${database_url} -o interproscan_db/\$filename + tar -xzf interproscan_db/\$filename -C interproscan_db/ cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/nextflow.config b/nextflow.config index 6d7c8236..243fb8c0 100644 --- a/nextflow.config +++ b/nextflow.config @@ -102,6 +102,7 @@ params { // Function classification options run_function_interproscan = false function_interproscan_db = '/Net/Groups/ccdata/databases/interproscan_5.67-99.0/'//null - change that in interproscan_download.nf + function_interproscan_db_url = 'http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.59-91.0/interproscan-5.59-91.0-64-bit.tar.gz'//change to the newest version tested with AMP: http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz function_interproscan_applications = 'PANTHER,ProSiteProfiles,ProSitePatterns,Pfam' function_interproscan_enableprecalc = false function_interproscan_enableresidueannot = false @@ -139,7 +140,7 @@ params { amp_ampcombi_parsetables_windowstopcodon = 60 amp_ampcombi_parsetables_windowtransport = 11 amp_ampcombi_parsetables_removehitswostopcodons = false - dynamic_extra_args = '' + //dynamic_extra_args = '' amp_ampcombi_cluster_covmode = 0 amp_ampcombi_cluster_mode = 1 amp_ampcombi_cluster_coverage = 0.8 diff --git a/nextflow_schema.json b/nextflow_schema.json index 89137f39..9503eb29 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -153,14 +153,14 @@ }, "taxa_classification_mmseqs_taxonomy_sensitivity": { "type": "number", - "default": 5.0, + "default": 5, "help_text": "This flag specifies the speed and sensitivity of the taxonomic search. It stands for how many kmers should be produced during the preliminary seeding stage. A very fast search requires a low value e.g. '1.0' and a a very sensitive search requires e.g. '7.0'. More details can be found in the [documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - mmseqs taxonomy: `-s`", "description": "Specify the speed and sensitivity for taxonomy assignment.", "fa_icon": "fas fa-history" }, "taxa_classification_mmseqs_taxonomy_orffilters": { "type": "number", - "default": 2.0, + "default": 2, "help_text": "This flag specifies the sensitivity used for prefiltering the query ORF. Before the taxonomy-assigning step, MMseqs2 searches the predicted ORFs against the provided database. This value influences the speed with which the search is carried out. More details can be found in the [documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - mmseqs taxonomy: `--orf-filter-s`", "description": "Specify the ORF search sensitivity in the prefilter step.", "fa_icon": "fas fa-history" @@ -648,7 +648,7 @@ }, "amp_ampcombi_parsetables_dbevalue": { "type": "number", - "default": 5.0, + "default": 5, "description": "Remove all DRAMP annotations that have an e-value greater than this value.", "help_text": "This e-value is used as a cut-off for the annotations from the internal Diamond alignment step (against the DRAMP database by default). Any e-value below this value will only remove the DRAMP classification and not the entire hit.\n\n> Modifies tool parameter(s):\n> - AMPCOMBI: `--db_evalue`", "fa_icon": "fas fa-sort-numeric-down" @@ -719,14 +719,14 @@ "properties": { "amp_ampcombi_cluster_covmode": { "type": "number", - "default": 0.0, + "default": 0, "description": "MMseqs2 coverage mode.", "help_text": "This assigns the coverage mode to the MMseqs2 cluster module. This determines how AMPs are grouped into clusters. More details can be found in the [MMseqs2 documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - AMPCOMBI: `--cluster_cov_mode`", "fa_icon": "far fa-circle" }, "amp_ampcombi_cluster_sensitivity": { "type": "number", - "default": 4.0, + "default": 4, "description": "Remove hits that have no stop codon upstream and downstream of the AMP.", "help_text": "This assigns the sensitivity of alignment to the MMseqs2 cluster module. This determines how AMPs are grouped into clusters. More information can be obtained in the [MMseqs2 documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - AMPCOMBI: `--cluster_sensitivity`", "fa_icon": "fas fa-arrows-alt-h" @@ -740,7 +740,7 @@ }, "amp_ampcombi_cluster_mode": { "type": "number", - "default": 1.0, + "default": 1, "description": "MMseqs2 clustering mode.", "help_text": "This assigns the cluster mode to the MMseqs2 cluster module. This determines how AMPs are grouped into clusters. More information can be obtained in the [MMseqs2 documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - AMPCOMBI: `--cluster_mode`", "fa_icon": "fas fa-circle" @@ -788,7 +788,7 @@ }, "arg_amrfinderplus_identmin": { "type": "number", - "default": -1.0, + "default": -1, "help_text": "Specify the minimum percentage amino-acid identity to reference protein or nucleotide identity for nucleotide reference must have if a BLAST alignment (based on methods: BLAST or PARTIAL) was detected, otherwise NA.\n\n If you specify `-1`, this means use a curated threshold if it exists and `0.9` otherwise.\n\nSetting this value to something other than `-1` will override any curated similarity cutoffs. For BLAST: alignment is > 90% of length and > 90% identity to a protein in the AMRFinderPlus database. For PARTIAL: alignment is > 50% of length, but < 90% of length and > 90% identity to the reference, and does not end at a contig boundary.\n\nFor more information check the AMRFinderPlus [documentation](https://github.com/ncbi/amr/wiki/Running-AMRFinderPlus#--organism-option).\n\n> Modifies tool parameter(s):\n> - AMRFinderPlus: `--ident_min`", "description": "Minimum percent identity to reference sequence.", "fa_icon": "fas fa-angle-left" @@ -1625,11 +1625,14 @@ ], "properties": { "run_function_interproscan": { - "type": "boolean" + "type": "boolean", + "description": "Activates the functional annotation of annotated coding regions.", + "help_text": "Activates the annotation of annotated coding regions using [InterProScan](https://github.com/ebi-pf-team/interproscan). These annotate the locus tags to protein and domain levels according to the InterPro database. \n\nMore details can be found in the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/index.html)." }, "function_interproscan_applications": { "type": "string", - "default": "Pfam" + "default": "PANTHER,ProSiteProfiles,ProSitePatterns,Pfam", + "help_text": "Assigns the database /s to be used to annotate the coding regions annotated during the 'Annotaton' workflow of the pipeline. By default these include `PANTHER,ProSiteProfiles,ProSitePatterns,Pfam`. \n- PANTHER (Protein ANalysis THrough Evolutionary Relationships): genes classified by their functions, using published scientific experimental evidence and evolutionary relationships. \n- PROSITE: protein domains, families, functional sites and specific patterns and profiles to identify them. \n- PFAM: protein families, represented by multiple sequence alignments and hidden Markov models (HMMs). \n\nThese databases were chosen based on the AMP workflow and therefore, with only these databases, do we guarantee the integration of the results to the AMPcombi final summary. Currently, no integration of the results are implemented for the BGC and the ARG final summary tables. \n\nFor more information about all possible databases see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--applications`" }, "function_interproscan_enableprecalc": { "type": "boolean" @@ -1639,6 +1642,14 @@ }, "function_interproscan_disableresidueannottsv": { "type": "boolean" + }, + "function_interproscan_db": { + "type": "string", + "default": "/Net/Groups/ccdata/databases/interproscan_5.67-99.0/" + }, + "function_interproscan_db_url": { + "type": "string", + "default": "http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.59-91.0/interproscan-5.59-91.0-64-bit.tar.gz" } } } diff --git a/subworkflows/local/amp.nf b/subworkflows/local/amp.nf index a52f7655..a0c10065 100644 --- a/subworkflows/local/amp.nf +++ b/subworkflows/local/amp.nf @@ -39,6 +39,7 @@ workflow AMP { ch_faa_for_ampir = faas ch_faa_for_ampcombi = faas ch_gbk_for_ampcombi = gbks + ch_interpro_for_ampcombi = tsvs_interpro // AMPLIFY if ( !params.amp_skip_amplify ) { @@ -105,51 +106,38 @@ workflow AMP { .groupTuple() .join( ch_faa_for_ampcombi ) .join( ch_gbk_for_ampcombi ) + .join( ch_interpro_for_ampcombi ) .multiMap{ input: [ it[0], it[1] ] faa: it[2] gbk: it[3] + interpro: it [4] } // INTERPROSCAN INPUT CHECK - // Check if tsv_interpro is empty, if not empty update the params.dynamic_extra_ergs and if empty dont update that and continue the commands - // dynamik arg - ampcombi_parse_optional_args = tsvs_interpro - .map { meta, file -> - "--interproscan_input ${file}" - } - // pass dynamik arg - ampcombi_parse_optional_args - .first() - .ifEmpty {} // just silently skip if empty - .subscribe { dynamik_arg -> // terminal, consumes value - // log.info "Resolved dynamic argument: ${dynamik_arg}" // only for debugging - params.dynamic_extra_args = dynamik_arg - } - // Pass combined args to ext.args in modules.config + // // Check if tsv_interpro is empty, if not empty update the params.dynamic_extra_ergs and if empty dont update that and continue the commands + // // dynamik arg + // ampcombi_parse_optional_args = tsvs_interpro + // .map { meta, file -> + // "--interproscan_input ${file}" + // } + // // pass dynamik arg + // ampcombi_parse_optional_args + // .first() + // .ifEmpty {} // just silently skip if empty + // .subscribe { dynamik_arg -> // terminal, consumes value + // // log.info "Resolved dynamic argument: ${dynamik_arg}" // only for debugging + // params.dynamic_extra_args = dynamik_arg + // } + // // Pass combined args to ext.args in modules.config if ( params.amp_ampcombi_db != null ) { - //AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db ) - //// dynamik arg - //ampcombi_parse_optional_args = tsvs_interpro - // .map { meta, file -> - // "--interproscan_input ${file}" - // } - //// pass dynamik arg - //ampcombi_parse_optional_args - // .first() - // .ifEmpty {} // just silently skip if empty - // .subscribe { dynamik_arg -> // terminal, consumes value - // // log.info "Resolved dynamic argument: ${dynamik_arg}" // only for debugging - // params.dynamic_extra_args = dynamik_arg - // } - // Pass combined args to ext.args in modules.config - AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db) + AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db, ch_input_for_ampcombi.interpro ) } else { DRAMP_DOWNLOAD() ch_versions = ch_versions.mix( DRAMP_DOWNLOAD.out.versions ) ch_ampcombi_input_db = DRAMP_DOWNLOAD.out.db - AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, ch_ampcombi_input_db ) + AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, ch_ampcombi_input_db, ch_input_for_ampcombi.interpro ) } ch_versions = ch_versions.mix( AMPCOMBI2_PARSETABLES.out.versions ) diff --git a/subworkflows/local/function.nf b/subworkflows/local/function.nf index d66ebe87..5861960c 100644 --- a/subworkflows/local/function.nf +++ b/subworkflows/local/function.nf @@ -21,8 +21,7 @@ workflow FUNCTION { .fromPath( params.function_interproscan_db ) .first() // i dont know if this is required!!!? } else { - // NOTE: when url is changed here also change in 'funcscan/modules/local/interproscan_download.nf' - INTERPROSCAN_DATABASE ('http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.59-91.0/interproscan-5.59-91.0-64-bit.tar.gz') //change to the newest version tested with AMP: http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz + INTERPROSCAN_DATABASE ( params.function_interproscan_db_url ) ch_versions = ch_versions.mix( INTERPROSCAN_DATABASE.out.versions ) ch_interproscan_db = ( INTERPROSCAN_DATABASE.out.db ) } From 637b4858260d77871c3e5469659d8d3bed90f6bb Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Thu, 12 Dec 2024 11:23:53 +0000 Subject: [PATCH 032/175] Template update for nf-core/tools version 3.1.0 --- .github/CONTRIBUTING.md | 12 +- .github/workflows/awsfulltest.yml | 21 +- .github/workflows/branch.yml | 18 +- .github/workflows/ci.yml | 2 +- .github/workflows/download_pipeline.yml | 8 +- .github/workflows/fix-linting.yml | 4 +- .github/workflows/linting.yml | 10 +- .github/workflows/linting_comment.yml | 2 +- .github/workflows/release-announcements.yml | 2 +- .../workflows/template_version_comment.yml | 2 +- .gitpod.yml | 11 +- .nf-core.yml | 6 +- .vscode/settings.json | 3 + conf/base.config | 2 +- conf/modules.config | 1 + docs/usage.md | 32 +- modules.json | 8 +- modules/nf-core/fastqc/main.nf | 2 +- modules/nf-core/fastqc/meta.yml | 1 + nextflow.config | 77 ++++- nextflow_schema.json | 6 + ro-crate-metadata.json | 324 ++++++++++++++++++ .../utils_nfcore_funcscan_pipeline/main.nf | 7 +- .../nf-core/utils_nextflow_pipeline/main.nf | 2 + .../tests/main.workflow.nf.test | 10 +- .../nf-core/utils_nfcore_pipeline/main.nf | 89 ++--- .../tests/main.function.nf.test | 46 +-- .../tests/main.function.nf.test.snap | 30 -- .../utils_nfschema_plugin/tests/main.nf.test | 4 +- workflows/funcscan.nf | 2 +- 30 files changed, 526 insertions(+), 218 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 ro-crate-metadata.json diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 8f39e21b..a5434a32 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,4 +1,4 @@ -# nf-core/funcscan: Contributing Guidelines +# `nf-core/funcscan`: Contributing Guidelines Hi there! Many thanks for taking an interest in improving nf-core/funcscan. @@ -55,9 +55,9 @@ These tests are run both with the latest available version of `Nextflow` and als :warning: Only in the unlikely and regretful event of a release happening with a bug. -- On your own fork, make a new branch `patch` based on `upstream/master`. +- On your own fork, make a new branch `patch` based on `upstream/main` or `upstream/master`. - Fix the bug, and bump version (X.Y.Z+1). -- A PR should be made on `master` from patch to directly this particular bug. +- Open a pull-request from `patch` to `main`/`master` with the changes. ## Getting help @@ -65,13 +65,13 @@ For further information/help, please consult the [nf-core/funcscan documentation ## Pipeline contribution conventions -To make the nf-core/funcscan 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 `nf-core/funcscan` 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 If you wish to contribute a new step, please use the following coding standards: -1. Define the corresponding input channel into your new process from the expected previous process channel +1. Define the corresponding input channel into your new process from the expected previous process channel. 2. Write the process block (see below). 3. Define the output channel if needed (see below). 4. Add any new parameters to `nextflow.config` with a default (see below). @@ -84,7 +84,7 @@ If you wish to contribute a new step, please use the following coding standards: ### Default values -Parameters should be initialised / defined with default values in `nextflow.config` under the `params` scope. +Parameters should be initialised / defined with default values within the `params` scope in `nextflow.config`. Once there, use `nf-core pipelines schema build` to add to `nextflow_schema.json`. diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index cb53debf..47953c77 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -1,11 +1,12 @@ name: nf-core AWS full size tests -# This workflow is triggered on PRs opened against the master branch. +# This workflow is triggered on PRs opened against the main/master branch. # It can be additionally triggered manually with GitHub actions workflow dispatch button. # It runs the -profile 'test_full' on AWS batch on: pull_request: branches: + - main - master workflow_dispatch: pull_request_review: @@ -18,18 +19,30 @@ jobs: if: github.repository == 'nf-core/funcscan' && github.event.review.state == 'approved' && github.event.pull_request.base.ref == 'master' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest steps: - - uses: octokit/request-action@v2.x + - name: Get PR reviews + uses: octokit/request-action@v2.x + if: github.event_name != 'workflow_dispatch' id: check_approvals + continue-on-error: true with: - route: GET /repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews + route: GET /repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews?per_page=100 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - id: test_variables + + - name: Check for approvals + if: ${{ failure() && github.event_name != 'workflow_dispatch' }} + run: | + echo "No review approvals found. At least 2 approvals are required to run this action automatically." + exit 1 + + - name: Check for enough approvals (>=2) + id: test_variables if: github.event_name != 'workflow_dispatch' run: | JSON_RESPONSE='${{ steps.check_approvals.outputs.data }}' CURRENT_APPROVALS_COUNT=$(echo $JSON_RESPONSE | jq -c '[.[] | select(.state | contains("APPROVED")) ] | length') test $CURRENT_APPROVALS_COUNT -ge 2 || exit 1 # At least 2 approvals are required + - name: Launch workflow via Seqera Platform uses: seqeralabs/action-tower-launch@v2 # TODO nf-core: You can customise AWS full pipeline tests as required diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index 6e4495ad..4815e1eb 100644 --- a/.github/workflows/branch.yml +++ b/.github/workflows/branch.yml @@ -1,15 +1,17 @@ name: nf-core branch protection -# This workflow is triggered on PRs to master branch on the repository -# It fails when someone tries to make a PR against the nf-core `master` branch instead of `dev` +# This workflow is triggered on PRs to `main`/`master` branch on the repository +# It fails when someone tries to make a PR against the nf-core `main`/`master` branch instead of `dev` on: pull_request_target: - branches: [master] + branches: + - main + - master jobs: test: runs-on: ubuntu-latest steps: - # PRs to the nf-core repo master branch are only ok if coming from the nf-core repo `dev` or any `patch` branches + # 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 == 'nf-core/funcscan' run: | @@ -22,7 +24,7 @@ jobs: uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2 with: message: | - ## This PR is against the `master` branch :x: + ## This PR is against the `${{github.event.pull_request.base.ref}}` branch :x: * Do not close this PR * Click _Edit_ and change the `base` to `dev` @@ -32,9 +34,9 @@ jobs: Hi @${{ github.event.pull_request.user.login }}, - It looks like this pull-request is has been made against the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `master` branch. - The `master` branch on nf-core repositories should always contain code from the latest release. - Because of this, PRs to `master` are only allowed if they come from the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `dev` branch. + It looks like this pull-request is has been made against the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) ${{github.event.pull_request.base.ref}} branch. + The ${{github.event.pull_request.base.ref}} branch on nf-core repositories should always contain code from the latest release. + Because of this, PRs to ${{github.event.pull_request.base.ref}} are only allowed if they come from the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `dev` branch. You do not need to close this PR, you can change the target branch to `dev` by clicking the _"Edit"_ button at the top of this page. Note that even after this, the test will continue to show as failing until you push a new commit. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e6930d68..72e51e1f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,7 +45,7 @@ jobs: profile: "singularity" steps: - name: Check out pipeline code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - 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 713dc3e7..2576cc0c 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -2,7 +2,7 @@ name: Test successful pipeline download with 'nf-core pipelines download' # Run the workflow when: # - dispatched manually -# - when a PR is opened or reopened to master branch +# - when a PR is opened or reopened to main/master branch # - the head branch of the pull request is updated, i.e. if fixes for a release are pushed last minute to dev. on: workflow_dispatch: @@ -17,9 +17,11 @@ on: - edited - synchronize branches: + - main - master pull_request_target: branches: + - main - master env: @@ -35,7 +37,7 @@ jobs: - name: Disk space cleanup uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 with: python-version: "3.12" architecture: "x64" @@ -69,7 +71,7 @@ jobs: --outdir ./${{ env.REPOTITLE_LOWERCASE }} \ --compress "none" \ --container-system 'singularity' \ - --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io" \ + --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io/library/" \ --container-cache-utilisation 'amend' \ --download-configuration 'yes' diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix-linting.yml index f0aa68f2..5a7d4983 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@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 with: token: ${{ secrets.nf_core_bot_auth_token }} @@ -32,7 +32,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }} # Install and run pre-commit - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 with: python-version: "3.12" diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index a502573c..dbd52d5a 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -14,10 +14,10 @@ jobs: pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - name: Set up Python 3.12 - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 with: python-version: "3.12" @@ -31,12 +31,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - name: Install Nextflow uses: nf-core/setup-nextflow@v2 - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 with: python-version: "3.12" architecture: "x64" @@ -74,7 +74,7 @@ jobs: - name: Upload linting log file artifact if: ${{ always() }} - uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4 with: name: linting-logs path: | diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 42e519bf..0bed96d3 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@bf251b5aa9c2f7eeb574a96ee720e24f801b7c11 # v6 + uses: dawidd6/action-download-artifact@80620a5d27ce0ae443b965134db88467fc607b43 # v7 with: workflow: linting.yml workflow_conclusion: completed diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index c6ba35df..450b1d5e 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -31,7 +31,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 with: python-version: "3.10" - name: Install dependencies diff --git a/.github/workflows/template_version_comment.yml b/.github/workflows/template_version_comment.yml index e8aafe44..537529bc 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@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 with: ref: ${{ github.event.pull_request.head.sha }} diff --git a/.gitpod.yml b/.gitpod.yml index 46118637..83599f63 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -6,12 +6,5 @@ tasks: nextflow self-update vscode: - extensions: # based on nf-core.nf-core-extensionpack - #- esbenp.prettier-vscode # Markdown/CommonMark linting and style checking for Visual Studio Code - - EditorConfig.EditorConfig # override user/workspace settings with settings found in .editorconfig files - - Gruntfuggly.todo-tree # Display TODO and FIXME in a tree view in the activity bar - - mechatroner.rainbow-csv # Highlight columns in csv files in different colors - - nextflow.nextflow # Nextflow syntax highlighting - - oderwat.indent-rainbow # Highlight indentation level - - streetsidesoftware.code-spell-checker # Spelling checker for source code - - charliermarsh.ruff # Code linter Ruff + extensions: + - nf-core.nf-core-extensionpack # https://github.com/nf-core/vscode-extensionpack diff --git a/.nf-core.yml b/.nf-core.yml index 4267fd77..eb1f60b7 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,8 +1,6 @@ -bump_version: null lint: actions_ci: false -nf_core_version: 3.0.2 -org_path: null +nf_core_version: 3.1.0 repository_type: pipeline template: author: Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James @@ -13,6 +11,4 @@ template: name: funcscan org: nf-core outdir: . - skip_features: null version: 2.1.0dev -update: null diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..a33b527c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "markdown.styles": ["public/vscode_markdown.css"] +} diff --git a/conf/base.config b/conf/base.config index 9c812893..d4119475 100644 --- a/conf/base.config +++ b/conf/base.config @@ -20,7 +20,7 @@ process { maxErrors = '-1' // Process-specific resource requirements - // NOTE - Please try and re-use the labels below as much as possible. + // NOTE - Please try and reuse the labels below as much as possible. // These labels are used and recognised by default in DSL2 files hosted on nf-core/modules. // If possible, it would be nice to keep the same label naming convention when // adding in your local modules too. diff --git a/conf/modules.config b/conf/modules.config index d266a387..d203d2b6 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -21,6 +21,7 @@ process { withName: FASTQC { ext.args = '--quiet' } + withName: 'MULTIQC' { ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } publishDir = [ diff --git a/docs/usage.md b/docs/usage.md index 0964dc6a..fe73ac87 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -75,9 +75,8 @@ If you wish to repeatedly use the same parameters for multiple runs, rather than Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `. -:::warning -Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). -::: +> [!WARNING] +> Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). The above pipeline run specified with a params file in yaml format: @@ -106,23 +105,21 @@ nextflow pull nf-core/funcscan ### Reproducibility -It is a good idea to specify a 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. +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 [nf-core/funcscan releases page](https://github.com/nf-core/funcscan/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. -To further assist in reproducbility, you can use share and re-use [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. +To further assist in reproducibility, you can use share and reuse [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. -:::tip -If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. -::: +> [!TIP] +> If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. ## Core Nextflow arguments -:::note -These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen). -::: +> [!NOTE] +> These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen) ### `-profile` @@ -130,16 +127,15 @@ Use this parameter to choose a configuration profile. Profiles can give configur Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Apptainer, Conda) - see below. -:::info -We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. -::: +> [!IMPORTANT] +> We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. -The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). +The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to check if your system is suported, please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important! They are loaded in sequence, so later profiles can overwrite earlier profiles. -If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer enviroment. +If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer environment. - `test` - A profile with a complete configuration for automated testing @@ -175,13 +171,13 @@ Specify the path to a specific config file (this is a core Nextflow command). Se ### Resource requests -Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher requests (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. +Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the pipeline steps, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher resources request (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. To change the resource requests, please see the [max resources](https://nf-co.re/docs/usage/configuration#max-resources) and [tuning workflow resources](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources) section of the nf-core website. ### Custom Containers -In some cases you may wish to change which container or conda environment a step of the pipeline uses for a particular tool. By default nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However in some cases the pipeline specified version maybe out of date. +In some cases, you may wish to change the container or conda environment used by a pipeline steps for a particular tool. By default, nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However, in some cases the pipeline specified version maybe out of date. To use a different container from the default container or conda environment specified in a pipeline, please see the [updating tool versions](https://nf-co.re/docs/usage/configuration#updating-tool-versions) section of the nf-core website. diff --git a/modules.json b/modules.json index cfc0ad65..46bda8fd 100644 --- a/modules.json +++ b/modules.json @@ -7,7 +7,7 @@ "nf-core": { "fastqc": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "dc94b6ee04a05ddb9f7ae050712ff30a13149164", "installed_by": ["modules"] }, "multiqc": { @@ -21,17 +21,17 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "3aa0aec1d52d492fe241919f0c6100ebf0074082", + "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", + "git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", - "git_sha": "bbd5a41f4535a8defafe6080e00ea74c45f4f96c", + "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", "installed_by": ["subworkflows"] } } diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index d8989f48..752c3a10 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -24,7 +24,7 @@ process FASTQC { // Make list of old name and new name pairs to use for renaming in the bash while loop def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[ reads, "${prefix}.${reads.extension}" ]] : reads.withIndex().collect { entry, index -> [ entry, "${prefix}_${index + 1}.${entry.extension}" ] } def rename_to = old_new_pairs*.join(' ').join(' ') - def renamed_files = old_new_pairs.collect{ old_name, new_name -> new_name }.join(' ') + def renamed_files = old_new_pairs.collect{ _old_name, new_name -> new_name }.join(' ') // The total amount of allocated RAM by FastQC is equal to the number of threads defined (--threads) time the amount of RAM defined (--memory) // https://github.com/s-andrews/FastQC/blob/1faeea0412093224d7f6a07f777fad60a5650795/fastqc#L211-L222 diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml index 4827da7a..2b2e62b8 100644 --- a/modules/nf-core/fastqc/meta.yml +++ b/modules/nf-core/fastqc/meta.yml @@ -11,6 +11,7 @@ tools: FastQC gives general quality metrics about your reads. It provides information about the quality score distribution across your reads, the per base sequence content (%A/C/G/T). + You get information about adapter contamination and other overrepresented sequences. homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ diff --git a/nextflow.config b/nextflow.config index c9f36266..0691259a 100644 --- a/nextflow.config +++ b/nextflow.config @@ -38,8 +38,7 @@ params { show_hidden = false version = false pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' - - // 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 @@ -153,6 +152,13 @@ profiles { executor.name = 'local' executor.cpus = 4 executor.memory = 8.GB + process { + resourceLimits = [ + memory: 8.GB, + cpus : 4, + time : 1.h + ] + } } test { includeConfig 'conf/test.config' } test_full { includeConfig 'conf/test_full.config' } @@ -201,30 +207,73 @@ set -C # No clobber - prevent output redirection from overwriting files. // Disable process selector warnings by default. Use debug profile to enable warnings. nextflow.enable.configProcessNamesValidation = false -def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') timeline { enabled = true - file = "${params.outdir}/pipeline_info/execution_timeline_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/execution_timeline_${params.trace_report_suffix}.html" } report { enabled = true - file = "${params.outdir}/pipeline_info/execution_report_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/execution_report_${params.trace_report_suffix}.html" } trace { enabled = true - file = "${params.outdir}/pipeline_info/execution_trace_${trace_timestamp}.txt" + file = "${params.outdir}/pipeline_info/execution_trace_${params.trace_report_suffix}.txt" } dag { enabled = true - file = "${params.outdir}/pipeline_info/pipeline_dag_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/pipeline_dag_${params.trace_report_suffix}.html" } manifest { name = 'nf-core/funcscan' - author = """Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James A. Fellows Yates""" + author = """Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James A. Fellows Yates""" // 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 + [ + name: 'Jasmin Frangenberg', + affiliation: '', + email: '', + github: '', + contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') + orcid: '' + ], + [ + name: ' Anan Ibrahim', + affiliation: '', + email: '', + github: '', + contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') + orcid: '' + ], + [ + name: ' Louisa Perelo', + affiliation: '', + email: '', + github: '', + contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') + orcid: '' + ], + [ + name: ' Moritz E. Beber', + affiliation: '', + email: '', + github: '', + contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') + orcid: '' + ], + [ + name: ' James A. Fellows Yates', + affiliation: '', + email: '', + github: '', + contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') + orcid: '' + ], + ] homePage = 'https://github.com/nf-core/funcscan' description = """Pipeline for screening for functional components of assembled contigs""" mainScript = 'main.nf' + defaultBranch = 'master' nextflowVersion = '!>=24.04.2' version = '2.1.0dev' doi = '' @@ -237,9 +286,10 @@ plugins { validation { defaultIgnoreParams = ["genomes"] + monochromeLogs = params.monochrome_logs help { enabled = true - command = "nextflow run $manifest.name -profile --input samplesheet.csv --outdir " + command = "nextflow run nf-core/funcscan -profile --input samplesheet.csv --outdir " fullParameter = "help_full" showHiddenParameter = "show_hidden" beforeText = """ @@ -249,15 +299,15 @@ validation { \033[0;34m |\\ | |__ __ / ` / \\ |__) |__ \033[0;33m} {\033[0m \033[0;34m | \\| | \\__, \\__/ | \\ |___ \033[0;32m\\`-._,-`-,\033[0m \033[0;32m`._,._,\'\033[0m -\033[0;35m ${manifest.name} ${manifest.version}\033[0m +\033[0;35m nf-core/funcscan ${manifest.version}\033[0m -\033[2m----------------------------------------------------\033[0m- """ - afterText = """${manifest.doi ? "* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""} + afterText = """${manifest.doi ? "\n* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""} * The nf-core framework https://doi.org/10.1038/s41587-020-0439-x * Software dependencies - https://github.com/${manifest.name}/blob/master/CITATIONS.md + https://github.com/nf-core/funcscan/blob/master/CITATIONS.md """ } summary { @@ -265,6 +315,3 @@ validation { afterText = validation.help.afterText } } - -// Load modules.config for DSL2 module specific options -includeConfig 'conf/modules.config' diff --git a/nextflow_schema.json b/nextflow_schema.json index e536a9d2..60a71c78 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -218,6 +218,12 @@ "description": "Base URL or local path to location of pipeline test dataset files", "default": "https://raw.githubusercontent.com/nf-core/test-datasets/", "hidden": true + }, + "trace_report_suffix": { + "type": "string", + "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 } } } diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json new file mode 100644 index 00000000..585014ae --- /dev/null +++ b/ro-crate-metadata.json @@ -0,0 +1,324 @@ +{ + "@context": [ + "https://w3id.org/ro/crate/1.1/context", + { + "GithubService": "https://w3id.org/ro/terms/test#GithubService", + "JenkinsService": "https://w3id.org/ro/terms/test#JenkinsService", + "PlanemoEngine": "https://w3id.org/ro/terms/test#PlanemoEngine", + "TestDefinition": "https://w3id.org/ro/terms/test#TestDefinition", + "TestInstance": "https://w3id.org/ro/terms/test#TestInstance", + "TestService": "https://w3id.org/ro/terms/test#TestService", + "TestSuite": "https://w3id.org/ro/terms/test#TestSuite", + "TravisService": "https://w3id.org/ro/terms/test#TravisService", + "definition": "https://w3id.org/ro/terms/test#definition", + "engineVersion": "https://w3id.org/ro/terms/test#engineVersion", + "instance": "https://w3id.org/ro/terms/test#instance", + "resource": "https://w3id.org/ro/terms/test#resource", + "runsOn": "https://w3id.org/ro/terms/test#runsOn" + } + ], + "@graph": [ + { + "@id": "./", + "@type": "Dataset", + "creativeWorkStatus": "InProgress", + "datePublished": "2024-12-12T11:23:38+00:00", + "description": "

\n \n \n \"nf-core/funcscan\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/funcscan/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/funcscan/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/funcscan/results)[![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/nf-core/funcscan)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23funcscan-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/funcscan)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/funcscan** is a bioinformatics pipeline that ...\n\n\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))\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 nf-core/funcscan \\\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\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/funcscan/usage) and the [parameter documentation](https://nf-co.re/funcscan/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/funcscan/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/funcscan/output).\n\n## Credits\n\nnf-core/funcscan was originally written by Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James A. Fellows Yates.\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\nFor further information or help, don't hesitate to get in touch on the [Slack `#funcscan` channel](https://nfcore.slack.com/channels/funcscan) (you can join with [this invite](https://nf-co.re/join/slack)).\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\nYou can cite the `nf-core` publication as follows:\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" + }, + { + "@id": "assets/" + }, + { + "@id": "conf/" + }, + { + "@id": "docs/" + }, + { + "@id": "docs/images/" + }, + { + "@id": "modules/" + }, + { + "@id": "modules/nf-core/" + }, + { + "@id": "workflows/" + }, + { + "@id": "subworkflows/" + }, + { + "@id": "nextflow.config" + }, + { + "@id": "README.md" + }, + { + "@id": "nextflow_schema.json" + }, + { + "@id": "CHANGELOG.md" + }, + { + "@id": "LICENSE" + }, + { + "@id": "CODE_OF_CONDUCT.md" + }, + { + "@id": "CITATIONS.md" + }, + { + "@id": "modules.json" + }, + { + "@id": "docs/usage.md" + }, + { + "@id": "docs/output.md" + }, + { + "@id": ".nf-core.yml" + }, + { + "@id": ".pre-commit-config.yaml" + }, + { + "@id": ".prettierignore" + } + ], + "isBasedOn": "https://github.com/nf-core/funcscan", + "license": "MIT", + "mainEntity": { + "@id": "main.nf" + }, + "mentions": [ + { + "@id": "#81e54547-4c56-4a55-8ebc-88d7333cd8f9" + } + ], + "name": "nf-core/funcscan" + }, + { + "@id": "ro-crate-metadata.json", + "@type": "CreativeWork", + "about": { + "@id": "./" + }, + "conformsTo": [ + { + "@id": "https://w3id.org/ro/crate/1.1" + }, + { + "@id": "https://w3id.org/workflowhub/workflow-ro-crate/1.0" + } + ] + }, + { + "@id": "main.nf", + "@type": ["File", "SoftwareSourceCode", "ComputationalWorkflow"], + "creator": [ + { + "@id": "#jfy133@gmail.com" + } + ], + "dateCreated": "", + "dateModified": "2024-12-12T11:23:38Z", + "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", + "keywords": [ + "nf-core", + "nextflow", + "amp", + "amr", + "antibiotic-resistance", + "antimicrobial-peptides", + "antimicrobial-resistance-genes", + "arg", + "assembly", + "bgc", + "biosynthetic-gene-clusters", + "contigs", + "function", + "metagenomics", + "natural-products", + "screening", + "secondary-metabolites" + ], + "license": ["MIT"], + "name": ["nf-core/funcscan"], + "programmingLanguage": { + "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow" + }, + "sdPublisher": { + "@id": "https://nf-co.re/" + }, + "url": ["https://github.com/nf-core/funcscan", "https://nf-co.re/funcscan/dev/"], + "version": ["2.1.0dev"] + }, + { + "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow", + "@type": "ComputerLanguage", + "identifier": { + "@id": "https://www.nextflow.io/" + }, + "name": "Nextflow", + "url": { + "@id": "https://www.nextflow.io/" + }, + "version": "!>=24.04.2" + }, + { + "@id": "#81e54547-4c56-4a55-8ebc-88d7333cd8f9", + "@type": "TestSuite", + "instance": [ + { + "@id": "#9b92794c-5ba0-4816-8b18-0346b8e4fefd" + } + ], + "mainEntity": { + "@id": "main.nf" + }, + "name": "Test suite for nf-core/funcscan" + }, + { + "@id": "#9b92794c-5ba0-4816-8b18-0346b8e4fefd", + "@type": "TestInstance", + "name": "GitHub Actions workflow for testing nf-core/funcscan", + "resource": "repos/nf-core/funcscan/actions/workflows/ci.yml", + "runsOn": { + "@id": "https://w3id.org/ro/terms/test#GithubService" + }, + "url": "https://api.github.com" + }, + { + "@id": "https://w3id.org/ro/terms/test#GithubService", + "@type": "TestService", + "name": "Github Actions", + "url": { + "@id": "https://github.com" + } + }, + { + "@id": "assets/", + "@type": "Dataset", + "description": "Additional files" + }, + { + "@id": "conf/", + "@type": "Dataset", + "description": "Configuration files" + }, + { + "@id": "docs/", + "@type": "Dataset", + "description": "Markdown files for documenting the pipeline" + }, + { + "@id": "docs/images/", + "@type": "Dataset", + "description": "Images for the documentation files" + }, + { + "@id": "modules/", + "@type": "Dataset", + "description": "Modules used by the pipeline" + }, + { + "@id": "modules/nf-core/", + "@type": "Dataset", + "description": "nf-core modules" + }, + { + "@id": "workflows/", + "@type": "Dataset", + "description": "Main pipeline workflows to be executed in main.nf" + }, + { + "@id": "subworkflows/", + "@type": "Dataset", + "description": "Smaller subworkflows" + }, + { + "@id": "nextflow.config", + "@type": "File", + "description": "Main Nextflow configuration file" + }, + { + "@id": "README.md", + "@type": "File", + "description": "Basic pipeline usage information" + }, + { + "@id": "nextflow_schema.json", + "@type": "File", + "description": "JSON schema for pipeline parameter specification" + }, + { + "@id": "CHANGELOG.md", + "@type": "File", + "description": "Information on changes made to the pipeline" + }, + { + "@id": "LICENSE", + "@type": "File", + "description": "The license - should be MIT" + }, + { + "@id": "CODE_OF_CONDUCT.md", + "@type": "File", + "description": "The nf-core code of conduct" + }, + { + "@id": "CITATIONS.md", + "@type": "File", + "description": "Citations needed when using the pipeline" + }, + { + "@id": "modules.json", + "@type": "File", + "description": "Version information for modules from nf-core/modules" + }, + { + "@id": "docs/usage.md", + "@type": "File", + "description": "Usage documentation" + }, + { + "@id": "docs/output.md", + "@type": "File", + "description": "Output documentation" + }, + { + "@id": ".nf-core.yml", + "@type": "File", + "description": "nf-core configuration file, configuring template features and linting rules" + }, + { + "@id": ".pre-commit-config.yaml", + "@type": "File", + "description": "Configuration file for pre-commit hooks" + }, + { + "@id": ".prettierignore", + "@type": "File", + "description": "Ignore file for prettier" + }, + { + "@id": "https://nf-co.re/", + "@type": "Organization", + "name": "nf-core", + "url": "https://nf-co.re/" + }, + { + "@id": "#jfy133@gmail.com", + "@type": "Person", + "email": "jfy133@gmail.com", + "name": "James Fellows Yates" + } + ] +} diff --git a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf index 7264f1d4..5693c827 100644 --- a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf @@ -116,7 +116,8 @@ workflow PIPELINE_COMPLETION { main: summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") - + def multiqc_reports = multiqc_report.toList() + // // Completion email and summary // @@ -129,7 +130,7 @@ workflow PIPELINE_COMPLETION { plaintext_email, outdir, monochrome_logs, - multiqc_report.toList() + multiqc_reports.getVal(), ) } @@ -225,7 +226,7 @@ def toolBibliographyText() { } def methodsDescriptionText(mqc_methods_yaml) { - // Convert to a named map so can be used as with familar NXF ${workflow} variable syntax in the MultiQC YML file + // Convert to a named map so can be used as with familiar NXF ${workflow} variable syntax in the MultiQC YML file def meta = [:] meta.workflow = workflow.toMap() meta["manifest_map"] = workflow.manifest.toMap() diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index 0fcbf7b3..d6e593e8 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -92,10 +92,12 @@ def checkCondaChannels() { channels = config.channels } catch (NullPointerException e) { + log.debug(e) log.warn("Could not verify conda channel configuration.") return null } catch (IOException e) { + log.debug(e) log.warn("Could not verify conda channel configuration.") return null } diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test index ca964ce8..02dbf094 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test @@ -52,10 +52,12 @@ nextflow_workflow { } then { - assertAll( - { assert workflow.success }, - { assert workflow.stdout.contains("nextflow_workflow v9.9.9") } - ) + expect { + with(workflow) { + assert success + assert "nextflow_workflow v9.9.9" in stdout + } + } } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index 5cb7bafe..bfd25876 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -56,21 +56,6 @@ def checkProfileProvided(nextflow_cli_args) { } } -// -// Citation string for pipeline -// -def workflowCitation() { - def temp_doi_ref = "" - def manifest_doi = workflow.manifest.doi.tokenize(",") - // Handling multiple DOIs - // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers - // Removing ` ` since the manifest.doi is a string and not a proper list - manifest_doi.each { doi_ref -> - temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" - } - return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + "* The pipeline\n" + temp_doi_ref + "\n" + "* The nf-core framework\n" + " https://doi.org/10.1038/s41587-020-0439-x\n\n" + "* Software dependencies\n" + " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" -} - // // Generate workflow version string // @@ -150,33 +135,6 @@ def paramsSummaryMultiqc(summary_params) { return yaml_file_text } -// -// nf-core logo -// -def nfCoreLogo(monochrome_logs=true) { - def colors = logColours(monochrome_logs) as Map - String.format( - """\n - ${dashedLine(monochrome_logs)} - ${colors.green},--.${colors.black}/${colors.green},-.${colors.reset} - ${colors.blue} ___ __ __ __ ___ ${colors.green}/,-._.--~\'${colors.reset} - ${colors.blue} |\\ | |__ __ / ` / \\ |__) |__ ${colors.yellow}} {${colors.reset} - ${colors.blue} | \\| | \\__, \\__/ | \\ |___ ${colors.green}\\`-._,-`-,${colors.reset} - ${colors.green}`._,._,\'${colors.reset} - ${colors.purple} ${workflow.manifest.name} ${getWorkflowVersion()}${colors.reset} - ${dashedLine(monochrome_logs)} - """.stripIndent() - ) -} - -// -// Return dashed line -// -def dashedLine(monochrome_logs=true) { - def colors = logColours(monochrome_logs) as Map - return "-${colors.dim}----------------------------------------------------${colors.reset}-" -} - // // ANSII colours used for terminal logging // @@ -245,28 +203,24 @@ def logColours(monochrome_logs=true) { return colorcodes } -// -// Attach the multiqc report to email -// -def attachMultiqcReport(multiqc_report) { - def mqc_report = null - try { - if (workflow.success) { - mqc_report = multiqc_report.getVal() - if (mqc_report.getClass() == ArrayList && mqc_report.size() >= 1) { - if (mqc_report.size() > 1) { - log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") - } - mqc_report = mqc_report[0] - } +// Return a single report from an object that may be a Path or List +// +def getSingleReport(multiqc_reports) { + if (multiqc_reports instanceof Path) { + return multiqc_reports + } else if (multiqc_reports instanceof List) { + if (multiqc_reports.size() == 0) { + log.warn("[${workflow.manifest.name}] No reports found from process 'MULTIQC'") + return null + } else if (multiqc_reports.size() == 1) { + return multiqc_reports.first() + } else { + log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") + return multiqc_reports.first() } + } else { + return null } - catch (Exception all) { - if (multiqc_report) { - log.warn("[${workflow.manifest.name}] Could not attach MultiQC report to summary email") - } - } - return mqc_report } // @@ -320,7 +274,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi email_fields['summary'] = summary << misc_fields // On success try attach the multiqc report - def mqc_report = attachMultiqcReport(multiqc_report) + def mqc_report = getSingleReport(multiqc_report) // Check if we are only sending emails on failure def email_address = email @@ -340,7 +294,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi def email_html = html_template.toString() // Render the sendmail template - def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as nextflow.util.MemoryUnit + def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as MemoryUnit def smail_fields = [email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()] def sf = new File("${workflow.projectDir}/assets/sendmail_template.txt") def sendmail_template = engine.createTemplate(sf).make(smail_fields) @@ -351,14 +305,17 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi if (email_address) { try { if (plaintext_email) { -new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') } + new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') + } // Try to send HTML e-mail using sendmail def sendmail_tf = new File(workflow.launchDir.toString(), ".sendmail_tmp.html") sendmail_tf.withWriter { w -> w << sendmail_html } ['sendmail', '-t'].execute() << sendmail_html log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (sendmail)-") } - catch (Exception all) { + catch (Exception msg) { + log.debug(msg.toString()) + log.debug("Trying with mail instead of sendmail") // Catch failures and try with plaintext def mail_cmd = ['mail', '-s', subject, '--content-type=text/html', email_address] mail_cmd.execute() << email_html diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test index 1dc317f8..f117040c 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test @@ -41,26 +41,14 @@ nextflow_function { } } - test("Test Function workflowCitation") { - - function "workflowCitation" - - then { - assertAll( - { assert function.success }, - { assert snapshot(function.result).match() } - ) - } - } - - test("Test Function nfCoreLogo") { + test("Test Function without logColours") { - function "nfCoreLogo" + function "logColours" when { function { """ - input[0] = false + input[0] = true """ } } @@ -73,9 +61,8 @@ nextflow_function { } } - test("Test Function dashedLine") { - - function "dashedLine" + test("Test Function with logColours") { + function "logColours" when { function { @@ -93,14 +80,13 @@ nextflow_function { } } - test("Test Function without logColours") { - - function "logColours" + test("Test Function getSingleReport with a single file") { + function "getSingleReport" when { function { """ - input[0] = true + input[0] = file(params.modules_testdata_base_path + '/generic/tsv/test.tsv', checkIfExists: true) """ } } @@ -108,18 +94,22 @@ nextflow_function { then { assertAll( { assert function.success }, - { assert snapshot(function.result).match() } + { assert function.result.contains("test.tsv") } ) } } - test("Test Function with logColours") { - function "logColours" + test("Test Function getSingleReport with multiple files") { + function "getSingleReport" when { function { """ - input[0] = false + input[0] = [ + file(params.modules_testdata_base_path + '/generic/tsv/test.tsv', checkIfExists: true), + file(params.modules_testdata_base_path + '/generic/tsv/network.tsv', checkIfExists: true), + file(params.modules_testdata_base_path + '/generic/tsv/expression.tsv', checkIfExists: true) + ] """ } } @@ -127,7 +117,9 @@ nextflow_function { then { assertAll( { assert function.success }, - { assert snapshot(function.result).match() } + { assert function.result.contains("test.tsv") }, + { assert !function.result.contains("network.tsv") }, + { assert !function.result.contains("expression.tsv") } ) } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap index 1037232c..02c67014 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap @@ -17,26 +17,6 @@ }, "timestamp": "2024-02-28T12:02:59.729647" }, - "Test Function nfCoreLogo": { - "content": [ - "\n\n-\u001b[2m----------------------------------------------------\u001b[0m-\n \u001b[0;32m,--.\u001b[0;30m/\u001b[0;32m,-.\u001b[0m\n\u001b[0;34m ___ __ __ __ ___ \u001b[0;32m/,-._.--~'\u001b[0m\n\u001b[0;34m |\\ | |__ __ / ` / \\ |__) |__ \u001b[0;33m} {\u001b[0m\n\u001b[0;34m | \\| | \\__, \\__/ | \\ |___ \u001b[0;32m\\`-._,-`-,\u001b[0m\n \u001b[0;32m`._,._,'\u001b[0m\n\u001b[0;35m nextflow_workflow v9.9.9\u001b[0m\n-\u001b[2m----------------------------------------------------\u001b[0m-\n" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:10.562934" - }, - "Test Function workflowCitation": { - "content": [ - "If you use nextflow_workflow for your analysis please cite:\n\n* The pipeline\n https://doi.org/10.5281/zenodo.5070524\n\n* The nf-core framework\n https://doi.org/10.1038/s41587-020-0439-x\n\n* Software dependencies\n https://github.com/nextflow_workflow/blob/master/CITATIONS.md" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:07.019761" - }, "Test Function without logColours": { "content": [ { @@ -95,16 +75,6 @@ }, "timestamp": "2024-02-28T12:03:17.969323" }, - "Test Function dashedLine": { - "content": [ - "-\u001b[2m----------------------------------------------------\u001b[0m-" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-28T12:03:14.366181" - }, "Test Function with logColours": { "content": [ { 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 842dc432..8fb30164 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test @@ -42,7 +42,7 @@ nextflow_workflow { params { test_data = '' - outdir = 1 + outdir = null } workflow { @@ -94,7 +94,7 @@ nextflow_workflow { params { test_data = '' - outdir = 1 + outdir = null } workflow { diff --git a/workflows/funcscan.nf b/workflows/funcscan.nf index 8a25159c..fafc69bf 100644 --- a/workflows/funcscan.nf +++ b/workflows/funcscan.nf @@ -39,7 +39,7 @@ workflow FUNCSCAN { softwareVersionsToYAML(ch_versions) .collectFile( storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_' + 'pipeline_software_' + 'mqc_' + 'versions.yml', + name: 'nf_core_' + 'funcscan_software_' + 'mqc_' + 'versions.yml', sort: true, newLine: true ).set { ch_collated_versions } From 35e71786466b19a18b0e1e0379840a10b14a018d Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Thu, 12 Dec 2024 13:55:57 +0100 Subject: [PATCH 033/175] update ampcombi2 2.0.1 --- modules.json | 6 +- .../nf-core/ampcombi2/cluster/environment.yml | 2 +- modules/nf-core/ampcombi2/cluster/main.nf | 4 +- .../ampcombi2/cluster/tests/main.nf.test | 65 --------- .../ampcombi2/cluster/tests/main.nf.test.snap | 18 +-- .../nf-core/ampcombi2/cluster/tests/tags.yml | 2 - .../ampcombi2/complete/environment.yml | 2 +- modules/nf-core/ampcombi2/complete/main.nf | 4 +- .../ampcombi2/complete/tests/main.nf.test | 56 -------- .../complete/tests/main.nf.test.snap | 24 ++-- .../nf-core/ampcombi2/complete/tests/tags.yml | 2 - .../ampcombi2/parsetables/environment.yml | 2 +- modules/nf-core/ampcombi2/parsetables/main.nf | 80 ++++++----- .../nf-core/ampcombi2/parsetables/meta.yml | 59 ++++---- .../ampcombi2/parsetables/tests/main.nf.test | 28 ++-- .../parsetables/tests/main.nf.test.snap | 127 ++++++++++++------ .../parsetables/tests/nextflow.config | 3 +- .../ampcombi2/parsetables/tests/tags.yml | 2 - 18 files changed, 216 insertions(+), 270 deletions(-) delete mode 100644 modules/nf-core/ampcombi2/cluster/tests/main.nf.test delete mode 100644 modules/nf-core/ampcombi2/cluster/tests/tags.yml delete mode 100644 modules/nf-core/ampcombi2/complete/tests/main.nf.test delete mode 100644 modules/nf-core/ampcombi2/complete/tests/tags.yml delete mode 100644 modules/nf-core/ampcombi2/parsetables/tests/tags.yml diff --git a/modules.json b/modules.json index ec386d66..3dd4848b 100644 --- a/modules.json +++ b/modules.json @@ -12,17 +12,17 @@ }, "ampcombi2/cluster": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "993865fe60cb1569155fbbbe0cee113e1127abaf", "installed_by": ["modules"] }, "ampcombi2/complete": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "993865fe60cb1569155fbbbe0cee113e1127abaf", "installed_by": ["modules"] }, "ampcombi2/parsetables": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "993865fe60cb1569155fbbbe0cee113e1127abaf", "installed_by": ["modules"] }, "ampir": { diff --git a/modules/nf-core/ampcombi2/cluster/environment.yml b/modules/nf-core/ampcombi2/cluster/environment.yml index 420c955b..f9c25b04 100644 --- a/modules/nf-core/ampcombi2/cluster/environment.yml +++ b/modules/nf-core/ampcombi2/cluster/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::ampcombi=0.2.2" + - "bioconda::ampcombi=2.0.1" diff --git a/modules/nf-core/ampcombi2/cluster/main.nf b/modules/nf-core/ampcombi2/cluster/main.nf index 90495dba..98a19a96 100644 --- a/modules/nf-core/ampcombi2/cluster/main.nf +++ b/modules/nf-core/ampcombi2/cluster/main.nf @@ -4,8 +4,8 @@ process AMPCOMBI2_CLUSTER { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ampcombi:0.2.2--pyhdfd78af_0': - 'biocontainers/ampcombi:0.2.2--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/ampcombi:2.0.1--pyhdfd78af_0': + 'biocontainers/ampcombi:2.0.1--pyhdfd78af_0' }" input: path(summary_file) diff --git a/modules/nf-core/ampcombi2/cluster/tests/main.nf.test b/modules/nf-core/ampcombi2/cluster/tests/main.nf.test deleted file mode 100644 index 49bee6cf..00000000 --- a/modules/nf-core/ampcombi2/cluster/tests/main.nf.test +++ /dev/null @@ -1,65 +0,0 @@ -nextflow_process { - - name "Test Process AMPCOMBI2_CLUSTER" - script "../main.nf" - process "AMPCOMBI2_CLUSTER" - - tag "modules" - tag "modules_nfcore" - tag "ampcombi2" - tag "ampcombi2/cluster" - tag "ampcombi2/complete" - - setup { - run("AMPCOMBI2_COMPLETE") { - script "../../../ampcombi2/complete/main.nf" - process { - """ - input[0] = - [ - file('https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/ampcombi/ampcombi2/sample_1_ampcombi.tsv', checkIfExists: true), - file('https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/ampcombi/ampcombi2/sample_2_ampcombi.tsv', checkIfExists: true) - ] - """ - } - } - } - - test("ampcombi2_cluster - metagenome") { - when { - process { - """ - input[0] = AMPCOMBI2_COMPLETE.out.tsv - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot( - file(process.out.cluster_tsv[0]).readLines()[0].contains("Linear/Cyclic/Branched"), - file(process.out.rep_cluster_tsv[0]).readLines()[0].contains("total_cluster_members"), - process.out.versions).match() } - ) - } - } - - test("ampcombi2_cluster - metagenome - stub") { - options "-stub" - when { - process { - """ - input[0] = AMPCOMBI2_COMPLETE.out.tsv - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } -} diff --git a/modules/nf-core/ampcombi2/cluster/tests/main.nf.test.snap b/modules/nf-core/ampcombi2/cluster/tests/main.nf.test.snap index f4123c76..fd79a83b 100644 --- a/modules/nf-core/ampcombi2/cluster/tests/main.nf.test.snap +++ b/modules/nf-core/ampcombi2/cluster/tests/main.nf.test.snap @@ -4,14 +4,14 @@ true, true, [ - "versions.yml:md5,4e9aa3812bfee6ec22a1b6ccb62de2ca" + "versions.yml:md5,b629089d44775078dce5e664a455422b" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-04-24T12:11:40.928513749" + "timestamp": "2024-12-03T07:57:01.869983435" }, "ampcombi2_cluster - metagenome - stub": { "content": [ @@ -26,7 +26,7 @@ "Ampcombi_cluster.log:md5,d41d8cd98f00b204e9800998ecf8427e" ], "3": [ - "versions.yml:md5,4e9aa3812bfee6ec22a1b6ccb62de2ca" + "versions.yml:md5,b629089d44775078dce5e664a455422b" ], "cluster_tsv": [ "Ampcombi_summary_cluster.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" @@ -38,14 +38,14 @@ "Ampcombi_summary_cluster_representative_seq.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ], "versions": [ - "versions.yml:md5,4e9aa3812bfee6ec22a1b6ccb62de2ca" + "versions.yml:md5,b629089d44775078dce5e664a455422b" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-04-24T12:12:08.780718892" + "timestamp": "2024-12-03T07:57:23.939137628" } } \ No newline at end of file diff --git a/modules/nf-core/ampcombi2/cluster/tests/tags.yml b/modules/nf-core/ampcombi2/cluster/tests/tags.yml deleted file mode 100644 index 783f4d52..00000000 --- a/modules/nf-core/ampcombi2/cluster/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -ampcombi2/cluster: - - "modules/nf-core/ampcombi2/cluster/**" diff --git a/modules/nf-core/ampcombi2/complete/environment.yml b/modules/nf-core/ampcombi2/complete/environment.yml index 420c955b..f9c25b04 100644 --- a/modules/nf-core/ampcombi2/complete/environment.yml +++ b/modules/nf-core/ampcombi2/complete/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::ampcombi=0.2.2" + - "bioconda::ampcombi=2.0.1" diff --git a/modules/nf-core/ampcombi2/complete/main.nf b/modules/nf-core/ampcombi2/complete/main.nf index 0e4d5d53..98f62347 100644 --- a/modules/nf-core/ampcombi2/complete/main.nf +++ b/modules/nf-core/ampcombi2/complete/main.nf @@ -4,8 +4,8 @@ process AMPCOMBI2_COMPLETE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ampcombi:0.2.2--pyhdfd78af_0': - 'biocontainers/ampcombi:0.2.2--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/ampcombi:2.0.1--pyhdfd78af_0': + 'biocontainers/ampcombi:2.0.1--pyhdfd78af_0' }" input: path(summaries) diff --git a/modules/nf-core/ampcombi2/complete/tests/main.nf.test b/modules/nf-core/ampcombi2/complete/tests/main.nf.test deleted file mode 100644 index 176d975f..00000000 --- a/modules/nf-core/ampcombi2/complete/tests/main.nf.test +++ /dev/null @@ -1,56 +0,0 @@ -nextflow_process { - - name "Test Process AMPCOMBI2_COMPLETE" - script "../main.nf" - process "AMPCOMBI2_COMPLETE" - - tag "modules" - tag "modules_nfcore" - tag "ampcombi2" - tag "ampcombi2/complete" - - test("ampcombi2_complete - contigs") { - when { - process { - """ - input[0] = - [ - file('https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/ampcombi/ampcombi2/sample_1_ampcombi.tsv', checkIfExists: true), - file('https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/ampcombi/ampcombi2/sample_2_ampcombi.tsv', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot( - file(process.out.tsv[0]).readLines()[0].contains("ampir"), - process.out.versions).match() } - ) - } - } - - test("ampcombi2_complete - contigs - stub") { - options "-stub" - when { - process { - """ - input[0] = - [ - file('https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/ampcombi/ampcombi2/sample_1_ampcombi.tsv', checkIfExists: true), - file('https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/ampcombi/ampcombi2/sample_2_ampcombi.tsv', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } -} diff --git a/modules/nf-core/ampcombi2/complete/tests/main.nf.test.snap b/modules/nf-core/ampcombi2/complete/tests/main.nf.test.snap index cd8fa18f..87435e5b 100644 --- a/modules/nf-core/ampcombi2/complete/tests/main.nf.test.snap +++ b/modules/nf-core/ampcombi2/complete/tests/main.nf.test.snap @@ -6,39 +6,39 @@ "Ampcombi_summary.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ], "1": [ - + ], "2": [ - "versions.yml:md5,0aa35e86761a6c160482b8b8dbfc5440" + "versions.yml:md5,bfba0046e0cfa7b0b6d79663823f94c0" ], "log": [ - + ], "tsv": [ "Ampcombi_summary.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ], "versions": [ - "versions.yml:md5,0aa35e86761a6c160482b8b8dbfc5440" + "versions.yml:md5,bfba0046e0cfa7b0b6d79663823f94c0" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-04-29T11:55:16.030399422" + "timestamp": "2024-12-03T07:57:53.385349848" }, "ampcombi2_complete - contigs": { "content": [ true, [ - "versions.yml:md5,0aa35e86761a6c160482b8b8dbfc5440" + "versions.yml:md5,bfba0046e0cfa7b0b6d79663823f94c0" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-04-29T11:54:54.334224301" + "timestamp": "2024-12-03T07:57:40.263912946" } -} \ No newline at end of file +} diff --git a/modules/nf-core/ampcombi2/complete/tests/tags.yml b/modules/nf-core/ampcombi2/complete/tests/tags.yml deleted file mode 100644 index f8ac5fee..00000000 --- a/modules/nf-core/ampcombi2/complete/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -ampcombi2/complete: - - "modules/nf-core/ampcombi2/complete/**" diff --git a/modules/nf-core/ampcombi2/parsetables/environment.yml b/modules/nf-core/ampcombi2/parsetables/environment.yml index 420c955b..f9c25b04 100644 --- a/modules/nf-core/ampcombi2/parsetables/environment.yml +++ b/modules/nf-core/ampcombi2/parsetables/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::ampcombi=0.2.2" + - "bioconda::ampcombi=2.0.1" diff --git a/modules/nf-core/ampcombi2/parsetables/main.nf b/modules/nf-core/ampcombi2/parsetables/main.nf index d779440b..b9d855df 100644 --- a/modules/nf-core/ampcombi2/parsetables/main.nf +++ b/modules/nf-core/ampcombi2/parsetables/main.nf @@ -1,31 +1,33 @@ process AMPCOMBI2_PARSETABLES { - tag "$meta.id" + tag "${meta.id}" label 'process_medium' conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ampcombi:0.2.2--pyhdfd78af_0': - 'biocontainers/ampcombi:0.2.2--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/ampcombi:2.0.1--pyhdfd78af_0': + 'biocontainers/ampcombi:2.0.1--pyhdfd78af_0' }" input: tuple val(meta), path(amp_input) - path(faa_input) - path(gbk_input) - path(opt_amp_db) + path faa_input + path gbk_input + val opt_amp_db + path opt_amp_db_dir + path opt_interproscan output: - tuple val(meta), path("${meta.id}/") , emit: sample_dir - tuple val(meta), path("${meta.id}/contig_gbks/") , emit: contig_gbks - tuple val(meta), path("${meta.id}/${meta.id}_diamond_matches.txt"), emit: txt - tuple val(meta), path("${meta.id}/${meta.id}_ampcombi.tsv") , emit: tsv - tuple val(meta), path("${meta.id}/${meta.id}_amp.faa") , emit: faa - tuple val(meta), path("${meta.id}/${meta.id}_ampcombi.log") , emit: sample_log, optional:true - tuple val(meta), path("Ampcombi_parse_tables.log") , emit: full_log, optional:true - tuple val(meta), path("amp_ref_database/") , emit: results_db, optional:true - tuple val(meta), path("amp_ref_database/*.dmnd") , emit: results_db_dmnd, optional:true - tuple val(meta), path("amp_ref_database/*.clean.fasta") , emit: results_db_fasta, optional:true - tuple val(meta), path("amp_ref_database/*.tsv") , emit: results_db_tsv, optional:true - path "versions.yml" , emit: versions + tuple val(meta), path("${meta.id}/") , emit: sample_dir + tuple val(meta), path("${meta.id}/contig_gbks/") , emit: contig_gbks + tuple val(meta), path("${meta.id}/${meta.id}_mmseqs_matches.tsv") , emit: db_tsv + tuple val(meta), path("${meta.id}/${meta.id}_ampcombi.tsv") , emit: tsv + tuple val(meta), path("${meta.id}/${meta.id}_amp.faa") , emit: faa + tuple val(meta), path("${meta.id}/${meta.id}_ampcombi.log") , emit: sample_log , optional:true + tuple val(meta), path("Ampcombi_parse_tables.log") , emit: full_log , optional:true + tuple val(meta), path("amp_${opt_amp_db}_database/") , emit: db , optional:true + tuple val(meta), path("amp_${opt_amp_db}_database/*.txt") , emit: db_txt , optional:true + tuple val(meta), path("amp_${opt_amp_db}_database/*.fasta") , emit: db_fasta , optional:true + tuple val(meta), path("amp_${opt_amp_db}_database/mmseqs2/") , emit: db_mmseqs , optional:true + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -33,16 +35,20 @@ process AMPCOMBI2_PARSETABLES { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def db = opt_amp_db? "--amp_database $opt_amp_db": "" + def db_dir = opt_amp_db_dir ? "--amp_database_dir ${opt_amp_db_dir}" : "" + def interpro = opt_interproscan ? "--interproscan_output ${opt_interproscan}" : "" + """ ampcombi parse_tables \\ - --path_list '${amp_input.collect{"$it"}.join("' '")}' \\ - --faa ${faa_input} \\ - --gbk ${gbk_input} \\ - --sample_list ${prefix} \\ - ${db} \\ - $args \\ - --threads ${task.cpus} + --path_list '${amp_input.collect { "${it}" }.join("' '")}' \\ + --faa ${faa_input} \\ + --gbk ${gbk_input} \\ + --sample_list ${prefix} \\ + --amp_database ${opt_amp_db} \\ + ${db_dir} \\ + ${interpro} \\ + ${args} \\ + --threads ${task.cpus} cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -53,20 +59,30 @@ process AMPCOMBI2_PARSETABLES { stub: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def db = opt_amp_db? "--amp_database $opt_amp_db": "" + def db_dir = opt_amp_db_dir ? "--amp_database_dir ${opt_amp_db_dir}" : "" + def interpro = opt_interproscan ? "--interproscan_output ${opt_interproscan}" : "" + """ mkdir -p ${prefix} mkdir -p ${prefix}/contig_gbks - touch ${prefix}/${meta.id}_diamond_matches.txt + touch ${prefix}/${meta.id}_mmseqs_matches.tsv touch ${prefix}/${meta.id}_ampcombi.tsv touch ${prefix}/${meta.id}_amp.faa touch ${prefix}/${meta.id}_ampcombi.log touch Ampcombi_parse_tables.log - mkdir -p amp_ref_database - touch amp_ref_database/*.dmnd - touch amp_ref_database/*.clean.fasta - touch amp_ref_database/*.tsv + mkdir -p amp_${opt_amp_db}_database + mkdir -p amp_${opt_amp_db}_database/mmseqs2 + touch amp_${opt_amp_db}_database/*.fasta + touch amp_${opt_amp_db}_database/*.txt + touch amp_${opt_amp_db}_database/mmseqs2/ref_DB + touch amp_${opt_amp_db}_database/mmseqs2/ref_DB.dbtype + touch amp_${opt_amp_db}_database/mmseqs2/ref_DB_h + touch amp_${opt_amp_db}_database/mmseqs2/ref_DB_h.dbtype + touch amp_${opt_amp_db}_database/mmseqs2/ref_DB_h.index + touch amp_${opt_amp_db}_database/mmseqs2/ref_DB.index + touch amp_${opt_amp_db}_database/mmseqs2/ref_DB.lookup + touch amp_${opt_amp_db}_database/mmseqs2/ref_DB.source cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/ampcombi2/parsetables/meta.yml b/modules/nf-core/ampcombi2/parsetables/meta.yml index 7159b117..14a0fd02 100644 --- a/modules/nf-core/ampcombi2/parsetables/meta.yml +++ b/modules/nf-core/ampcombi2/parsetables/meta.yml @@ -16,12 +16,14 @@ keywords: - ampgram - amptransformer - DRAMP + - MMseqs2 + - InterProScan tools: - ampcombi2/parsetables: description: "A parsing tool to convert and summarise the outputs from multiple AMP detection tools in a standardized format." homepage: "https://github.com/Darcy220606/AMPcombi" - documentation: "https://github.com/Darcy220606/AMPcombi" + documentation: "https://ampcombi.readthedocs.io/en/main/" tool_dev_url: "https://github.com/Darcy220606/AMPcombi/tree/dev" licence: ["MIT"] identifier: "" @@ -52,9 +54,17 @@ input: name. pattern: "*.gbk" - - opt_amp_db: + type: string + description: The name of the database to download and set up. This can either be 'DRAMP', 'APD' or 'UniRef100'. + pattern: "DRAMP|APD|UniRef100" + - - opt_amp_db_dir: type: directory description: The path to the folder containing the fasta and tsv database files. - pattern: "*/" + pattern: "path/to/amp_*_database" + - - opt_interproscan: + type: directory + description: A path to a file corresponding to the respective tsv files containing protein classifications of the annotated CDSs. The file must be the raw output from InterProScan. + pattern: "*.tsv" output: - sample_dir: - meta: @@ -78,17 +88,17 @@ output: description: The output subdirectory that contains the gbk files containing the AMP hits for each sample. pattern: "/*/contig_gbks" - - txt: + - db_tsv: - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - ${meta.id}/${meta.id}_diamond_matches.txt: + - ${meta.id}/${meta.id}_mmseqs_matches.tsv: type: file - description: An alignment file containing the results from the DIAMOND alignment + description: An alignment file containing the results from the MMseqs2 alignment step done on all AMP hits. - pattern: "/*/*_diamond_matches.txt" + pattern: "/*/*_mmseqs_matches.tsv" - tsv: - meta: type: map @@ -134,50 +144,51 @@ output: description: A log file that captures the standard output for the entire process in a log file. Can be activated by `--log`. pattern: "Ampcombi_parse_tables.log" - - results_db: + - db: - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - amp_ref_database/: + - amp_${opt_amp_db}_database/: type: directory - description: If the AMP reference database is not provided by the user using + description: If the AMP reference database ID is not provided by the user using the flag `--amp_database', by default the DRAMP database will be downloaded, filtered and stored in this folder. - pattern: "/amp_ref_database" - - results_db_dmnd: + pattern: "/amp_*_database" + - db_txt: - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - amp_ref_database/*.dmnd: + - amp_${opt_amp_db}_database/*.txt: type: file - description: AMP reference database converted to DIAMOND database format. - pattern: "/amp_ref_database/*.dmnd" - - results_db_fasta: + description: AMP reference database in tsv-format with two columns containing + header and sequence. + pattern: "/amp_*_database/*.txt" + - db_fasta: - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - amp_ref_database/*.clean.fasta: + - amp_${opt_amp_db}_database/*.fasta: type: file - description: AMP reference database fasta file, cleaned of diamond-uncompatible + description: AMP reference database fasta file in clean format. characters. - pattern: "/amp_ref_database/*.clean.fasta" - - results_db_tsv: + pattern: "/amp_*_database/*.fasta" + - db_mmseqs: - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - amp_ref_database/*.tsv: - type: file - description: AMP reference database in tsv-format with two columns containing - header and sequence. - pattern: "/amp_ref_database/*.tsv" + - amp_${opt_amp_db}_database/mmseqs2/: + type: directory + description: As alignment to the reference database is carried out by MMseqs2, this directory + contains all the files generated by MMseqs2 on the fasta file of the database. + pattern: "/amp_*_database/mmseqs2" - versions: - versions.yml: type: file diff --git a/modules/nf-core/ampcombi2/parsetables/tests/main.nf.test b/modules/nf-core/ampcombi2/parsetables/tests/main.nf.test index 2d775179..272d31e6 100644 --- a/modules/nf-core/ampcombi2/parsetables/tests/main.nf.test +++ b/modules/nf-core/ampcombi2/parsetables/tests/main.nf.test @@ -28,7 +28,9 @@ nextflow_process { input[0] = amp_input input[1] = faa_input input[2] = gbk_input - input[3] = [] + input[3] = 'DRAMP' + input[4] = [] + input[5] = [] """ } } @@ -37,15 +39,17 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out.sample_dir.collect { file(it[1]).getName() } + - process.out.results_db.collect { file(it[1]).getName() } + - process.out.contig_gbks.collect { file(it[1]).getName() } + - process.out.full_log.collect { file(it[1]).readLines().contains("<--AMP_database>") } + - process.out.sample_log.collect { file(it[1]).readLines().contains("found ampir file") } + - process.out.txt.collect { file(it[1]).readLines()[0] } + - process.out.tsv.collect { file(it[1]).readLines()[0] } + - process.out.faa.collect { file(it[1]).readLines()[0] } + - process.out.summary_csv.collect { file(it[1]).readLines().contains("Structure_Description") } + - process.out.versions ).match() } + process.out.contig_gbks.collect { file(it[1]).getName() } + + process.out.db_tsv.collect { file(it[1]).readLines()[0] } + + process.out.tsv.collect { file(it[1]).readLines()[0] } + + process.out.faa.collect { file(it[1]).readLines()[0] } + + process.out.full_log.collect { file(it[1]).readLines().contains("File downloaded successfully") } + + process.out.sample_log.collect { file(it[1]).readLines().contains("found ampir file") } + + process.out.db.collect { file(it[1]).getName() } + + process.out.db_txt.collect { file(it[1]).readLines()[0] } + + process.out.db_fasta.collect { file(it[1]).readLines()[0] } + + process.out.db_mmseqs.collect { file(it[1]).getName() } + + process.out.versions ).match() } ) } } @@ -67,7 +71,9 @@ nextflow_process { input[0] = amp_input input[1] = faa_input input[2] = gbk_input - input[3] = [] + input[3] = 'DRAMP' + input[4] = [] + input[5] = [] """ } } diff --git a/modules/nf-core/ampcombi2/parsetables/tests/main.nf.test.snap b/modules/nf-core/ampcombi2/parsetables/tests/main.nf.test.snap index 54faf69f..47102283 100644 --- a/modules/nf-core/ampcombi2/parsetables/tests/main.nf.test.snap +++ b/modules/nf-core/ampcombi2/parsetables/tests/main.nf.test.snap @@ -3,21 +3,24 @@ "content": [ [ "sample_1", - "amp_ref_database", "contig_gbks", + null, + "sample_id\tCDS_id\tprob_ampir\tprob_amplify\taa_sequence\tmolecular_weight\thelix_fraction\tturn_fraction\tsheet_fraction\tisoelectric_point\thydrophobicity\ttransporter_protein\tcontig_id\tCDS_start\tCDS_end\tCDS_dir\tCDS_stop_codon_found", + ">BAONEE_00005", false, true, - "contig_id\ttarget_id\tpident\tevalue\tnident\tfull_qseq\tfull_sseq\tqseq\tsseq\tqcovhsp\tscovhsp", - "sample_id\tCDS_id\tprob_ampir\tprob_amplify\taa_sequence\ttarget_id\tpident\tevalue\tSequence\tFamily\tSource\tPDB_ID\tLinear/Cyclic/Branched\tOther_Modifications\tPubmed_ID\tReference\tmolecular_weight\thelix_fraction\tturn_fraction\tsheet_fraction\tisoelectric_point\thydrophobicity\ttransporter_protein\tcontig_id\tCDS_start\tCDS_end\tCDS_dir\tCDS_stop_codon_found", - ">BAONEE_00005", - "versions.yml:md5,f32ab4ba79e66feba755b78d7d7a1f36" + "amp_DRAMP_database", + "DRAMP_ID\tSequence\tSequence_Length\tName\tSwiss_Prot_Entry\tFamily\tGene\tSource\tActivity\tProtein_existence\tStructure\tStructure_Description\tPDB_ID\tComments\tTarget_Organism\tHemolytic_activity\tLinear/Cyclic/Branched\tN-terminal_Modification\tC-terminal_Modification\tOther_Modifications\tStereochemistry\tCytotoxicity\tBinding_Traget\tPubmed_ID\tReference\tAuthor\tTitle", + ">DRAMP00005", + "mmseqs2", + "versions.yml:md5,09f086e07825d96816d792d73eee90ca" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-04-24T12:05:11.848363584" + "timestamp": "2024-12-11T13:58:57.988191067" }, "ampcombi2_parsetables - metagenome - stub": { "content": [ @@ -34,7 +37,7 @@ "sample_1_amp.faa:md5,d41d8cd98f00b204e9800998ecf8427e", "sample_1_ampcombi.log:md5,d41d8cd98f00b204e9800998ecf8427e", "sample_1_ampcombi.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", - "sample_1_diamond_matches.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + "sample_1_mmseqs_matches.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ] ], @@ -53,18 +56,27 @@ { "id": "sample_1" }, - "*.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + [ + "ref_DB:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB.dbtype:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB.index:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB.lookup:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB.source:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB_h:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB_h.dbtype:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB_h.index:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ], "11": [ - "versions.yml:md5,f32ab4ba79e66feba755b78d7d7a1f36" + "versions.yml:md5,09f086e07825d96816d792d73eee90ca" ], "2": [ [ { "id": "sample_1" }, - "sample_1_diamond_matches.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + "sample_1_mmseqs_matches.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "3": [ @@ -105,9 +117,18 @@ "id": "sample_1" }, [ - "*.clean.fasta:md5,d41d8cd98f00b204e9800998ecf8427e", - "*.dmnd:md5,d41d8cd98f00b204e9800998ecf8427e", - "*.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "*.fasta:md5,d41d8cd98f00b204e9800998ecf8427e", + "*.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "ref_DB:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB.dbtype:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB.index:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB.lookup:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB.source:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB_h:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB_h.dbtype:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB_h.index:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] ] ], @@ -116,7 +137,7 @@ { "id": "sample_1" }, - "*.dmnd:md5,d41d8cd98f00b204e9800998ecf8427e" + "*.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "9": [ @@ -124,7 +145,7 @@ { "id": "sample_1" }, - "*.clean.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + "*.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "contig_gbks": [ @@ -137,56 +158,82 @@ ] ] ], - "faa": [ + "db": [ [ { "id": "sample_1" }, - "sample_1_amp.faa:md5,d41d8cd98f00b204e9800998ecf8427e" + [ + "*.fasta:md5,d41d8cd98f00b204e9800998ecf8427e", + "*.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "ref_DB:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB.dbtype:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB.index:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB.lookup:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB.source:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB_h:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB_h.dbtype:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB_h.index:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] ] ], - "full_log": [ + "db_fasta": [ [ { "id": "sample_1" }, - "Ampcombi_parse_tables.log:md5,d41d8cd98f00b204e9800998ecf8427e" + "*.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "results_db": [ + "db_mmseqs": [ [ { "id": "sample_1" }, [ - "*.clean.fasta:md5,d41d8cd98f00b204e9800998ecf8427e", - "*.dmnd:md5,d41d8cd98f00b204e9800998ecf8427e", - "*.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "ref_DB:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB.dbtype:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB.index:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB.lookup:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB.source:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB_h:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB_h.dbtype:md5,d41d8cd98f00b204e9800998ecf8427e", + "ref_DB_h.index:md5,d41d8cd98f00b204e9800998ecf8427e" ] ] ], - "results_db_dmnd": [ + "db_tsv": [ + [ + { + "id": "sample_1" + }, + "sample_1_mmseqs_matches.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "db_txt": [ [ { "id": "sample_1" }, - "*.dmnd:md5,d41d8cd98f00b204e9800998ecf8427e" + "*.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "results_db_fasta": [ + "faa": [ [ { "id": "sample_1" }, - "*.clean.fasta:md5,d41d8cd98f00b204e9800998ecf8427e" + "sample_1_amp.faa:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "results_db_tsv": [ + "full_log": [ [ { "id": "sample_1" }, - "*.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + "Ampcombi_parse_tables.log:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "sample_dir": [ @@ -201,7 +248,7 @@ "sample_1_amp.faa:md5,d41d8cd98f00b204e9800998ecf8427e", "sample_1_ampcombi.log:md5,d41d8cd98f00b204e9800998ecf8427e", "sample_1_ampcombi.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", - "sample_1_diamond_matches.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + "sample_1_mmseqs_matches.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ] ], @@ -221,23 +268,15 @@ "sample_1_ampcombi.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "txt": [ - [ - { - "id": "sample_1" - }, - "sample_1_diamond_matches.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], "versions": [ - "versions.yml:md5,f32ab4ba79e66feba755b78d7d7a1f36" + "versions.yml:md5,09f086e07825d96816d792d73eee90ca" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-04-24T12:05:34.675308615" + "timestamp": "2024-12-05T13:03:22.741430379" } } \ No newline at end of file diff --git a/modules/nf-core/ampcombi2/parsetables/tests/nextflow.config b/modules/nf-core/ampcombi2/parsetables/tests/nextflow.config index d39b0509..75396b7d 100644 --- a/modules/nf-core/ampcombi2/parsetables/tests/nextflow.config +++ b/modules/nf-core/ampcombi2/parsetables/tests/nextflow.config @@ -12,7 +12,8 @@ process { "--hmmsearch_file 'candidates.txt'", "--ampgram_file '.tsv'", "--amptransformer_file '.txt'", - "--log true" + "--log true", + "--interproscan_filter 'nonsense'" ].join(' ') ext.prefix = "sample_1" diff --git a/modules/nf-core/ampcombi2/parsetables/tests/tags.yml b/modules/nf-core/ampcombi2/parsetables/tests/tags.yml deleted file mode 100644 index b56b0468..00000000 --- a/modules/nf-core/ampcombi2/parsetables/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -ampcombi2/parsetables: - - "modules/nf-core/ampcombi2/parsetables/**" From be89885fe80a5a2f80be0901e6c83ba836b12c40 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Mon, 16 Dec 2024 14:32:09 +0100 Subject: [PATCH 034/175] fix the ampcombi inputs --- subworkflows/local/amp.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/amp.nf b/subworkflows/local/amp.nf index f04d1843..293692a1 100644 --- a/subworkflows/local/amp.nf +++ b/subworkflows/local/amp.nf @@ -111,13 +111,13 @@ workflow AMP { } if ( params.amp_ampcombi_db != null ) { - ch_ampcombi_input_db = Channel.of( file(params.amp_ampcombi_db) ) + AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db_id, params.amp_ampcombi_db, [] ) } else { AMP_DATABASE_DOWNLOAD( params.amp_ampcombi_db_id ) ch_versions = ch_versions.mix( AMP_DATABASE_DOWNLOAD.out.versions ) ch_ampcombi_input_db = AMP_DATABASE_DOWNLOAD.out.db + AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db_id, ch_ampcombi_input_db, [] ) } - AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db_id, ch_ampcombi_input_db ) ch_versions = ch_versions.mix( AMPCOMBI2_PARSETABLES.out.versions ) ch_ampcombi_summaries = AMPCOMBI2_PARSETABLES.out.tsv.map{ it[1] }.collect() From 8e1da95b93bb84022d9b721bbcb30d785e296c6e Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Mon, 16 Dec 2024 16:31:35 +0100 Subject: [PATCH 035/175] fix error strategy --- conf/base.config | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/base.config b/conf/base.config index b16699af..3133bc74 100644 --- a/conf/base.config +++ b/conf/base.config @@ -222,6 +222,8 @@ process { withName: AMPCOMBI2_PARSETABLES { memory = { 8.GB * task.attempt } time = { 2.h * task.attempt } + errorStrategy = { task.exitStatus == 1 ? 'retry' : 'finish' } + maxRetries = 2 // Retry the process up to 2 times } withName: AMPCOMBI2_CLUSTER { From 75f1bc9fb137590ab51a489f02f40fa4b9afa5b1 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 18 Dec 2024 10:29:38 +0100 Subject: [PATCH 036/175] Add AMPcombi to 2.0.1 --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e889026..4786db8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,10 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` +- [#421](https://github.com/nf-core/funcscan/pull/421) Updated to nf-core template 3.0.2 (by @jfy133) + ### `Fixed` ### `Dependencies` +| Tool | Previous version | New version | +| -------- | ---------------- | ----------- | +| AMPcombi | 0.2.2 | 2.0.1 | +| Macrel | 1.2.0 | 1.4.0 | +| MultiQC | 1.24.0 | 1.25.1 | + ### `Deprecated` ## v2.0.0 - [2024-09-05] From 137f4dd5e08df8e94d45995d6092effdb9708a8a Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 18 Dec 2024 10:29:47 +0100 Subject: [PATCH 037/175] Add darkmode diagram --- docs/images/funcscan_metro_workflow_dark.png | Bin 0 -> 503305 bytes docs/images/funcscan_metro_workflow_dark.svg | 3223 ++++++++++++++++++ 2 files changed, 3223 insertions(+) create mode 100644 docs/images/funcscan_metro_workflow_dark.png create mode 100644 docs/images/funcscan_metro_workflow_dark.svg diff --git a/docs/images/funcscan_metro_workflow_dark.png b/docs/images/funcscan_metro_workflow_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7656d59599ab391a6234f2099a8d5449e573a5ee GIT binary patch literal 503305 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

oljCnLIP@eT17iA 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

4qpz4wobYinyOW3eq< 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 byOzlrt)$}XCrzyU73W2)9e-e0d0+fL3F$v^ literal 0 HcmV?d00001 diff --git a/docs/images/funcscan_metro_workflow_dark.svg b/docs/images/funcscan_metro_workflow_dark.svg new file mode 100644 index 00000000..bb30861e --- /dev/null +++ b/docs/images/funcscan_metro_workflow_dark.svg @@ -0,0 +1,3223 @@ + + + +vcfvcftsvhAMRonizationABRicateAMRFinderPlusDeepARGfARGeneRGIgunzipMMseqs2SeqKitProkkaProdigalPyrodigalBaktaAMPcombicomBGCSummaryantiSMASHGECCODeepBGChmmsearchhmmsearchampirAMPlifyMacrelfuncscanv2.0vcfvcffastavcfvcfgbkvcfvcffaa()vcfvcftsvargNormLEGENDAntimicrobial Peptide Genes (AMPs)Biosynthetic Gene Clusters (BGCs)Antibiotic Resistance Genes (ARGs)Taxonomic ClassificationScreening ToolsPreprocessing ToolsPostprocessing ToolsOptional Input() From 74b73e91e2bd09588613f98e0a56e3c12b45c06a Mon Sep 17 00:00:00 2001 From: jasmezz Date: Wed, 18 Dec 2024 11:25:09 +0100 Subject: [PATCH 038/175] Add contributor information --- nextflow.config | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/nextflow.config b/nextflow.config index 0691259a..31df8edd 100644 --- a/nextflow.config +++ b/nextflow.config @@ -231,43 +231,43 @@ manifest { // TODO nf-core: Update the field with the details of the contributors to your pipeline. New with Nextflow version 24.10.0 [ name: 'Jasmin Frangenberg', - affiliation: '', - email: '', - github: '', - contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') - orcid: '' + affiliation: 'Leibniz Institute for Natural Product Research and Infection Biology Hans Knöll Institute, Jena, Germany', + email: 'jasmin.frangenberg@leibniz-hki.de', + github: 'jasmezz', + contribution: [author, maintainer], // List of contribution types ('author', 'maintainer' or 'contributor') + orcid: '0009-0004-5961-4709' ], [ name: ' Anan Ibrahim', - affiliation: '', - email: '', - github: '', - contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') - orcid: '' + affiliation: 'Leibniz Institute for Natural Product Research and Infection Biology Hans Knöll Institute, Jena, Germany', + email: 'anan.ibrahim@leibniz-hki.de', + github: 'darcy220606', + contribution: [author, maintainer], // List of contribution types ('author', 'maintainer' or 'contributor') + orcid: '0000-0003-3719-901X' ], [ name: ' Louisa Perelo', - affiliation: '', - email: '', - github: '', - contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') - orcid: '' + affiliation: 'Quantitative Biology Center (QBiC), University of Tübingen, Tübingen, Germany', + email: 'louisa.perelo@qbic.uni-tuebingen.de', + github: 'louperelo', + contribution: [author, contributor], // List of contribution types ('author', 'maintainer' or 'contributor') + orcid: '0000-0002-7307-062X' ], [ name: ' Moritz E. Beber', affiliation: '', email: '', - github: '', - contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') - orcid: '' + github: 'Midnighter', + contribution: [author, contributor], // List of contribution types ('author', 'maintainer' or 'contributor') + orcid: '0000-0003-2406-1978' ], [ name: ' James A. Fellows Yates', - affiliation: '', - email: '', - github: '', - contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor') - orcid: '' + affiliation: 'Leibniz Institute for Natural Product Research and Infection Biology Hans Knöll Institute, Jena, Germany; Max Planck Institute for Evolutionary Anthropology, Leipzig, Germany', + email: 'james_fellows_yates@eva.mpg.de', + github: 'jfy133', + contribution: [author, maintainer], // List of contribution types ('author', 'maintainer' or 'contributor') + orcid: '0000-0001-5585-6277' ], ] homePage = 'https://github.com/nf-core/funcscan' From 9e891d47197d3118bd03407fe2aac9139318872e Mon Sep 17 00:00:00 2001 From: jasmezz Date: Wed, 18 Dec 2024 11:47:42 +0100 Subject: [PATCH 039/175] Update rgi/main --- CHANGELOG.md | 1 + modules.json | 2 +- modules/nf-core/rgi/main/main.nf | 2 +- modules/nf-core/rgi/main/tests/main.nf.test.snap | 16 ++++++++-------- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1fd07b7..4a8455c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Fixed` - [#427](https://github.com/nf-core/funcscan/pull/427) Fixed the AMP reference database issues reported by users, due to non-ASCII characters. (by @darcy220606) +- [#430](https://github.com/nf-core/funcscan/pull/430) Updated `rgi/main` module to fix incorrect variable name. (by @amizeranschi and @jasmezz) ### `Dependencies` diff --git a/modules.json b/modules.json index 3dd4848b..24ac4605 100644 --- a/modules.json +++ b/modules.json @@ -192,7 +192,7 @@ }, "rgi/main": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "41623bcb962bd02d1a45ad81c1853547ebd26f5f", "installed_by": ["modules"] }, "seqkit/seq": { diff --git a/modules/nf-core/rgi/main/main.nf b/modules/nf-core/rgi/main/main.nf index ba05358a..287875fa 100644 --- a/modules/nf-core/rgi/main/main.nf +++ b/modules/nf-core/rgi/main/main.nf @@ -25,7 +25,7 @@ process RGI_MAIN { script: def args = task.ext.args ?: '' // This customizes the command: rgi load - def args2 = task.ext.args ?: '' // This customizes the command: rgi main + def args2 = task.ext.args2 ?: '' // This customizes the command: rgi main def prefix = task.ext.prefix ?: "${meta.id}" def load_wildcard = "" diff --git a/modules/nf-core/rgi/main/tests/main.nf.test.snap b/modules/nf-core/rgi/main/tests/main.nf.test.snap index a8dc1d61..35b4f7cf 100644 --- a/modules/nf-core/rgi/main/tests/main.nf.test.snap +++ b/modules/nf-core/rgi/main/tests/main.nf.test.snap @@ -81,15 +81,15 @@ } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-02-19T22:51:36.047807514" + "timestamp": "2024-12-10T13:33:59.209306934" }, "rgi/main - haemophilus_influenzae - genome_fna_gz": { "content": [ [ - "versions.yml:md5,a9f89e3bebd538efa07bcbe9fe1ba37a" + "versions.yml:md5,306dec3569e66a74bff07184f2f801ec" ], [ [ @@ -131,13 +131,13 @@ "6.0.3" ], [ - "3.2.9" + "3.3.0" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-02-19T22:51:14.372178941" + "timestamp": "2024-12-10T13:33:40.479165988" } } \ No newline at end of file From daf6a96a89150184f489559976ba0050e2c7e9ab Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 18 Dec 2024 11:50:52 +0100 Subject: [PATCH 040/175] Update snapshots due to new macrel and ampcombi versions --- tests/test.nf.test.snap | 50 +++++++++++----------- tests/test_bakta.nf.test.snap | 26 +++++------ tests/test_preannotated.nf.test.snap | 28 ++++++------ tests/test_prokka.nf.test.snap | 22 +++++----- tests/test_taxonomy_bakta.nf.test.snap | 12 +++--- tests/test_taxonomy_pyrodigal.nf.test.snap | 16 +++---- 6 files changed, 77 insertions(+), 77 deletions(-) diff --git a/tests/test.nf.test.snap b/tests/test.nf.test.snap index b8784d4e..2d04c59a 100644 --- a/tests/test.nf.test.snap +++ b/tests/test.nf.test.snap @@ -46,71 +46,71 @@ }, "deeparg_tsv_ARG": { "content": [ - "sample_1.align.daa.tsv:md5,21822364379fe8f991d27cdb52a33d1d", - "sample_2.align.daa.tsv:md5,f448465df58785a87cdee53691a77bfe", + "sample_1.align.daa.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "sample_2.align.daa.tsv:md5,4a86ca69defa4c861fabf236609afe8a", "sample_1.mapping.ARG:md5,0e049e99eab4c55666062df21707d5b9", "sample_2.mapping.ARG:md5,0e049e99eab4c55666062df21707d5b9" ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.10.2" }, - "timestamp": "2024-07-23T15:33:45.575881231" + "timestamp": "2024-12-18T10:44:09.612816944" }, "ampir": { "content": [ - true, - true, - true, - true + false, + false, + false, + false ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.10.2" }, - "timestamp": "2024-07-23T15:33:45.512274661" + "timestamp": "2024-12-18T10:44:09.45579383" }, "ampcombi_logfiles": { "content": [ "Ampcombi_cluster.log:md5,4c78f5f134edf566f39e04e3ab7d8558", "Ampcombi_complete.log:md5,3dabfea4303bf94bd4f5d78c5b8c83c1", - "Ampcombi_parse_tables.log:md5,cb5dc95f6b64edc2f0eb56bb541660d5" + "Ampcombi_parse_tables.log:md5,e19c120dff9168b33d8dbb8c2c426fc6" ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.10.2" }, - "timestamp": "2024-07-23T15:33:45.560675596" + "timestamp": "2024-12-18T10:44:09.571908465" }, "amplify": { "content": [ - true, - true + false, + false ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.10.2" }, - "timestamp": "2024-07-23T15:33:45.522977776" + "timestamp": "2024-12-18T10:44:09.517302168" }, "macrel": { "content": [ "sample_1.macrel.smorfs.faa.gz:md5,1b5e2434860e635e95324d1804a3be7b", "sample_2.macrel.smorfs.faa.gz:md5,38108b5cdfdc2196afe67418b9b04682", - "sample_1.macrel.all_orfs.faa.gz:md5,86f6b3b590d1b22d9c5aa164f8a14080", - "sample_2.macrel.all_orfs.faa.gz:md5,fdb384925af50ecade05dccaff68afd8", - "sample_1.macrel.prediction.gz:md5,0c4b16e0838be56e012b99169863a168", - "sample_2.macrel.prediction.gz:md5,440deffd6b6d9986ce098e44c66db9ae", - "README.md:md5,fa3706dfc95d0538a52c4d0d824be5fb", - "README.md:md5,fa3706dfc95d0538a52c4d0d824be5fb", + "sample_1.macrel.all_orfs.faa.gz:md5,844bb10e2f84e1a2b2db56eb36391dcf", + "sample_2.macrel.all_orfs.faa.gz:md5,9c0b8b1c3b03d7b20aee0b57103861ab", + "sample_1.macrel.prediction.gz:md5,9553e1dae8a5b912da8d74fa3f1cd9eb", + "sample_2.macrel.prediction.gz:md5,ae155e454eb7abd7c48c06aad9261603", + "README.md:md5,cf088d9256ff7b7730699f17b64b4028", + "README.md:md5,cf088d9256ff7b7730699f17b64b4028", "sample_1.macrel_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e", "sample_2.macrel_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.10.2" }, - "timestamp": "2024-07-23T15:33:45.525854315" + "timestamp": "2024-12-18T10:35:54.749106433" }, "amrfinderplus": { "content": [ diff --git a/tests/test_bakta.nf.test.snap b/tests/test_bakta.nf.test.snap index ff73f307..2a81f001 100644 --- a/tests/test_bakta.nf.test.snap +++ b/tests/test_bakta.nf.test.snap @@ -74,13 +74,13 @@ "content": [ "Ampcombi_cluster.log:md5,4c78f5f134edf566f39e04e3ab7d8558", "Ampcombi_complete.log:md5,3dabfea4303bf94bd4f5d78c5b8c83c1", - "Ampcombi_parse_tables.log:md5,cb5dc95f6b64edc2f0eb56bb541660d5" + "Ampcombi_parse_tables.log:md5,ff27d0c3657ce99d2c29a136f598e4f8" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.0", + "nextflow": "24.10.2" }, - "timestamp": "2024-07-23T16:51:37.230099612" + "timestamp": "2024-12-18T11:04:21.067236601" }, "amplify": { "content": [ @@ -97,20 +97,20 @@ "content": [ "sample_1.macrel.smorfs.faa.gz:md5,1b5e2434860e635e95324d1804a3be7b", "sample_2.macrel.smorfs.faa.gz:md5,38108b5cdfdc2196afe67418b9b04682", - "sample_1.macrel.all_orfs.faa.gz:md5,86f6b3b590d1b22d9c5aa164f8a14080", - "sample_2.macrel.all_orfs.faa.gz:md5,fdb384925af50ecade05dccaff68afd8", - "sample_1.macrel.prediction.gz:md5,0c4b16e0838be56e012b99169863a168", - "sample_2.macrel.prediction.gz:md5,440deffd6b6d9986ce098e44c66db9ae", - "README.md:md5,fa3706dfc95d0538a52c4d0d824be5fb", - "README.md:md5,fa3706dfc95d0538a52c4d0d824be5fb", + "sample_1.macrel.all_orfs.faa.gz:md5,844bb10e2f84e1a2b2db56eb36391dcf", + "sample_2.macrel.all_orfs.faa.gz:md5,9c0b8b1c3b03d7b20aee0b57103861ab", + "sample_1.macrel.prediction.gz:md5,9553e1dae8a5b912da8d74fa3f1cd9eb", + "sample_2.macrel.prediction.gz:md5,ae155e454eb7abd7c48c06aad9261603", + "README.md:md5,cf088d9256ff7b7730699f17b64b4028", + "README.md:md5,cf088d9256ff7b7730699f17b64b4028", "sample_1.macrel_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e", "sample_2.macrel_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.0", + "nextflow": "24.10.2" }, - "timestamp": "2024-07-23T16:51:37.208256804" + "timestamp": "2024-12-18T11:04:20.948791843" }, "amrfinderplus": { "content": [ diff --git a/tests/test_preannotated.nf.test.snap b/tests/test_preannotated.nf.test.snap index e53c7215..7f957b19 100644 --- a/tests/test_preannotated.nf.test.snap +++ b/tests/test_preannotated.nf.test.snap @@ -82,27 +82,27 @@ }, "macrel": { "content": [ - "sample_1.macrel.smorfs.faa.gz:md5,9cddad1e4b6dbcb76888f1a87db388ec", - "sample_2.macrel.smorfs.faa.gz:md5,e055dd2a9e44f3dcaa8af7198600349c", - "sample_3.macrel.smorfs.faa.gz:md5,9cddad1e4b6dbcb76888f1a87db388ec", - "sample_1.macrel.all_orfs.faa.gz:md5,c276fb1ec494ff53ded1e6fc118e25b9", - "sample_2.macrel.all_orfs.faa.gz:md5,e75e434a30922d80169d0666fd07e446", - "sample_3.macrel.all_orfs.faa.gz:md5,c276fb1ec494ff53ded1e6fc118e25b9", - "sample_1.macrel.prediction.gz:md5,0277725512f7d2954a99692bb65f1475", - "sample_2.macrel.prediction.gz:md5,06f7ce99cfe6f364d38743aae094402a", - "sample_3.macrel.prediction.gz:md5,0277725512f7d2954a99692bb65f1475", - "README.md:md5,fa3706dfc95d0538a52c4d0d824be5fb", - "README.md:md5,fa3706dfc95d0538a52c4d0d824be5fb", - "README.md:md5,fa3706dfc95d0538a52c4d0d824be5fb", + "sample_1.macrel.smorfs.faa.gz:md5,a4f853b560c6a8c215e0d243c24ec056", + "sample_2.macrel.smorfs.faa.gz:md5,83ae7b9808d7183d87b41c10253c9c9e", + "sample_3.macrel.smorfs.faa.gz:md5,a4f853b560c6a8c215e0d243c24ec056", + "sample_1.macrel.all_orfs.faa.gz:md5,d1ae1cadc3770994b2ed4982aadd5406", + "sample_2.macrel.all_orfs.faa.gz:md5,d9612a4275a912cabdae13b1ccc1857e", + "sample_3.macrel.all_orfs.faa.gz:md5,d1ae1cadc3770994b2ed4982aadd5406", + "sample_1.macrel.prediction.gz:md5,62146cf9f759c9c6c2c2f9e5ba816119", + "sample_2.macrel.prediction.gz:md5,1b479d31bb7dbf636a2028ddef72f5cc", + "sample_3.macrel.prediction.gz:md5,62146cf9f759c9c6c2c2f9e5ba816119", + "README.md:md5,cf088d9256ff7b7730699f17b64b4028", + "README.md:md5,cf088d9256ff7b7730699f17b64b4028", + "README.md:md5,cf088d9256ff7b7730699f17b64b4028", "sample_1.macrel_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e", "sample_2.macrel_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e", "sample_3.macrel_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.10.2" }, - "timestamp": "2024-07-27T08:11:24.514344973" + "timestamp": "2024-12-18T11:50:30.926088397" }, "hamronization": { "content": [ diff --git a/tests/test_prokka.nf.test.snap b/tests/test_prokka.nf.test.snap index 07cfeefd..1ac682b3 100644 --- a/tests/test_prokka.nf.test.snap +++ b/tests/test_prokka.nf.test.snap @@ -74,13 +74,13 @@ "content": [ "Ampcombi_cluster.log:md5,4c78f5f134edf566f39e04e3ab7d8558", "Ampcombi_complete.log:md5,3dabfea4303bf94bd4f5d78c5b8c83c1", - "Ampcombi_parse_tables.log:md5,1e2b5abad7d17e03428066f345b91117" + "Ampcombi_parse_tables.log:md5,a00a87b772b12c0d712f3e524cbe3bb2" ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.10.2" }, - "timestamp": "2024-07-24T12:53:09.914363724" + "timestamp": "2024-12-18T11:10:28.28666354" }, "amplify": { "content": [ @@ -97,20 +97,20 @@ "content": [ "sample_1.macrel.smorfs.faa.gz:md5,1b5e2434860e635e95324d1804a3be7b", "sample_2.macrel.smorfs.faa.gz:md5,38108b5cdfdc2196afe67418b9b04682", - "sample_1.macrel.all_orfs.faa.gz:md5,86f6b3b590d1b22d9c5aa164f8a14080", - "sample_2.macrel.all_orfs.faa.gz:md5,fdb384925af50ecade05dccaff68afd8", - "sample_1.macrel.prediction.gz:md5,0c4b16e0838be56e012b99169863a168", - "sample_2.macrel.prediction.gz:md5,440deffd6b6d9986ce098e44c66db9ae", - "README.md:md5,fa3706dfc95d0538a52c4d0d824be5fb", - "README.md:md5,fa3706dfc95d0538a52c4d0d824be5fb", + "sample_1.macrel.all_orfs.faa.gz:md5,844bb10e2f84e1a2b2db56eb36391dcf", + "sample_2.macrel.all_orfs.faa.gz:md5,9c0b8b1c3b03d7b20aee0b57103861ab", + "sample_1.macrel.prediction.gz:md5,9553e1dae8a5b912da8d74fa3f1cd9eb", + "sample_2.macrel.prediction.gz:md5,ae155e454eb7abd7c48c06aad9261603", + "README.md:md5,cf088d9256ff7b7730699f17b64b4028", + "README.md:md5,cf088d9256ff7b7730699f17b64b4028", "sample_1.macrel_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e", "sample_2.macrel_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.10.2" }, - "timestamp": "2024-07-24T12:53:09.892460736" + "timestamp": "2024-12-18T11:10:28.238554892" }, "amrfinderplus": { "content": [ diff --git a/tests/test_taxonomy_bakta.nf.test.snap b/tests/test_taxonomy_bakta.nf.test.snap index 5606db1e..c406c942 100644 --- a/tests/test_taxonomy_bakta.nf.test.snap +++ b/tests/test_taxonomy_bakta.nf.test.snap @@ -93,12 +93,12 @@ "content": [ "sample_1.macrel.smorfs.faa.gz:md5,1b5e2434860e635e95324d1804a3be7b", "sample_2.macrel.smorfs.faa.gz:md5,38108b5cdfdc2196afe67418b9b04682", - "sample_1.macrel.all_orfs.faa.gz:md5,86f6b3b590d1b22d9c5aa164f8a14080", - "sample_2.macrel.all_orfs.faa.gz:md5,fdb384925af50ecade05dccaff68afd8", - "sample_1.macrel.prediction.gz:md5,0c4b16e0838be56e012b99169863a168", - "sample_2.macrel.prediction.gz:md5,440deffd6b6d9986ce098e44c66db9ae", - "README.md:md5,fa3706dfc95d0538a52c4d0d824be5fb", - "README.md:md5,fa3706dfc95d0538a52c4d0d824be5fb", + "sample_1.macrel.all_orfs.faa.gz:md5,844bb10e2f84e1a2b2db56eb36391dcf", + "sample_2.macrel.all_orfs.faa.gz:md5,9c0b8b1c3b03d7b20aee0b57103861ab", + "sample_1.macrel.prediction.gz:md5,9553e1dae8a5b912da8d74fa3f1cd9eb", + "sample_2.macrel.prediction.gz:md5,ae155e454eb7abd7c48c06aad9261603", + "README.md:md5,cf088d9256ff7b7730699f17b64b4028", + "README.md:md5,cf088d9256ff7b7730699f17b64b4028", "sample_1.macrel_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e", "sample_2.macrel_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ], diff --git a/tests/test_taxonomy_pyrodigal.nf.test.snap b/tests/test_taxonomy_pyrodigal.nf.test.snap index 668aab92..9cde9d2a 100644 --- a/tests/test_taxonomy_pyrodigal.nf.test.snap +++ b/tests/test_taxonomy_pyrodigal.nf.test.snap @@ -93,19 +93,19 @@ "content": [ "sample_1.macrel.smorfs.faa.gz:md5,1b5e2434860e635e95324d1804a3be7b", "sample_2.macrel.smorfs.faa.gz:md5,38108b5cdfdc2196afe67418b9b04682", - "sample_1.macrel.all_orfs.faa.gz:md5,86f6b3b590d1b22d9c5aa164f8a14080", - "sample_2.macrel.all_orfs.faa.gz:md5,fdb384925af50ecade05dccaff68afd8", - "sample_1.macrel.prediction.gz:md5,0c4b16e0838be56e012b99169863a168", - "sample_2.macrel.prediction.gz:md5,440deffd6b6d9986ce098e44c66db9ae", - "README.md:md5,fa3706dfc95d0538a52c4d0d824be5fb", - "README.md:md5,fa3706dfc95d0538a52c4d0d824be5fb", + "sample_1.macrel.all_orfs.faa.gz:md5,844bb10e2f84e1a2b2db56eb36391dcf", + "sample_2.macrel.all_orfs.faa.gz:md5,9c0b8b1c3b03d7b20aee0b57103861ab", + "sample_1.macrel.prediction.gz:md5,9553e1dae8a5b912da8d74fa3f1cd9eb", + "sample_2.macrel.prediction.gz:md5,ae155e454eb7abd7c48c06aad9261603", + "README.md:md5,cf088d9256ff7b7730699f17b64b4028", + "README.md:md5,cf088d9256ff7b7730699f17b64b4028", "sample_1.macrel_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e", "sample_2.macrel_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.10.2" }, - "timestamp": "2024-07-24T16:24:30.025771" + "timestamp": "2024-12-18T11:35:52.952483937" } } \ No newline at end of file From 09a10185857e6d1e906dcf7659f46c7ecaa9cb8a Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 18 Dec 2024 12:14:02 +0100 Subject: [PATCH 041/175] Fix precommit and missing prokka snapshot --- CITATIONS.md | 2 +- tests/test_taxonomy_prokka.nf.test.snap | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CITATIONS.md b/CITATIONS.md index 426cd614..50655554 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -32,7 +32,7 @@ - [argNorm](https://doi.org/10.5204/rep.eprints.252448) - > Ugarcina Perovic, S., Ramji, V., Chong, H., Duan, Y., Maguire, F., Coelho, L. P. (2024). argNorm: Normalization of antibiotic resistance gene annotations to the Antibiotic Resistance Ontology (ARO). [Preprint] (Unpublished) [DOI: 10.5204/rep.eprints.252448](https://doi.org/10.5204/rep.eprints.252448) + > Ugarcina Perovic, S., Ramji, V., Chong, H., Duan, Y., Maguire, F., Coelho, L. P. (2024). argNorm: Normalization of antibiotic resistance gene annotations to the Antibiotic Resistance Ontology (ARO). [Preprint] (Unpublished) [DOI: 10.5204/rep.eprints.252448](https://doi.org/10.5204/rep.eprints.252448) - [Bakta](https://doi.org/10.1099/mgen.0.000685) diff --git a/tests/test_taxonomy_prokka.nf.test.snap b/tests/test_taxonomy_prokka.nf.test.snap index 8e2e581a..c00c3286 100644 --- a/tests/test_taxonomy_prokka.nf.test.snap +++ b/tests/test_taxonomy_prokka.nf.test.snap @@ -93,12 +93,12 @@ "content": [ "sample_1.macrel.smorfs.faa.gz:md5,1b5e2434860e635e95324d1804a3be7b", "sample_2.macrel.smorfs.faa.gz:md5,38108b5cdfdc2196afe67418b9b04682", - "sample_1.macrel.all_orfs.faa.gz:md5,86f6b3b590d1b22d9c5aa164f8a14080", - "sample_2.macrel.all_orfs.faa.gz:md5,fdb384925af50ecade05dccaff68afd8", - "sample_1.macrel.prediction.gz:md5,0c4b16e0838be56e012b99169863a168", - "sample_2.macrel.prediction.gz:md5,440deffd6b6d9986ce098e44c66db9ae", - "README.md:md5,fa3706dfc95d0538a52c4d0d824be5fb", - "README.md:md5,fa3706dfc95d0538a52c4d0d824be5fb", + "sample_1.macrel.all_orfs.faa.gz:md5,844bb10e2f84e1a2b2db56eb36391dcf", + "sample_2.macrel.all_orfs.faa.gz:md5,9c0b8b1c3b03d7b20aee0b57103861ab", + "sample_1.macrel.prediction.gz:md5,9553e1dae8a5b912da8d74fa3f1cd9eb", + "sample_2.macrel.prediction.gz:md5,ae155e454eb7abd7c48c06aad9261603", + "README.md:md5,cf088d9256ff7b7730699f17b64b4028", + "README.md:md5,cf088d9256ff7b7730699f17b64b4028", "sample_1.macrel_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e", "sample_2.macrel_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ], From 44c132c3c56540908ef6506eb638ebd2cdc1259b Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 18 Dec 2024 12:48:24 +0100 Subject: [PATCH 042/175] Fix ARG tool variability --- tests/test.nf.test | 3 +++ tests/test.nf.test.snap | 26 +++++++++++++------------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/tests/test.nf.test b/tests/test.nf.test index c3db6a93..28e088b5 100644 --- a/tests/test.nf.test +++ b/tests/test.nf.test @@ -54,6 +54,7 @@ nextflow_pipeline { // AMPcombi { assert path("$outputDir/reports/ampcombi2/Ampcombi_summary.tsv").text.contains("NODE_515831_length_303_cov_1.532258_1") }, + { assert path("$outputDir/reports/ampcombi2/Ampcombi_parse_tables.log").text.contains("amp_DRAMP_database is found and will be used") }, { assert snapshot( path("$outputDir/reports/ampcombi2/Ampcombi_cluster.log"), path("$outputDir/reports/ampcombi2/Ampcombi_complete.log"), @@ -71,6 +72,8 @@ nextflow_pipeline { { assert file("$outputDir/arg/deeparg/sample_2/sample_2.align.daa").name }, { assert path("$outputDir/arg/deeparg/sample_1/sample_1.mapping.potential.ARG").text.contains("#ARG") }, { assert path("$outputDir/arg/deeparg/sample_2/sample_2.mapping.potential.ARG").text.contains("#ARG") }, + { assert path("$outputDir/arg/deeparg/sample_1/sample_1.align.daa.tsv").text.contains("rifampin_monooxygenase|rifamycin|rifampin_monooxygenase") }, + { assert path("$outputDir/arg/deeparg/sample_2/sample_2.align.daa.tsv").text.contains("rifampin_monooxygenase|rifamycin|rifampin_monooxygenase") }, // ABRicate { assert snapshot( diff --git a/tests/test.nf.test.snap b/tests/test.nf.test.snap index 2d04c59a..c09747ac 100644 --- a/tests/test.nf.test.snap +++ b/tests/test.nf.test.snap @@ -46,8 +46,8 @@ }, "deeparg_tsv_ARG": { "content": [ - "sample_1.align.daa.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", - "sample_2.align.daa.tsv:md5,4a86ca69defa4c861fabf236609afe8a", + "sample_1.align.daa.tsv:md5,21822364379fe8f991d27cdb52a33d1d", + "sample_2.align.daa.tsv:md5,f448465df58785a87cdee53691a77bfe", "sample_1.mapping.ARG:md5,0e049e99eab4c55666062df21707d5b9", "sample_2.mapping.ARG:md5,0e049e99eab4c55666062df21707d5b9" ], @@ -55,43 +55,43 @@ "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-18T10:44:09.612816944" + "timestamp": "2024-12-18T12:41:33.325286058" }, "ampir": { "content": [ - false, - false, - false, - false + true, + true, + true, + true ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-18T10:44:09.45579383" + "timestamp": "2024-12-18T12:41:33.055416682" }, "ampcombi_logfiles": { "content": [ "Ampcombi_cluster.log:md5,4c78f5f134edf566f39e04e3ab7d8558", "Ampcombi_complete.log:md5,3dabfea4303bf94bd4f5d78c5b8c83c1", - "Ampcombi_parse_tables.log:md5,e19c120dff9168b33d8dbb8c2c426fc6" + "Ampcombi_parse_tables.log:md5,ff27d0c3657ce99d2c29a136f598e4f8" ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-18T10:44:09.571908465" + "timestamp": "2024-12-18T12:41:33.230701016" }, "amplify": { "content": [ - false, - false + true, + true ], "meta": { "nf-test": "0.9.0", "nextflow": "24.10.2" }, - "timestamp": "2024-12-18T10:44:09.517302168" + "timestamp": "2024-12-18T12:41:33.1312123" }, "macrel": { "content": [ From b4e74bbd54d60f29fd71d0e28dd8177a1dc19558 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 18 Dec 2024 13:51:00 +0100 Subject: [PATCH 043/175] Update docs/output.md --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 577f0ae8..0920236c 100644 --- a/docs/output.md +++ b/docs/output.md @@ -464,7 +464,7 @@ Note that filtered FASTA is only used for BGC workflow for run-time optimisation - `/*_ampcombi.log`: a log file generated by AMPcombi - `/*_ampcombi.tsv`: summarised output in tsv format for each sample - `/*_amp.faa*`: fasta file containing the amino acid sequences for all AMP hits for each sample - - `/*_mmseqs_matches.txt*`: alignment file generated by NMseqs2 for each sample + - `/*_mmseqs_matches.txt*`: alignment file generated by MMseqs2 for each sample

AMP summary table header descriptions using DRAMP as reference database | Table column | Description | From 867c9be17743540bf708512c55f778ebef56d2f5 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Thu, 19 Dec 2024 11:34:36 +0100 Subject: [PATCH 044/175] Fix tests --- nextflow.config | 13 ++++++++----- tests/test.nf.test | 2 +- tests/test_bakta.nf.test | 2 +- tests/test_bgc_bakta.nf.test | 2 +- tests/test_bgc_prokka.nf.test | 2 +- tests/test_bgc_pyrodigal.nf.test | 2 +- tests/test_full.nf.test | 2 +- tests/test_nothing.nf.test | 2 +- tests/test_preannotated.nf.test | 2 +- tests/test_preannotated_bgc.nf.test | 2 +- tests/test_prokka.nf.test | 2 +- tests/test_taxonomy_bakta.nf.test | 2 +- tests/test_taxonomy_prokka.nf.test | 2 +- tests/test_taxonomy_pyrodigal.nf.test | 2 +- 14 files changed, 21 insertions(+), 18 deletions(-) diff --git a/nextflow.config b/nextflow.config index d7f5e1d4..1622a6f7 100644 --- a/nextflow.config +++ b/nextflow.config @@ -468,7 +468,7 @@ manifest { affiliation: 'Leibniz Institute for Natural Product Research and Infection Biology Hans Knöll Institute, Jena, Germany', email: 'jasmin.frangenberg@leibniz-hki.de', github: 'jasmezz', - contribution: [author, maintainer], + contribution: ['author', 'maintainer'], orcid: '0009-0004-5961-4709', ], [ @@ -476,7 +476,7 @@ manifest { affiliation: 'Leibniz Institute for Natural Product Research and Infection Biology Hans Knöll Institute, Jena, Germany', email: 'anan.ibrahim@leibniz-hki.de', github: 'darcy220606', - contribution: [author, maintainer], + contribution: ['author', 'maintainer'], orcid: '0000-0003-3719-901X', ], [ @@ -484,7 +484,7 @@ manifest { affiliation: 'Quantitative Biology Center (QBiC), University of Tübingen, Tübingen, Germany', email: 'louisa.perelo@qbic.uni-tuebingen.de', github: 'louperelo', - contribution: [author, contributor], + contribution: ['author', 'contributor'], orcid: '0000-0002-7307-062X', ], [ @@ -492,7 +492,7 @@ manifest { affiliation: '', email: '', github: 'Midnighter', - contribution: [author, contributor], + contribution: ['author', 'contributor'], orcid: '0000-0003-2406-1978', ], [ @@ -500,7 +500,7 @@ manifest { affiliation: 'Leibniz Institute for Natural Product Research and Infection Biology Hans Knöll Institute, Jena, Germany; Max Planck Institute for Evolutionary Anthropology, Leipzig, Germany', email: 'james_fellows_yates@eva.mpg.de', github: 'jfy133', - contribution: [author, maintainer], + contribution: ['author', 'maintainer'], orcid: '0000-0001-5585-6277', ], ] @@ -549,3 +549,6 @@ validation { afterText = validation.help.afterText } } + +// Load modules.config for DSL2 module specific options +includeConfig 'conf/modules.config' diff --git a/tests/test.nf.test b/tests/test.nf.test index 28e088b5..6ffdd1a0 100644 --- a/tests/test.nf.test +++ b/tests/test.nf.test @@ -17,7 +17,7 @@ nextflow_pipeline { then { assertAll( { assert workflow.success }, - { assert new File("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml").exists() }, + { assert new File("$outputDir/pipeline_info/nf_core_funcscan_software_mqc_versions.yml").exists() }, { assert new File("$outputDir/multiqc/multiqc_report.html").exists() }, // AMPir diff --git a/tests/test_bakta.nf.test b/tests/test_bakta.nf.test index b1913b04..c040b2ab 100644 --- a/tests/test_bakta.nf.test +++ b/tests/test_bakta.nf.test @@ -17,7 +17,7 @@ nextflow_pipeline { then { assertAll( { assert workflow.success }, - { assert new File("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml").exists() }, + { assert new File("$outputDir/pipeline_info/nf_core_funcscan_software_mqc_versions.yml").exists() }, { assert new File("$outputDir/multiqc/multiqc_report.html").exists() }, // AMPir diff --git a/tests/test_bgc_bakta.nf.test b/tests/test_bgc_bakta.nf.test index 37a0a0b1..3debacd6 100644 --- a/tests/test_bgc_bakta.nf.test +++ b/tests/test_bgc_bakta.nf.test @@ -17,7 +17,7 @@ nextflow_pipeline { then { assertAll( { assert workflow.success }, - { assert new File("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml").exists() }, + { assert new File("$outputDir/pipeline_info/nf_core_funcscan_software_mqc_versions.yml").exists() }, { assert new File("$outputDir/multiqc/multiqc_report.html").exists() }, // antiSMASH diff --git a/tests/test_bgc_prokka.nf.test b/tests/test_bgc_prokka.nf.test index 0fe53cd5..f415a95b 100644 --- a/tests/test_bgc_prokka.nf.test +++ b/tests/test_bgc_prokka.nf.test @@ -17,7 +17,7 @@ nextflow_pipeline { then { assertAll( { assert workflow.success }, - { assert new File("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml").exists() }, + { assert new File("$outputDir/pipeline_info/nf_core_funcscan_software_mqc_versions.yml").exists() }, { assert new File("$outputDir/multiqc/multiqc_report.html").exists() }, // antiSMASH diff --git a/tests/test_bgc_pyrodigal.nf.test b/tests/test_bgc_pyrodigal.nf.test index cab97577..24ecaeb3 100644 --- a/tests/test_bgc_pyrodigal.nf.test +++ b/tests/test_bgc_pyrodigal.nf.test @@ -17,7 +17,7 @@ nextflow_pipeline { then { assertAll( { assert workflow.success }, - { assert new File("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml").exists() }, + { assert new File("$outputDir/pipeline_info/nf_core_funcscan_software_mqc_versions.yml").exists() }, { assert new File("$outputDir/multiqc/multiqc_report.html").exists() }, // antiSMASH diff --git a/tests/test_full.nf.test b/tests/test_full.nf.test index b5d53e6d..28b893de 100644 --- a/tests/test_full.nf.test +++ b/tests/test_full.nf.test @@ -17,7 +17,7 @@ nextflow_pipeline { then { assertAll( { assert workflow.success }, - { assert new File("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml").exists() }, + { assert new File("$outputDir/pipeline_info/nf_core_funcscan_software_mqc_versions.yml").exists() }, { assert new File("$outputDir/multiqc/multiqc_report.html").exists() }, // AMP workflow diff --git a/tests/test_nothing.nf.test b/tests/test_nothing.nf.test index a141d401..01a0ebc9 100644 --- a/tests/test_nothing.nf.test +++ b/tests/test_nothing.nf.test @@ -17,7 +17,7 @@ nextflow_pipeline { then { assertAll( { assert workflow.success }, - { assert new File("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml").exists() }, + { assert new File("$outputDir/pipeline_info/nf_core_funcscan_software_mqc_versions.yml").exists() }, { assert new File("$outputDir/multiqc/multiqc_report.html").exists() }, ) } diff --git a/tests/test_preannotated.nf.test b/tests/test_preannotated.nf.test index 32a86ac4..f13676b8 100644 --- a/tests/test_preannotated.nf.test +++ b/tests/test_preannotated.nf.test @@ -17,7 +17,7 @@ nextflow_pipeline { then { assertAll( { assert workflow.success }, - { assert new File("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml").exists() }, + { assert new File("$outputDir/pipeline_info/nf_core_funcscan_software_mqc_versions.yml").exists() }, { assert new File("$outputDir/multiqc/multiqc_report.html").exists() }, // AMPir diff --git a/tests/test_preannotated_bgc.nf.test b/tests/test_preannotated_bgc.nf.test index 0e9ca618..f6f291fb 100644 --- a/tests/test_preannotated_bgc.nf.test +++ b/tests/test_preannotated_bgc.nf.test @@ -17,7 +17,7 @@ nextflow_pipeline { then { assertAll( { assert workflow.success }, - { assert new File("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml").exists() }, + { assert new File("$outputDir/pipeline_info/nf_core_funcscan_software_mqc_versions.yml").exists() }, { assert new File("$outputDir/multiqc/multiqc_report.html").exists() }, // antiSMASH diff --git a/tests/test_prokka.nf.test b/tests/test_prokka.nf.test index 94e65ae2..d332362e 100644 --- a/tests/test_prokka.nf.test +++ b/tests/test_prokka.nf.test @@ -17,7 +17,7 @@ nextflow_pipeline { then { assertAll( { assert workflow.success }, - { assert new File("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml").exists() }, + { assert new File("$outputDir/pipeline_info/nf_core_funcscan_software_mqc_versions.yml").exists() }, { assert new File("$outputDir/multiqc/multiqc_report.html").exists() }, // AMPir diff --git a/tests/test_taxonomy_bakta.nf.test b/tests/test_taxonomy_bakta.nf.test index 5a412fa9..6498c4bd 100644 --- a/tests/test_taxonomy_bakta.nf.test +++ b/tests/test_taxonomy_bakta.nf.test @@ -18,7 +18,7 @@ nextflow_pipeline { then { assertAll( { assert workflow.success }, - { assert new File("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml").exists() }, + { assert new File("$outputDir/pipeline_info/nf_core_funcscan_software_mqc_versions.yml").exists() }, { assert new File("$outputDir/multiqc/multiqc_report.html").exists() }, // ampir diff --git a/tests/test_taxonomy_prokka.nf.test b/tests/test_taxonomy_prokka.nf.test index e0992dbf..0628508a 100644 --- a/tests/test_taxonomy_prokka.nf.test +++ b/tests/test_taxonomy_prokka.nf.test @@ -18,7 +18,7 @@ nextflow_pipeline { then { assertAll( { assert workflow.success }, - { assert new File("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml").exists() }, + { assert new File("$outputDir/pipeline_info/nf_core_funcscan_software_mqc_versions.yml").exists() }, { assert new File("$outputDir/multiqc/multiqc_report.html").exists() }, // ampir diff --git a/tests/test_taxonomy_pyrodigal.nf.test b/tests/test_taxonomy_pyrodigal.nf.test index 3cc5535e..8f325fc0 100644 --- a/tests/test_taxonomy_pyrodigal.nf.test +++ b/tests/test_taxonomy_pyrodigal.nf.test @@ -18,7 +18,7 @@ nextflow_pipeline { then { assertAll( { assert workflow.success }, - { assert new File("$outputDir/pipeline_info/nf_core_pipeline_software_mqc_versions.yml").exists() }, + { assert new File("$outputDir/pipeline_info/nf_core_funcscan_software_mqc_versions.yml").exists() }, { assert new File("$outputDir/multiqc/multiqc_report.html").exists() }, // ampir From 46b73e88ed02096a37da61dd11401bafb41c981f Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Thu, 19 Dec 2024 11:42:53 +0100 Subject: [PATCH 045/175] Update subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf --- subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf index d2093d01..b6ff2df8 100644 --- a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf @@ -99,7 +99,6 @@ workflow PIPELINE_COMPLETION { main: summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") def multiqc_reports = multiqc_report.toList() - // // Completion email and summary // From ecf6a64ca1d70282f0a83755789b80022d11cac3 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Thu, 19 Dec 2024 12:01:07 +0100 Subject: [PATCH 046/175] Update several modules --- modules.json | 14 +- .../amplify/predict/tests/main.nf.test | 6 +- .../amplify/predict/tests/main.nf.test.snap | 8 +- modules/nf-core/deepbgc/download/main.nf | 20 +- .../deepbgc/download/tests/main.nf.test | 23 +- .../deepbgc/download/tests/main.nf.test.snap | 101 ++++-- modules/nf-core/deepbgc/pipeline/main.nf | 39 ++- .../deepbgc/pipeline/tests/main.nf.test | 197 ++++++++--- .../deepbgc/pipeline/tests/main.nf.test.snap | 314 ++++++++++++++---- modules/nf-core/gunzip/environment.yml | 3 + modules/nf-core/gunzip/main.nf | 40 +-- modules/nf-core/gunzip/meta.yml | 2 +- .../nf-core/gunzip/tests/main.nf.test.snap | 40 +-- modules/nf-core/pyrodigal/environment.yml | 2 +- modules/nf-core/pyrodigal/main.nf | 7 +- .../nf-core/pyrodigal/tests/main.nf.test.snap | 46 +-- .../cardannotation/tests/main.nf.test.snap | 70 ++-- modules/nf-core/untar/environment.yml | 3 + modules/nf-core/untar/main.nf | 36 +- modules/nf-core/untar/meta.yml | 9 +- modules/nf-core/untar/untar.diff | 22 -- 21 files changed, 682 insertions(+), 320 deletions(-) delete mode 100644 modules/nf-core/untar/untar.diff diff --git a/modules.json b/modules.json index 3dd4848b..ddf22578 100644 --- a/modules.json +++ b/modules.json @@ -32,7 +32,7 @@ }, "amplify/predict": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "ce35ce92566b3328b405253543b9b2b4d4e5f4f7", "installed_by": ["modules"] }, "amrfinderplus/run": { @@ -82,12 +82,12 @@ }, "deepbgc/download": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "ce35ce92566b3328b405253543b9b2b4d4e5f4f7", "installed_by": ["modules"] }, "deepbgc/pipeline": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "ce35ce92566b3328b405253543b9b2b4d4e5f4f7", "installed_by": ["modules"] }, "fargene": { @@ -102,7 +102,7 @@ }, "gunzip": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "ce35ce92566b3328b405253543b9b2b4d4e5f4f7", "installed_by": ["modules"] }, "hamronization/abricate": { @@ -182,12 +182,12 @@ }, "pyrodigal": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "938e803109104e30773f76a7142442722498fef1", "installed_by": ["modules"] }, "rgi/cardannotation": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "3e548877f25a5980a177cc4f81d2d2e8c24164ef", "installed_by": ["modules"] }, "rgi/main": { @@ -207,7 +207,7 @@ }, "untar": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "3e548877f25a5980a177cc4f81d2d2e8c24164ef", "installed_by": ["modules"], "patch": "modules/nf-core/untar/untar.diff" } diff --git a/modules/nf-core/amplify/predict/tests/main.nf.test b/modules/nf-core/amplify/predict/tests/main.nf.test index 835c409c..d9ca94ae 100644 --- a/modules/nf-core/amplify/predict/tests/main.nf.test +++ b/modules/nf-core/amplify/predict/tests/main.nf.test @@ -13,7 +13,7 @@ nextflow_process { test("AMPlify predict (with Prodigal) - sarscov2 - contigs.fasta") { - setup { + setup { run("PRODIGAL") { script "../../../prodigal/main.nf" process { @@ -31,7 +31,7 @@ nextflow_process { process { """ input[0] = PRODIGAL.out.amino_acid_fasta - + """ } } @@ -55,7 +55,7 @@ nextflow_process { } - test("AMPlify predict - stub") { + test("AMPlify predict (with Prodigal) - sarscov2 - contigs.fasta - stub") { options "-stub" diff --git a/modules/nf-core/amplify/predict/tests/main.nf.test.snap b/modules/nf-core/amplify/predict/tests/main.nf.test.snap index d70e80eb..9803e2b7 100644 --- a/modules/nf-core/amplify/predict/tests/main.nf.test.snap +++ b/modules/nf-core/amplify/predict/tests/main.nf.test.snap @@ -29,10 +29,10 @@ } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-04-05T12:58:56.67316521" + "timestamp": "2024-12-13T12:43:54.777959891" }, "AMPlify predict (with Prodigal) - sarscov2 - contigs.fasta": { "content": [ @@ -69,4 +69,4 @@ }, "timestamp": "2024-04-05T12:58:49.894554665" } -} \ No newline at end of file +} diff --git a/modules/nf-core/deepbgc/download/main.nf b/modules/nf-core/deepbgc/download/main.nf index b141142c..6818a135 100644 --- a/modules/nf-core/deepbgc/download/main.nf +++ b/modules/nf-core/deepbgc/download/main.nf @@ -2,13 +2,13 @@ process DEEPBGC_DOWNLOAD { label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/deepbgc:0.1.31--pyhca03a8a_0': - 'biocontainers/deepbgc:0.1.31--pyhca03a8a_0' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://depot.galaxyproject.org/singularity/deepbgc:0.1.31--pyhca03a8a_0' + : 'biocontainers/deepbgc:0.1.31--pyhca03a8a_0'}" output: - path "deepbgc_db/" , emit: db - path "versions.yml" , emit: versions + path "deepbgc_db/", emit: db + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when @@ -27,4 +27,14 @@ process DEEPBGC_DOWNLOAD { deepbgc: \$(echo \$(deepbgc info 2>&1 /dev/null/ | grep 'version' | cut -d " " -f3) ) END_VERSIONS """ + + stub: + """ + mkdir -p deepbgc_db + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + deepbgc: \$(echo \$(deepbgc info 2>&1 /dev/null/ | grep 'version' | cut -d " " -f3) ) + END_VERSIONS + """ } diff --git a/modules/nf-core/deepbgc/download/tests/main.nf.test b/modules/nf-core/deepbgc/download/tests/main.nf.test index a1c2c532..25db42ab 100644 --- a/modules/nf-core/deepbgc/download/tests/main.nf.test +++ b/modules/nf-core/deepbgc/download/tests/main.nf.test @@ -14,7 +14,6 @@ nextflow_process { when { process { """ - """ } } @@ -22,11 +21,27 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.db).match("db") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out).match() } ) } - } + test("deepbgc download db - stub") { + + options "-stub" + + when { + process { + """ + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } } diff --git a/modules/nf-core/deepbgc/download/tests/main.nf.test.snap b/modules/nf-core/deepbgc/download/tests/main.nf.test.snap index b71c00ee..8d0c7fbb 100644 --- a/modules/nf-core/deepbgc/download/tests/main.nf.test.snap +++ b/modules/nf-core/deepbgc/download/tests/main.nf.test.snap @@ -1,39 +1,94 @@ { - "versions": { + "deepbgc download db - stub": { "content": [ - [ - "versions.yml:md5,4130f2ce0a4d43fc3d8e04f4935f908b" - ] + { + "0": [ + [ + + ] + ], + "1": [ + "versions.yml:md5,4130f2ce0a4d43fc3d8e04f4935f908b" + ], + "db": [ + [ + + ] + ], + "versions": [ + "versions.yml:md5,4130f2ce0a4d43fc3d8e04f4935f908b" + ] + } ], - "timestamp": "2023-12-04T13:10:01.115594047" + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-16T13:16:09.517281467" }, - "db": { + "deepbgc download db": { "content": [ - [ - [ + { + "0": [ [ [ - "product_activity.pkl:md5,90f0c010460e9df882cb057664a49f30", - "product_class.pkl:md5,f78a2eda240403d2f40643d42202f3ac" + [ + "product_activity.pkl:md5,90f0c010460e9df882cb057664a49f30", + "product_class.pkl:md5,f78a2eda240403d2f40643d42202f3ac" + ], + [ + "clusterfinder_geneborder.pkl:md5,ca4be7031ae9f70780f17c616a4fa5b5", + "clusterfinder_original.pkl:md5,2ca2429bb9bc99a401d1093c376b37aa", + "clusterfinder_retrained.pkl:md5,65679a3b61c562ff4b84bdb574bb6d93", + "deepbgc.pkl:md5,7e9218be79ba45bc9adb23bed3845dc1" + ] ], [ - "clusterfinder_geneborder.pkl:md5,ca4be7031ae9f70780f17c616a4fa5b5", - "clusterfinder_original.pkl:md5,2ca2429bb9bc99a401d1093c376b37aa", - "clusterfinder_retrained.pkl:md5,65679a3b61c562ff4b84bdb574bb6d93", - "deepbgc.pkl:md5,7e9218be79ba45bc9adb23bed3845dc1" + "Pfam-A.31.0.clans.tsv:md5,a0a4590ffb2b33b83ef2b28f6ead886b", + "Pfam-A.31.0.hmm:md5,79a3328e4c95b13949a4489b19959fc5", + "Pfam-A.31.0.hmm.h3f:md5,cbca323cf8dd4e5e7c109114ec444162", + "Pfam-A.31.0.hmm.h3i:md5,5242332a3f6a60cd1ab634cd9331afd6", + "Pfam-A.31.0.hmm.h3m:md5,1fe946fa2b3bcde1d4b2bad732bce612", + "Pfam-A.31.0.hmm.h3p:md5,27b98a1ded123b6a1ef72db01927017c" ] - ], + ] + ], + "1": [ + "versions.yml:md5,4130f2ce0a4d43fc3d8e04f4935f908b" + ], + "db": [ [ - "Pfam-A.31.0.clans.tsv:md5,a0a4590ffb2b33b83ef2b28f6ead886b", - "Pfam-A.31.0.hmm:md5,79a3328e4c95b13949a4489b19959fc5", - "Pfam-A.31.0.hmm.h3f:md5,cbca323cf8dd4e5e7c109114ec444162", - "Pfam-A.31.0.hmm.h3i:md5,5242332a3f6a60cd1ab634cd9331afd6", - "Pfam-A.31.0.hmm.h3m:md5,1fe946fa2b3bcde1d4b2bad732bce612", - "Pfam-A.31.0.hmm.h3p:md5,27b98a1ded123b6a1ef72db01927017c" + [ + [ + "product_activity.pkl:md5,90f0c010460e9df882cb057664a49f30", + "product_class.pkl:md5,f78a2eda240403d2f40643d42202f3ac" + ], + [ + "clusterfinder_geneborder.pkl:md5,ca4be7031ae9f70780f17c616a4fa5b5", + "clusterfinder_original.pkl:md5,2ca2429bb9bc99a401d1093c376b37aa", + "clusterfinder_retrained.pkl:md5,65679a3b61c562ff4b84bdb574bb6d93", + "deepbgc.pkl:md5,7e9218be79ba45bc9adb23bed3845dc1" + ] + ], + [ + "Pfam-A.31.0.clans.tsv:md5,a0a4590ffb2b33b83ef2b28f6ead886b", + "Pfam-A.31.0.hmm:md5,79a3328e4c95b13949a4489b19959fc5", + "Pfam-A.31.0.hmm.h3f:md5,cbca323cf8dd4e5e7c109114ec444162", + "Pfam-A.31.0.hmm.h3i:md5,5242332a3f6a60cd1ab634cd9331afd6", + "Pfam-A.31.0.hmm.h3m:md5,1fe946fa2b3bcde1d4b2bad732bce612", + "Pfam-A.31.0.hmm.h3p:md5,27b98a1ded123b6a1ef72db01927017c" + ] ] + ], + "versions": [ + "versions.yml:md5,4130f2ce0a4d43fc3d8e04f4935f908b" ] - ] + } ], - "timestamp": "2023-12-04T13:09:47.229121097" + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.2" + }, + "timestamp": "2024-12-16T13:15:16.323023111" } } \ No newline at end of file diff --git a/modules/nf-core/deepbgc/pipeline/main.nf b/modules/nf-core/deepbgc/pipeline/main.nf index fc72d238..1f93dff1 100644 --- a/modules/nf-core/deepbgc/pipeline/main.nf +++ b/modules/nf-core/deepbgc/pipeline/main.nf @@ -1,29 +1,29 @@ process DEEPBGC_PIPELINE { - tag "$meta.id" + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/deepbgc:0.1.31--pyhca03a8a_0': - 'biocontainers/deepbgc:0.1.31--pyhca03a8a_0' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://depot.galaxyproject.org/singularity/deepbgc:0.1.31--pyhca03a8a_0' + : 'biocontainers/deepbgc:0.1.31--pyhca03a8a_0'}" input: tuple val(meta), path(genome) - path(db) + path db output: - tuple val(meta), path("${prefix}/README.txt") , optional: true, emit: readme - tuple val(meta), path("${prefix}/LOG.txt") , emit: log - tuple val(meta), path("${prefix}/${prefix}.antismash.json") , optional: true, emit: json - tuple val(meta), path("${prefix}/${prefix}.bgc.gbk") , optional: true, emit: bgc_gbk - tuple val(meta), path("${prefix}/${prefix}.bgc.tsv") , optional: true, emit: bgc_tsv - tuple val(meta), path("${prefix}/${prefix}.full.gbk") , optional: true, emit: full_gbk - tuple val(meta), path("${prefix}/${prefix}.pfam.tsv") , optional: true, emit: pfam_tsv - tuple val(meta), path("${prefix}/evaluation/${prefix}.bgc.png") , optional: true, emit: bgc_png - tuple val(meta), path("${prefix}/evaluation/${prefix}.pr.png") , optional: true, emit: pr_png - tuple val(meta), path("${prefix}/evaluation/${prefix}.roc.png") , optional: true, emit: roc_png - tuple val(meta), path("${prefix}/evaluation/${prefix}.score.png"), optional: true, emit: score_png - path "versions.yml" , emit: versions + tuple val(meta), path("${prefix}/README.txt"), optional: true, emit: readme + tuple val(meta), path("${prefix}/LOG.txt"), emit: log + tuple val(meta), path("${prefix}/${prefix}.antismash.json"), optional: true, emit: json + tuple val(meta), path("${prefix}/${prefix}.bgc.gbk"), optional: true, emit: bgc_gbk + tuple val(meta), path("${prefix}/${prefix}.bgc.tsv"), optional: true, emit: bgc_tsv + tuple val(meta), path("${prefix}/${prefix}.full.gbk"), optional: true, emit: full_gbk + tuple val(meta), path("${prefix}/${prefix}.pfam.tsv"), optional: true, emit: pfam_tsv + tuple val(meta), path("${prefix}/evaluation/${prefix}.bgc.png"), optional: true, emit: bgc_png + tuple val(meta), path("${prefix}/evaluation/${prefix}.pr.png"), optional: true, emit: pr_png + tuple val(meta), path("${prefix}/evaluation/${prefix}.roc.png"), optional: true, emit: roc_png + tuple val(meta), path("${prefix}/evaluation/${prefix}.score.png"), optional: true, emit: score_png + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when @@ -36,8 +36,8 @@ process DEEPBGC_PIPELINE { deepbgc \\ pipeline \\ - $args \\ - $genome + ${args} \\ + ${genome} if [[ "${genome.baseName}/" != "${prefix}/" ]]; then mv "${genome.baseName}/" "${prefix}/" @@ -55,7 +55,6 @@ process DEEPBGC_PIPELINE { """ stub: - def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" """ mkdir -p ${prefix}/evaluation diff --git a/modules/nf-core/deepbgc/pipeline/tests/main.nf.test b/modules/nf-core/deepbgc/pipeline/tests/main.nf.test index 9dd24049..7e284269 100644 --- a/modules/nf-core/deepbgc/pipeline/tests/main.nf.test +++ b/modules/nf-core/deepbgc/pipeline/tests/main.nf.test @@ -12,42 +12,99 @@ nextflow_process { tag "gunzip" tag "prodigal" - setup { - run("DEEPBGC_DOWNLOAD") { - script "../..//download/main.nf" - process { - """ - """ + test("deepbgc pipeline gbk - bacteroides fragilis - test1_contigs.fa.gz") { + + setup { + run("DEEPBGC_DOWNLOAD") { + script "../..//download/main.nf" + process { + """ + """ + } } - } - run("GUNZIP") { - script "../../../gunzip/main.nf" - process { - """ - input[0] = Channel.fromList([ - tuple([ id:'test_gbk', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/illumina/fasta/test1.contigs.fa.gz', checkIfExists: true)) - ]) - """ + run("GUNZIP") { + script "../../../gunzip/main.nf" + process { + """ + input[0] = Channel.fromList([ + tuple([ id:'test_gbk', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/illumina/fasta/test1.contigs.fa.gz', checkIfExists: true)) + ]) + """ + } + } + run("PRODIGAL") { + script "../../../prodigal/main.nf" + process { + """ + input[0] = GUNZIP.out.gunzip + input[1] = 'gbk' + """ + } } } - run("PRODIGAL") { - script "../../../prodigal/main.nf" + + when { process { """ - input[0] = GUNZIP.out.gunzip - input[1] = 'gbk' + input [0] = PRODIGAL.out.gene_annotations + input [1] = DEEPBGC_DOWNLOAD.out.db """ } } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bgc_gbk[0][1]).name, + file(process.out.full_gbk[0][1]).name, + file(process.out.log[0][1]).name, + file(process.out.readme[0][1]).name, + process.out.json, + process.out.versions).match() + } + ) + } + } - test("deepbgc pipeline gbk - bacteroides fragilis - test1_contigs.fa.gz") { + test("deepbgc pipeline fa - bacteroides fragilis - test1_contigs.fa.gz") { + + setup { + run("DEEPBGC_DOWNLOAD") { + script "../..//download/main.nf" + process { + """ + """ + } + } + run("GUNZIP") { + script "../../../gunzip/main.nf" + process { + """ + input[0] = Channel.fromList([ + tuple([ id:'test_gbk', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/illumina/fasta/test1.contigs.fa.gz', checkIfExists: true)) + ]) + """ + } + } + run("PRODIGAL") { + script "../../../prodigal/main.nf" + process { + """ + input[0] = GUNZIP.out.gunzip + input[1] = 'gbk' + """ + } + } + } when { process { """ - input [0] = PRODIGAL.out.gene_annotations + input [0] = GUNZIP.out.gunzip input [1] = DEEPBGC_DOWNLOAD.out.db """ } @@ -56,22 +113,59 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.versions).match("gbk_versions") }, - { assert snapshot(process.out.json).match("gbk_json") }, - { assert path(process.out.log.get(0).get(1)).exists() }, - { assert path(process.out.bgc_gbk.get(0).get(1)).exists() }, - { assert path(process.out.full_gbk.get(0).get(1)).exists() } + { assert snapshot( + file(process.out.bgc_tsv[0][1]).name, + file(process.out.full_gbk[0][1]).name, + file(process.out.json[0][1]).name, + file(process.out.log[0][1]).name, + process.out.bgc_gbk, + process.out.bgc_png, + process.out.pfam_tsv, + process.out.score_png, + process.out.versions).match() + } ) } - } - test("deepbgc pipeline fa - bacteroides fragilis - test1_contigs.fa.gz") { + test("deepbgc pipeline gbk - bacteroides fragilis - test1_contigs.fa.gz - stub") { + + options "-stub" + + setup { + run("DEEPBGC_DOWNLOAD") { + script "../..//download/main.nf" + process { + """ + """ + } + } + run("GUNZIP") { + script "../../../gunzip/main.nf" + process { + """ + input[0] = Channel.fromList([ + tuple([ id:'test_gbk', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/illumina/fasta/test1.contigs.fa.gz', checkIfExists: true)) + ]) + """ + } + } + run("PRODIGAL") { + script "../../../prodigal/main.nf" + process { + """ + input[0] = GUNZIP.out.gunzip + input[1] = 'gbk' + """ + } + } + } when { process { """ - input [0] = GUNZIP.out.gunzip + input [0] = PRODIGAL.out.gene_annotations input [1] = DEEPBGC_DOWNLOAD.out.db """ } @@ -80,21 +174,45 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.versions).match("fa_versions") }, - { assert snapshot(process.out.bgc_gbk).match("fa_bgc_gbk") }, - { assert snapshot(process.out.bgc_png).match("fa_bgc_png") }, - { assert snapshot(process.out.score_png).match("fa_score_png") }, - { assert snapshot(process.out.pfam_tsv).match("fa_pfam_tsv") }, - { assert path(process.out.json.get(0).get(1)).exists() }, - { assert path(process.out.log.get(0).get(1)).exists() }, - { assert path(process.out.bgc_tsv.get(0).get(1)).exists() }, - { assert path(process.out.full_gbk.get(0).get(1)).exists() } + { assert snapshot(process.out).match() } ) } } test("deepbgc pipeline fa - bacteroides fragilis - test1_contigs.fa.gz - stub") { + options "-stub" + + setup { + run("DEEPBGC_DOWNLOAD") { + script "../..//download/main.nf" + process { + """ + """ + } + } + run("GUNZIP") { + script "../../../gunzip/main.nf" + process { + """ + input[0] = Channel.fromList([ + tuple([ id:'test_gbk', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/illumina/fasta/test1.contigs.fa.gz', checkIfExists: true)) + ]) + """ + } + } + run("PRODIGAL") { + script "../../../prodigal/main.nf" + process { + """ + input[0] = GUNZIP.out.gunzip + input[1] = 'gbk' + """ + } + } + } + when { process { """ @@ -111,6 +229,5 @@ nextflow_process { ) } } - } diff --git a/modules/nf-core/deepbgc/pipeline/tests/main.nf.test.snap b/modules/nf-core/deepbgc/pipeline/tests/main.nf.test.snap index ef64db97..751b9228 100644 --- a/modules/nf-core/deepbgc/pipeline/tests/main.nf.test.snap +++ b/modules/nf-core/deepbgc/pipeline/tests/main.nf.test.snap @@ -1,33 +1,218 @@ { - "gbk_versions": { + "deepbgc pipeline gbk - bacteroides fragilis - test1_contigs.fa.gz - stub": { "content": [ - [ - "versions.yml:md5,988a1db70bd9e95ad22c25b4d6d40e6e" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.1" - }, - "timestamp": "2023-12-01T18:29:41.728695197" - }, - "fa_bgc_png": { - "content": [ - [ - [ - { - "id": "test_gbk", - "single_end": false - }, - "test_gbk.bgc.png:md5,f4a0fc6cd260e2d7ad16f7a1fa103f96" + { + "0": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "README.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "LOG.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.score.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + "versions.yml:md5,988a1db70bd9e95ad22c25b4d6d40e6e" + ], + "2": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.antismash.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.bgc.gbk:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.bgc.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.full.gbk:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.pfam.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.bgc.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.pr.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "9": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.roc.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bgc_gbk": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.bgc.gbk:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bgc_png": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.bgc.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bgc_tsv": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.bgc.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "full_gbk": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.full.gbk:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.antismash.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "LOG.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "pfam_tsv": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.pfam.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "pr_png": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.pr.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "readme": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "README.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "roc_png": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.roc.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "score_png": [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.score.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,988a1db70bd9e95ad22c25b4d6d40e6e" ] - ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-06-03T16:29:32.389704368" + "timestamp": "2024-12-16T14:41:33.07308826" }, "deepbgc pipeline fa - bacteroides fragilis - test1_contigs.fa.gz - stub": { "content": [ @@ -239,31 +424,35 @@ } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-06-03T16:32:11.354631831" + "timestamp": "2024-12-16T14:11:05.81892322" }, - "fa_score_png": { + "deepbgc pipeline fa - bacteroides fragilis - test1_contigs.fa.gz": { "content": [ + "test_gbk.bgc.tsv", + "test_gbk.full.gbk", + "test_gbk.antismash.json", + "LOG.txt", [ [ { "id": "test_gbk", "single_end": false }, - "test_gbk.score.png:md5,572e8882031f667580d8c8e13c2cbb91" + "test_gbk.bgc.gbk:md5,7fc70dd034903622dae273bf71b402f2" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-03T16:29:32.401051746" - }, - "fa_pfam_tsv": { - "content": [ + ], + [ + [ + { + "id": "test_gbk", + "single_end": false + }, + "test_gbk.bgc.png:md5,f4a0fc6cd260e2d7ad16f7a1fa103f96" + ] + ], [ [ { @@ -272,60 +461,49 @@ }, "test_gbk.pfam.tsv:md5,1179eb4e6df0c83aaeec18d7d34e7524" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-03T16:29:32.411632144" - }, - "gbk_json": { - "content": [ + ], [ [ { "id": "test_gbk", "single_end": false }, - "test_gbk.antismash.json:md5,889ac1efb6a9a7d7b8c65e4cd2233bba" + "test_gbk.score.png:md5,572e8882031f667580d8c8e13c2cbb91" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-03T16:25:25.861672633" - }, - "fa_versions": { - "content": [ + ], [ "versions.yml:md5,988a1db70bd9e95ad22c25b4d6d40e6e" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.1" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2023-12-01T18:44:16.352023677" + "timestamp": "2024-12-16T14:23:52.269487956" }, - "fa_bgc_gbk": { + "deepbgc pipeline gbk - bacteroides fragilis - test1_contigs.fa.gz": { "content": [ + "test_gbk.bgc.gbk", + "test_gbk.full.gbk", + "LOG.txt", + "README.txt", [ [ { "id": "test_gbk", "single_end": false }, - "test_gbk.bgc.gbk:md5,7fc70dd034903622dae273bf71b402f2" + "test_gbk.antismash.json:md5,889ac1efb6a9a7d7b8c65e4cd2233bba" ] + ], + [ + "versions.yml:md5,988a1db70bd9e95ad22c25b4d6d40e6e" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-06-03T16:29:32.383560585" + "timestamp": "2024-12-16T14:17:20.991066496" } } \ No newline at end of file diff --git a/modules/nf-core/gunzip/environment.yml b/modules/nf-core/gunzip/environment.yml index c7794856..ae4fa457 100644 --- a/modules/nf-core/gunzip/environment.yml +++ b/modules/nf-core/gunzip/environment.yml @@ -2,6 +2,9 @@ channels: - conda-forge - bioconda dependencies: + - conda-forge::coreutils=9.5 - conda-forge::grep=3.11 + - conda-forge::gzip=1.13 + - conda-forge::lbzip2=2.5 - conda-forge::sed=4.8 - conda-forge::tar=1.34 diff --git a/modules/nf-core/gunzip/main.nf b/modules/nf-core/gunzip/main.nf index 5e67e3b9..3ffc8e92 100644 --- a/modules/nf-core/gunzip/main.nf +++ b/modules/nf-core/gunzip/main.nf @@ -1,37 +1,37 @@ process GUNZIP { - tag "$archive" + tag "${archive}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:22.04' : - 'nf-core/ubuntu:22.04' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/52/52ccce28d2ab928ab862e25aae26314d69c8e38bd41ca9431c67ef05221348aa/data' + : 'community.wave.seqera.io/library/coreutils_grep_gzip_lbzip2_pruned:838ba80435a629f8'}" input: tuple val(meta), path(archive) output: - tuple val(meta), path("$gunzip"), emit: gunzip - path "versions.yml" , emit: versions + tuple val(meta), path("${gunzip}"), emit: gunzip + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] - def name = archive.toString() - '.gz' - ".$extension" - def prefix = task.ext.prefix ?: name - gunzip = prefix + ".$extension" + def args = task.ext.args ?: '' + def extension = (archive.toString() - '.gz').tokenize('.')[-1] + def name = archive.toString() - '.gz' - ".${extension}" + def prefix = task.ext.prefix ?: name + gunzip = prefix + ".${extension}" """ # Not calling gunzip itself because it creates files # with the original group ownership rather than the # default one for that user / the work directory gzip \\ -cd \\ - $args \\ - $archive \\ - > $gunzip + ${args} \\ + ${archive} \\ + > ${gunzip} cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -40,13 +40,13 @@ process GUNZIP { """ stub: - def args = task.ext.args ?: '' - def extension = ( archive.toString() - '.gz' ).tokenize('.')[-1] - def name = archive.toString() - '.gz' - ".$extension" - def prefix = task.ext.prefix ?: name - gunzip = prefix + ".$extension" + def args = task.ext.args ?: '' + def extension = (archive.toString() - '.gz').tokenize('.')[-1] + def name = archive.toString() - '.gz' - ".${extension}" + def prefix = task.ext.prefix ?: name + gunzip = prefix + ".${extension}" """ - touch $gunzip + touch ${gunzip} cat <<-END_VERSIONS > versions.yml "${task.process}": gunzip: \$(echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//') diff --git a/modules/nf-core/gunzip/meta.yml b/modules/nf-core/gunzip/meta.yml index 9066c035..69d31024 100644 --- a/modules/nf-core/gunzip/meta.yml +++ b/modules/nf-core/gunzip/meta.yml @@ -27,7 +27,7 @@ output: type: file description: Compressed/uncompressed file pattern: "*.*" - - $gunzip: + - ${gunzip}: type: file description: Compressed/uncompressed file pattern: "*.*" diff --git a/modules/nf-core/gunzip/tests/main.nf.test.snap b/modules/nf-core/gunzip/tests/main.nf.test.snap index 069967e7..a0f0e67e 100644 --- a/modules/nf-core/gunzip/tests/main.nf.test.snap +++ b/modules/nf-core/gunzip/tests/main.nf.test.snap @@ -11,7 +11,7 @@ ] ], "1": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + "versions.yml:md5,d327e4a19a6d5c5e974136cef8999d8c" ], "gunzip": [ [ @@ -22,15 +22,15 @@ ] ], "versions": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + "versions.yml:md5,d327e4a19a6d5c5e974136cef8999d8c" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-06-25T11:35:10.861293" + "timestamp": "2024-12-13T11:48:22.080222697" }, "Should run without failures - stub": { "content": [ @@ -44,7 +44,7 @@ ] ], "1": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + "versions.yml:md5,d327e4a19a6d5c5e974136cef8999d8c" ], "gunzip": [ [ @@ -55,15 +55,15 @@ ] ], "versions": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + "versions.yml:md5,d327e4a19a6d5c5e974136cef8999d8c" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-06-25T11:35:05.857145" + "timestamp": "2024-12-13T11:48:14.593020264" }, "Should run without failures": { "content": [ @@ -77,7 +77,7 @@ ] ], "1": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + "versions.yml:md5,d327e4a19a6d5c5e974136cef8999d8c" ], "gunzip": [ [ @@ -88,15 +88,15 @@ ] ], "versions": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + "versions.yml:md5,d327e4a19a6d5c5e974136cef8999d8c" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2023-10-17T15:35:37.690477896" + "timestamp": "2024-12-13T11:48:01.295397925" }, "Should run without failures - prefix": { "content": [ @@ -110,7 +110,7 @@ ] ], "1": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + "versions.yml:md5,d327e4a19a6d5c5e974136cef8999d8c" ], "gunzip": [ [ @@ -121,14 +121,14 @@ ] ], "versions": [ - "versions.yml:md5,54376d32aca20e937a4ec26dac228e84" + "versions.yml:md5,d327e4a19a6d5c5e974136cef8999d8c" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-06-25T11:33:32.921739" + "timestamp": "2024-12-13T11:48:07.414271387" } } \ No newline at end of file diff --git a/modules/nf-core/pyrodigal/environment.yml b/modules/nf-core/pyrodigal/environment.yml index b0bbc515..26be9f32 100644 --- a/modules/nf-core/pyrodigal/environment.yml +++ b/modules/nf-core/pyrodigal/environment.yml @@ -4,5 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::pyrodigal=3.3.0 + - bioconda::pyrodigal=3.6.3 - conda-forge::pigz=2.8 diff --git a/modules/nf-core/pyrodigal/main.nf b/modules/nf-core/pyrodigal/main.nf index 7cb97594..9cbe8fcc 100644 --- a/modules/nf-core/pyrodigal/main.nf +++ b/modules/nf-core/pyrodigal/main.nf @@ -1,11 +1,11 @@ process PYRODIGAL { tag "$meta.id" - label 'process_single' + label 'process_medium' conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-2fe9a8ce513c91df34b43a6610df94c3a2eb3bd0:47e7d40834619419f202394563267d74cef857be-0': - 'biocontainers/mulled-v2-2fe9a8ce513c91df34b43a6610df94c3a2eb3bd0:47e7d40834619419f202394563267d74cef857be-0' }" + 'https://depot.galaxyproject.org/singularity/mulled-v2-2fe9a8ce513c91df34b43a6610df94c3a2eb3bd0:da1134ad604a59a6f439bdcc3f6df690eba47e9a-0': + 'biocontainers/mulled-v2-2fe9a8ce513c91df34b43a6610df94c3a2eb3bd0:da1134ad604a59a6f439bdcc3f6df690eba47e9a-0' }" input: tuple val(meta), path(fasta) @@ -28,6 +28,7 @@ process PYRODIGAL { pigz -cdf ${fasta} > pigz_fasta.fna pyrodigal \\ + -j ${task.cpus} \\ $args \\ -i pigz_fasta.fna \\ -f $output_format \\ diff --git a/modules/nf-core/pyrodigal/tests/main.nf.test.snap b/modules/nf-core/pyrodigal/tests/main.nf.test.snap index 827fdaaa..3d56b9f1 100644 --- a/modules/nf-core/pyrodigal/tests/main.nf.test.snap +++ b/modules/nf-core/pyrodigal/tests/main.nf.test.snap @@ -5,21 +5,21 @@ "test.fna.gz", "test.faa.gz", "test.score.gz", - "versions.yml:md5,4aab54554829148e01cc0dc7bf6cb5d3" + "versions.yml:md5,296cc4ed71c8eb16bbc6978fe6299b77" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-03-18T15:42:12.012112014" + "timestamp": "2024-12-02T15:17:12.218638993" }, "pyrodigal - sarscov2 - gbk": { "content": [ [ " CDS 310..13476", " /codon_start=1", - " /inference=\"ab initio prediction:pyrodigal:3.3.0\"", + " /inference=\"ab initio prediction:pyrodigal:3.6.3\"", " /locus_tag=\"MT192765.1_1\"", " /transl_table=11", " /translation=\"MPVLQVRDVLVRGFGDSVEEVLSEARQHLKDGTCGLVEVEKGVLP", @@ -51,18 +51,18 @@ "id": "test", "single_end": false }, - "test.score.gz:md5,c0703a9e662ae0b21c7bbb082ef3fb5f" + "test.score.gz:md5,63e6975e705be1fe749eb54bd4ea478e" ] ], [ - "versions.yml:md5,4aab54554829148e01cc0dc7bf6cb5d3" + "versions.yml:md5,296cc4ed71c8eb16bbc6978fe6299b77" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-07-30T06:09:40.289778252" + "timestamp": "2024-12-02T15:17:01.228814939" }, "pyrodigal - sarscov2 - gff": { "content": [ @@ -73,7 +73,7 @@ "id": "test", "single_end": false }, - "test.gff.gz:md5,8fcd2d93131cf9fb0c82b81db059ad27" + "test.gff.gz:md5,898c1e24e71fa108981597b8bb32110f" ] ], "1": [ @@ -100,11 +100,11 @@ "id": "test", "single_end": false }, - "test.score.gz:md5,c0703a9e662ae0b21c7bbb082ef3fb5f" + "test.score.gz:md5,63e6975e705be1fe749eb54bd4ea478e" ] ], "4": [ - "versions.yml:md5,4aab54554829148e01cc0dc7bf6cb5d3" + "versions.yml:md5,296cc4ed71c8eb16bbc6978fe6299b77" ], "annotations": [ [ @@ -112,7 +112,7 @@ "id": "test", "single_end": false }, - "test.gff.gz:md5,8fcd2d93131cf9fb0c82b81db059ad27" + "test.gff.gz:md5,898c1e24e71fa108981597b8bb32110f" ] ], "faa": [ @@ -139,19 +139,19 @@ "id": "test", "single_end": false }, - "test.score.gz:md5,c0703a9e662ae0b21c7bbb082ef3fb5f" + "test.score.gz:md5,63e6975e705be1fe749eb54bd4ea478e" ] ], "versions": [ - "versions.yml:md5,4aab54554829148e01cc0dc7bf6cb5d3" + "versions.yml:md5,296cc4ed71c8eb16bbc6978fe6299b77" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-03-18T15:41:55.822235843" + "timestamp": "2024-12-02T15:16:49.907998584" }, "pyrodigal - sarscov2 - gbk - stub": { "content": [ @@ -159,13 +159,13 @@ "test.fna.gz", "test.faa.gz", "test.score.gz", - "versions.yml:md5,4aab54554829148e01cc0dc7bf6cb5d3" + "versions.yml:md5,296cc4ed71c8eb16bbc6978fe6299b77" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-03-18T15:42:19.81157751" + "timestamp": "2024-12-02T15:17:22.681680508" } } \ No newline at end of file diff --git a/modules/nf-core/rgi/cardannotation/tests/main.nf.test.snap b/modules/nf-core/rgi/cardannotation/tests/main.nf.test.snap index 5d58124d..74a2f428 100644 --- a/modules/nf-core/rgi/cardannotation/tests/main.nf.test.snap +++ b/modules/nf-core/rgi/cardannotation/tests/main.nf.test.snap @@ -46,73 +46,73 @@ "0": [ [ "CARD-Download-README.txt:md5,ca330e1d89e3a97ac6f50c86a8ca5c34", - "aro_categories.tsv:md5,ba2f33c43b199cd62ae5663125ce316e", - "aro_categories_index.tsv:md5,39f995f2356b6a0cb5fd34e3c6ffc8e1", - "aro_index.tsv:md5,b7250ed3208c8497ec2371527a689eeb", - "card.json:md5,e2cb53b1706a602d5265d2284a1fcdd5", - "card_database_v3.2.9.fasta:md5,0839d4447860694782a5db5cd6eae085", - "card_database_v3.2.9_all.fasta:md5,5295875faf06bef62ea954fef40958c3", - "nucleotide_fasta_protein_homolog_model.fasta:md5,ebcd48a6c9e14f339ffd9d2673eed803", + "aro_categories.tsv:md5,cdefc6d0169bc7a077020022be68e38b", + "aro_categories_index.tsv:md5,f99f2fed0cf357c7c3e7e39e4b880ca2", + "aro_index.tsv:md5,3052f507daff81356f4e985025928217", + "card.json:md5,c9550768ded14c01a56c98e3c4931176", + "card_database_v3.3.0.fasta:md5,b3fd50f7946aed8009c131a3c1454728", + "card_database_v3.3.0_all.fasta:md5,81ffb872759695abd1023c0b5f8fe0d5", + "nucleotide_fasta_protein_homolog_model.fasta:md5,93fcfd413dda3056612f725d5bc06356", "nucleotide_fasta_protein_knockout_model.fasta:md5,ff476b358ef70da53acf4602568a9b9b", "nucleotide_fasta_protein_overexpression_model.fasta:md5,68937e587c880153400fa8203f6a90d5", - "nucleotide_fasta_protein_variant_model.fasta:md5,1ff9cbaf0d640e2084f13751309f8176", - "nucleotide_fasta_rRNA_gene_variant_model.fasta:md5,b88fbe1d6de44b2ff2819ee63d001d75", - "protein_fasta_protein_homolog_model.fasta:md5,130a0947c60d18ef2e7d0ab886f80af3", + "nucleotide_fasta_protein_variant_model.fasta:md5,58a4644e05df59af7a918f25b61e5a22", + "nucleotide_fasta_rRNA_gene_variant_model.fasta:md5,bd53f46d630f652c9f6b7584c2126e1f", + "protein_fasta_protein_homolog_model.fasta:md5,63a89932339a665c390cebd50627f19b", "protein_fasta_protein_knockout_model.fasta:md5,6b259399e3eae3f23eaa421bbba6ba25", "protein_fasta_protein_overexpression_model.fasta:md5,758b753b821789147cdd795c654940ad", - "protein_fasta_protein_variant_model.fasta:md5,ec46ea3d9dc7ab01ec22cf265e410c88", - "shortname_antibiotics.tsv:md5,9d20abb9f6d37ed0cecc1573867ca49a", - "shortname_pathogens.tsv:md5,ae267113de686bc8f58eab5845cc343b", - "snps.txt:md5,ee6dfbe7a65f3ffdb6968822c47e4550" + "protein_fasta_protein_variant_model.fasta:md5,7fb7bbf0001837a59504d406ece90807", + "shortname_antibiotics.tsv:md5,86eaefabf930b91bf08d3630abdd0a3b", + "shortname_pathogens.tsv:md5,4a69150eeec95693727f0cc178c0770a", + "snps.txt:md5,2f7a6bea480a7e3a6fc7f7f763c4b3fe" ] ], "1": [ "6.0.3" ], "2": [ - "3.2.9" + "3.3.0" ], "3": [ - "versions.yml:md5,43f331ec71ec01a1bae10e30f4ce4f26" + "versions.yml:md5,51bd8e4be5e532c5bdcfbb67c06dd808" ], "db": [ [ "CARD-Download-README.txt:md5,ca330e1d89e3a97ac6f50c86a8ca5c34", - "aro_categories.tsv:md5,ba2f33c43b199cd62ae5663125ce316e", - "aro_categories_index.tsv:md5,39f995f2356b6a0cb5fd34e3c6ffc8e1", - "aro_index.tsv:md5,b7250ed3208c8497ec2371527a689eeb", - "card.json:md5,e2cb53b1706a602d5265d2284a1fcdd5", - "card_database_v3.2.9.fasta:md5,0839d4447860694782a5db5cd6eae085", - "card_database_v3.2.9_all.fasta:md5,5295875faf06bef62ea954fef40958c3", - "nucleotide_fasta_protein_homolog_model.fasta:md5,ebcd48a6c9e14f339ffd9d2673eed803", + "aro_categories.tsv:md5,cdefc6d0169bc7a077020022be68e38b", + "aro_categories_index.tsv:md5,f99f2fed0cf357c7c3e7e39e4b880ca2", + "aro_index.tsv:md5,3052f507daff81356f4e985025928217", + "card.json:md5,c9550768ded14c01a56c98e3c4931176", + "card_database_v3.3.0.fasta:md5,b3fd50f7946aed8009c131a3c1454728", + "card_database_v3.3.0_all.fasta:md5,81ffb872759695abd1023c0b5f8fe0d5", + "nucleotide_fasta_protein_homolog_model.fasta:md5,93fcfd413dda3056612f725d5bc06356", "nucleotide_fasta_protein_knockout_model.fasta:md5,ff476b358ef70da53acf4602568a9b9b", "nucleotide_fasta_protein_overexpression_model.fasta:md5,68937e587c880153400fa8203f6a90d5", - "nucleotide_fasta_protein_variant_model.fasta:md5,1ff9cbaf0d640e2084f13751309f8176", - "nucleotide_fasta_rRNA_gene_variant_model.fasta:md5,b88fbe1d6de44b2ff2819ee63d001d75", - "protein_fasta_protein_homolog_model.fasta:md5,130a0947c60d18ef2e7d0ab886f80af3", + "nucleotide_fasta_protein_variant_model.fasta:md5,58a4644e05df59af7a918f25b61e5a22", + "nucleotide_fasta_rRNA_gene_variant_model.fasta:md5,bd53f46d630f652c9f6b7584c2126e1f", + "protein_fasta_protein_homolog_model.fasta:md5,63a89932339a665c390cebd50627f19b", "protein_fasta_protein_knockout_model.fasta:md5,6b259399e3eae3f23eaa421bbba6ba25", "protein_fasta_protein_overexpression_model.fasta:md5,758b753b821789147cdd795c654940ad", - "protein_fasta_protein_variant_model.fasta:md5,ec46ea3d9dc7ab01ec22cf265e410c88", - "shortname_antibiotics.tsv:md5,9d20abb9f6d37ed0cecc1573867ca49a", - "shortname_pathogens.tsv:md5,ae267113de686bc8f58eab5845cc343b", - "snps.txt:md5,ee6dfbe7a65f3ffdb6968822c47e4550" + "protein_fasta_protein_variant_model.fasta:md5,7fb7bbf0001837a59504d406ece90807", + "shortname_antibiotics.tsv:md5,86eaefabf930b91bf08d3630abdd0a3b", + "shortname_pathogens.tsv:md5,4a69150eeec95693727f0cc178c0770a", + "snps.txt:md5,2f7a6bea480a7e3a6fc7f7f763c4b3fe" ] ], "db_version": [ - "3.2.9" + "3.3.0" ], "tool_version": [ "6.0.3" ], "versions": [ - "versions.yml:md5,43f331ec71ec01a1bae10e30f4ce4f26" + "versions.yml:md5,51bd8e4be5e532c5bdcfbb67c06dd808" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.3" }, - "timestamp": "2024-02-19T23:33:06.962413561" + "timestamp": "2024-12-17T19:00:14.248138522" } } \ No newline at end of file diff --git a/modules/nf-core/untar/environment.yml b/modules/nf-core/untar/environment.yml index c7794856..ae4fa457 100644 --- a/modules/nf-core/untar/environment.yml +++ b/modules/nf-core/untar/environment.yml @@ -2,6 +2,9 @@ channels: - conda-forge - bioconda dependencies: + - conda-forge::coreutils=9.5 - conda-forge::grep=3.11 + - conda-forge::gzip=1.13 + - conda-forge::lbzip2=2.5 - conda-forge::sed=4.8 - conda-forge::tar=1.34 diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf index c651bdad..e712ebe6 100644 --- a/modules/nf-core/untar/main.nf +++ b/modules/nf-core/untar/main.nf @@ -1,46 +1,46 @@ process UNTAR { - tag "$archive" + tag "${archive}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'nf-core/ubuntu:20.04' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/52/52ccce28d2ab928ab862e25aae26314d69c8e38bd41ca9431c67ef05221348aa/data' + : 'community.wave.seqera.io/library/coreutils_grep_gzip_lbzip2_pruned:838ba80435a629f8'}" input: tuple val(meta), path(archive) output: - tuple val(meta), path("$prefix"), emit: untar - path "versions.yml" , emit: versions + tuple val(meta), path("${prefix}"), emit: untar + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' + def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' - prefix = task.ext.prefix ?: ( meta.id ? "${meta.id}" : archive.baseName.toString().replaceFirst(/\.tar$/, "")) + prefix = task.ext.prefix ?: (meta.id ? "${meta.id}" : archive.baseName.toString().replaceFirst(/\.tar$/, "")) """ - mkdir $prefix + mkdir ${prefix} ## Ensures --strip-components only applied when top level of tar contents is a directory ## If just files or multiple directories, place all in prefix if [[ \$(tar -taf ${archive} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then tar \\ - -C $prefix --strip-components 1 \\ + -C ${prefix} --strip-components 1 \\ -xavf \\ - $args \\ - $archive \\ - $args2 + ${args} \\ + ${archive} \\ + ${args2} else tar \\ - -C $prefix \\ + -C ${prefix} \\ -xavf \\ - $args \\ - $archive \\ - $args2 + ${args} \\ + ${archive} \\ + ${args2} fi cat <<-END_VERSIONS > versions.yml @@ -50,7 +50,7 @@ process UNTAR { """ stub: - prefix = task.ext.prefix ?: ( meta.id ? "${meta.id}" : archive.toString().replaceFirst(/\.[^\.]+(.gz)?$/, "")) + prefix = task.ext.prefix ?: (meta.id ? "${meta.id}" : archive.toString().replaceFirst(/\.[^\.]+(.gz)?$/, "")) """ mkdir ${prefix} ## Dry-run untaring the archive to get the files and place all in prefix diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml index 290346b3..3a37bb35 100644 --- a/modules/nf-core/untar/meta.yml +++ b/modules/nf-core/untar/meta.yml @@ -28,9 +28,12 @@ output: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - $prefix: - type: directory - description: Directory containing contents of archive + pattern: "*/" + - ${prefix}: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] pattern: "*/" - versions: - versions.yml: diff --git a/modules/nf-core/untar/untar.diff b/modules/nf-core/untar/untar.diff deleted file mode 100644 index d020ffeb..00000000 --- a/modules/nf-core/untar/untar.diff +++ /dev/null @@ -1,22 +0,0 @@ -Changes in module 'nf-core/untar' -'modules/nf-core/untar/environment.yml' is unchanged -'modules/nf-core/untar/meta.yml' is unchanged -Changes in 'untar/main.nf': ---- modules/nf-core/untar/main.nf -+++ modules/nf-core/untar/main.nf -@@ -4,8 +4,8 @@ - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? -- 'https://depot.galaxyproject.org/singularity/ubuntu:22.04' : -- 'nf-core/ubuntu:22.04' }" -+ 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : -+ 'nf-core/ubuntu:20.04' }" - - input: - tuple val(meta), path(archive) - -'modules/nf-core/untar/tests/main.nf.test' is unchanged -'modules/nf-core/untar/tests/tags.yml' is unchanged -'modules/nf-core/untar/tests/main.nf.test.snap' is unchanged -************************************************************ From 9d69c11775a8baee9688c163648716ca62a1c96c Mon Sep 17 00:00:00 2001 From: jasmezz Date: Thu, 19 Dec 2024 12:11:15 +0100 Subject: [PATCH 047/175] Update changelog --- CHANGELOG.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1fd07b7..0089562f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,11 +16,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Dependencies` -| Tool | Previous version | New version | -| -------- | ---------------- | ----------- | -| AMPcombi | 0.2.2 | 2.0.1 | -| Macrel | 1.2.0 | 1.4.0 | -| MultiQC | 1.24.0 | 1.25.1 | +| Tool | Previous version | New version | +| --------- | ---------------- | ----------- | +| AMPcombi | 0.2.2 | 2.0.1 | +| Macrel | 1.2.0 | 1.4.0 | +| MultiQC | 1.24.0 | 1.25.1 | +| Pyrodigal | 3.3.0 | 3.6.3 | ### `Deprecated` From 423d466339bd87a5c860ef9ac4763dd961d61861 Mon Sep 17 00:00:00 2001 From: Jasmin Frangenberg <73216762+jasmezz@users.noreply.github.com> Date: Thu, 19 Dec 2024 12:01:21 +0000 Subject: [PATCH 048/175] Update author details [skip ci] --- nextflow.config | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/nextflow.config b/nextflow.config index 1622a6f7..1154deb2 100644 --- a/nextflow.config +++ b/nextflow.config @@ -467,41 +467,49 @@ manifest { name: 'Jasmin Frangenberg', affiliation: 'Leibniz Institute for Natural Product Research and Infection Biology Hans Knöll Institute, Jena, Germany', email: 'jasmin.frangenberg@leibniz-hki.de', - github: 'jasmezz', + github: 'https://github.com/jasmezz', contribution: ['author', 'maintainer'], - orcid: '0009-0004-5961-4709', + orcid: 'https://orcid.org/0009-0004-5961-4709', ], [ - name: ' Anan Ibrahim', + name: 'Anan Ibrahim', affiliation: 'Leibniz Institute for Natural Product Research and Infection Biology Hans Knöll Institute, Jena, Germany', - email: 'anan.ibrahim@leibniz-hki.de', - github: 'darcy220606', + email: '', + github: 'https://github.com/darcy220606', contribution: ['author', 'maintainer'], - orcid: '0000-0003-3719-901X', + orcid: 'https://orcid.org/0000-0003-3719-901X', ], [ - name: ' Louisa Perelo', + name: 'Louisa Perelo', affiliation: 'Quantitative Biology Center (QBiC), University of Tübingen, Tübingen, Germany', - email: 'louisa.perelo@qbic.uni-tuebingen.de', - github: 'louperelo', + email: '', + github: 'https://github.com/louperelo', contribution: ['author', 'contributor'], - orcid: '0000-0002-7307-062X', + orcid: 'https://orcid.org/0000-0002-7307-062X', ], [ - name: ' Moritz E. Beber', - affiliation: '', + name: 'Moritz E. Beber', + affiliation: 'Unseen Bio ApS, Copenhagen, Denmark', email: '', github: 'Midnighter', contribution: ['author', 'contributor'], - orcid: '0000-0003-2406-1978', + orcid: 'https://orcid.org/0000-0003-2406-1978', ], [ - name: ' James A. Fellows Yates', + name: 'James A. Fellows Yates', affiliation: 'Leibniz Institute for Natural Product Research and Infection Biology Hans Knöll Institute, Jena, Germany; Max Planck Institute for Evolutionary Anthropology, Leipzig, Germany', - email: 'james_fellows_yates@eva.mpg.de', - github: 'jfy133', + email: '', + github: 'https://github.com/jfy133', contribution: ['author', 'maintainer'], - orcid: '0000-0001-5585-6277', + orcid: 'https://orcid.org/0000-0001-5585-6277', + ], + [ + name: 'Vedanth Ramji', + affiliation: 'Big Data Biology Lab, Chennai, India', + email: '', + github: 'https://github.com/Vedanth-Ramji', + contribution: ['contributor'], + orcid: 'https://orcid.org/0009-0001-5311-7611', ], ] homePage = 'https://github.com/nf-core/funcscan' From 218ca0cf49adb13bb7052ae929cf0eab2d98b951 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Thu, 19 Dec 2024 13:28:11 +0100 Subject: [PATCH 049/175] Update docs/usage.md Co-authored-by: Jasmin Frangenberg <73216762+jasmezz@users.noreply.github.com> --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 9fc5bca5..9b66fd2b 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -544,7 +544,7 @@ Several generic profiles are bundled with the pipeline which instruct the pipeli > [!IMPORTANT] > We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. -The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to check if your system is suported, please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). +The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to check if your system is supported, please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important! They are loaded in sequence, so later profiles can overwrite earlier profiles. From c0967e94d592d979c5d6904ff7f72d238f2890b1 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Thu, 19 Dec 2024 13:50:27 +0100 Subject: [PATCH 050/175] Update nextflow.config --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 1154deb2..8a700a13 100644 --- a/nextflow.config +++ b/nextflow.config @@ -505,7 +505,7 @@ manifest { ], [ name: 'Vedanth Ramji', - affiliation: 'Big Data Biology Lab, Chennai, India', + affiliation: 'Queensland University of Technology, Brisbane, Australia', email: '', github: 'https://github.com/Vedanth-Ramji', contribution: ['contributor'], From f364d6f71d2e2cd741f350d3f09e54717935ff6e Mon Sep 17 00:00:00 2001 From: jasmezz Date: Thu, 19 Dec 2024 14:01:24 +0100 Subject: [PATCH 051/175] Remove vscode file --- .vscode/settings.json | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index a33b527c..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "markdown.styles": ["public/vscode_markdown.css"] -} From 2531f7d2b5142607efa1bf8635ddff542f3e84e8 Mon Sep 17 00:00:00 2001 From: Jasmin Frangenberg <73216762+jasmezz@users.noreply.github.com> Date: Thu, 19 Dec 2024 14:03:03 +0000 Subject: [PATCH 052/175] Update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a8455c9..a27c12d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,8 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` -- [#421](https://github.com/nf-core/funcscan/pull/421) Updated to nf-core template 3.0.2 (by @jfy133) +- [#421](https://github.com/nf-core/funcscan/pull/421) Updated to nf-core template 3.0.2. (by @jfy133) - [#427](https://github.com/nf-core/funcscan/pull/427) AMPcombi now can use multiple other databases for classifications. (by @darcy220606) +- [#429](https://github.com/nf-core/funcscan/pull/429) Updated to nf-core template 3.1.0. (by @jfy133 and @jasmezz) ### `Fixed` From 9541325b30c453ba3c88397e3a3d1959dc0d0097 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Thu, 19 Dec 2024 16:58:09 +0100 Subject: [PATCH 053/175] Update snapshot (due to CARD database update) --- tests/test_preannotated.nf.test.snap | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_preannotated.nf.test.snap b/tests/test_preannotated.nf.test.snap index e53c7215..82ab3487 100644 --- a/tests/test_preannotated.nf.test.snap +++ b/tests/test_preannotated.nf.test.snap @@ -143,9 +143,9 @@ }, "rgi": { "content": [ - "sample_1.txt:md5,dde77ae2dc240ee4717d8d33a92dfb66", - "sample_2.txt:md5,0e652d35ef6e9272aa194b55db609e75", - "sample_3.txt:md5,dde77ae2dc240ee4717d8d33a92dfb66" + "sample_1.txt:md5,ff8f179d06d8566d8cf779fc7d1f4955", + "sample_2.txt:md5,cc4ae1fb9e0d5f79ef5105d640c7b748", + "sample_3.txt:md5,ff8f179d06d8566d8cf779fc7d1f4955" ], "meta": { "nf-test": "0.9.0", From 330afff25ea648d30c579fd2aa8a807797592ad0 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Fri, 20 Dec 2024 11:57:44 +0100 Subject: [PATCH 054/175] Add mmseqs patches, fix snapshots of ampir and deepbgc --- modules.json | 12 ++++++---- modules/nf-core/mmseqs/createdb/main.nf | 3 +-- .../mmseqs/createdb/mmseqs-createdb.diff | 21 +++++++++++++++++ modules/nf-core/mmseqs/createtsv/main.nf | 3 +-- .../mmseqs/createtsv/mmseqs-createtsv.diff | 23 +++++++++++++++++++ modules/nf-core/mmseqs/databases/main.nf | 1 - .../mmseqs/databases/mmseqs-databases.diff | 18 +++++++++++++++ modules/nf-core/mmseqs/taxonomy/main.nf | 3 +-- .../mmseqs/taxonomy/mmseqs-taxonomy.diff | 22 ++++++++++++++++++ tests/test_preannotated.nf.test.snap | 8 +++---- tests/test_preannotated_bgc.nf.test.snap | 2 +- 11 files changed, 100 insertions(+), 16 deletions(-) create mode 100644 modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff create mode 100644 modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff create mode 100644 modules/nf-core/mmseqs/databases/mmseqs-databases.diff create mode 100644 modules/nf-core/mmseqs/taxonomy/mmseqs-taxonomy.diff diff --git a/modules.json b/modules.json index ddf22578..0e459312 100644 --- a/modules.json +++ b/modules.json @@ -148,22 +148,26 @@ "mmseqs/createdb": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": ["modules"], + "patch": "modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff" }, "mmseqs/createtsv": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": ["modules"], + "patch": "modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff" }, "mmseqs/databases": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": ["modules"], + "patch": "modules/nf-core/mmseqs/databases/mmseqs-databases.diff" }, "mmseqs/taxonomy": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] + "installed_by": ["modules"], + "patch": "modules/nf-core/mmseqs/taxonomy/mmseqs-taxonomy.diff" }, "multiqc": { "branch": "master", diff --git a/modules/nf-core/mmseqs/createdb/main.nf b/modules/nf-core/mmseqs/createdb/main.nf index 9487e5bc..b7ac14c2 100644 --- a/modules/nf-core/mmseqs/createdb/main.nf +++ b/modules/nf-core/mmseqs/createdb/main.nf @@ -33,8 +33,7 @@ process MMSEQS_CREATEDB { createdb \\ ${sequence_name} \\ ${prefix}/${prefix} \\ - $args \\ - --compressed 1 + $args cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff b/modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff new file mode 100644 index 00000000..2c18d816 --- /dev/null +++ b/modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff @@ -0,0 +1,21 @@ +Changes in module 'nf-core/mmseqs/createdb' +'modules/nf-core/mmseqs/createdb/meta.yml' is unchanged +Changes in 'mmseqs/createdb/main.nf': +--- modules/nf-core/mmseqs/createdb/main.nf ++++ modules/nf-core/mmseqs/createdb/main.nf +@@ -33,8 +33,7 @@ + createdb \\ + ${sequence_name} \\ + ${prefix}/${prefix} \\ +- $args \\ +- --compressed 1 ++ $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + +'modules/nf-core/mmseqs/createdb/environment.yml' is unchanged +'modules/nf-core/mmseqs/createdb/tests/main.nf.test' is unchanged +'modules/nf-core/mmseqs/createdb/tests/tags.yml' is unchanged +'modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap' is unchanged +************************************************************ diff --git a/modules/nf-core/mmseqs/createtsv/main.nf b/modules/nf-core/mmseqs/createtsv/main.nf index dcd4c13d..12d118ef 100644 --- a/modules/nf-core/mmseqs/createtsv/main.nf +++ b/modules/nf-core/mmseqs/createtsv/main.nf @@ -40,8 +40,7 @@ process MMSEQS_CREATETSV { \$DB_RESULT_PATH_NAME \\ ${prefix}.tsv \\ $args \\ - --threads ${task.cpus} \\ - --compressed 1 + --threads ${task.cpus} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff new file mode 100644 index 00000000..4ccd6846 --- /dev/null +++ b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff @@ -0,0 +1,23 @@ +Changes in module 'nf-core/mmseqs/createtsv' +'modules/nf-core/mmseqs/createtsv/meta.yml' is unchanged +Changes in 'mmseqs/createtsv/main.nf': +--- modules/nf-core/mmseqs/createtsv/main.nf ++++ modules/nf-core/mmseqs/createtsv/main.nf +@@ -40,8 +40,7 @@ + \$DB_RESULT_PATH_NAME \\ + ${prefix}.tsv \\ + $args \\ +- --threads ${task.cpus} \\ +- --compressed 1 ++ --threads ${task.cpus} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + +'modules/nf-core/mmseqs/createtsv/environment.yml' is unchanged +'modules/nf-core/mmseqs/createtsv/tests/main.nf.test' is unchanged +'modules/nf-core/mmseqs/createtsv/tests/cluster.nextflow.config' is unchanged +'modules/nf-core/mmseqs/createtsv/tests/taxonomy.nextflow.config' is unchanged +'modules/nf-core/mmseqs/createtsv/tests/tags.yml' is unchanged +'modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap' is unchanged +************************************************************ diff --git a/modules/nf-core/mmseqs/databases/main.nf b/modules/nf-core/mmseqs/databases/main.nf index d43681ce..ef38eed9 100644 --- a/modules/nf-core/mmseqs/databases/main.nf +++ b/modules/nf-core/mmseqs/databases/main.nf @@ -28,7 +28,6 @@ process MMSEQS_DATABASES { ${prefix}/database \\ tmp/ \\ --threads ${task.cpus} \\ - --compressed 1 \\ ${args} cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/mmseqs/databases/mmseqs-databases.diff b/modules/nf-core/mmseqs/databases/mmseqs-databases.diff new file mode 100644 index 00000000..6c15139e --- /dev/null +++ b/modules/nf-core/mmseqs/databases/mmseqs-databases.diff @@ -0,0 +1,18 @@ +Changes in module 'nf-core/mmseqs/databases' +'modules/nf-core/mmseqs/databases/meta.yml' is unchanged +Changes in 'mmseqs/databases/main.nf': +--- modules/nf-core/mmseqs/databases/main.nf ++++ modules/nf-core/mmseqs/databases/main.nf +@@ -28,7 +28,6 @@ + ${prefix}/database \\ + tmp/ \\ + --threads ${task.cpus} \\ +- --compressed 1 \\ + ${args} + + cat <<-END_VERSIONS > versions.yml + +'modules/nf-core/mmseqs/databases/environment.yml' is unchanged +'modules/nf-core/mmseqs/databases/tests/main.nf.test' is unchanged +'modules/nf-core/mmseqs/databases/tests/main.nf.test.snap' is unchanged +************************************************************ diff --git a/modules/nf-core/mmseqs/taxonomy/main.nf b/modules/nf-core/mmseqs/taxonomy/main.nf index 54849885..396abd1f 100644 --- a/modules/nf-core/mmseqs/taxonomy/main.nf +++ b/modules/nf-core/mmseqs/taxonomy/main.nf @@ -38,8 +38,7 @@ process MMSEQS_TAXONOMY { ${prefix}_taxonomy/${prefix} \\ tmp1 \\ $args \\ - --threads ${task.cpus} \\ - --compressed 1 + --threads ${task.cpus} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/mmseqs/taxonomy/mmseqs-taxonomy.diff b/modules/nf-core/mmseqs/taxonomy/mmseqs-taxonomy.diff new file mode 100644 index 00000000..687ebcee --- /dev/null +++ b/modules/nf-core/mmseqs/taxonomy/mmseqs-taxonomy.diff @@ -0,0 +1,22 @@ +Changes in module 'nf-core/mmseqs/taxonomy' +'modules/nf-core/mmseqs/taxonomy/meta.yml' is unchanged +Changes in 'mmseqs/taxonomy/main.nf': +--- modules/nf-core/mmseqs/taxonomy/main.nf ++++ modules/nf-core/mmseqs/taxonomy/main.nf +@@ -38,8 +38,7 @@ + ${prefix}_taxonomy/${prefix} \\ + tmp1 \\ + $args \\ +- --threads ${task.cpus} \\ +- --compressed 1 ++ --threads ${task.cpus} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + +'modules/nf-core/mmseqs/taxonomy/environment.yml' is unchanged +'modules/nf-core/mmseqs/taxonomy/tests/main.nf.test' is unchanged +'modules/nf-core/mmseqs/taxonomy/tests/nextflow.config' is unchanged +'modules/nf-core/mmseqs/taxonomy/tests/tags.yml' is unchanged +'modules/nf-core/mmseqs/taxonomy/tests/main.nf.test.snap' is unchanged +************************************************************ diff --git a/tests/test_preannotated.nf.test.snap b/tests/test_preannotated.nf.test.snap index 7f957b19..69d140c2 100644 --- a/tests/test_preannotated.nf.test.snap +++ b/tests/test_preannotated.nf.test.snap @@ -21,13 +21,13 @@ true, "sample_2.ampir.faa:md5,12826875bd18623da78770187a7bbd2c", true, - "sample_3.ampir.faa:md5,0a36691485930a1b77c4b68a738fd98d" + true ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "24.10.3" }, - "timestamp": "2024-07-27T08:11:24.436374797" + "timestamp": "2024-12-20T11:01:38.808336691" }, "argnorm_amrfinderplus": { "content": [ diff --git a/tests/test_preannotated_bgc.nf.test.snap b/tests/test_preannotated_bgc.nf.test.snap index b05b7921..e4967fc0 100644 --- a/tests/test_preannotated_bgc.nf.test.snap +++ b/tests/test_preannotated_bgc.nf.test.snap @@ -21,7 +21,7 @@ "content": [ "sample_1.bgc.gbk:md5,e50e429959e9c4bf0c4b97d9dcd54a08", "sample_2.bgc.gbk:md5,effe3cfc91772eb4e4b50ac46f13a941", - "sample_3.bgc.gbk:md5,c9028aca1282b314d296091e1f0b8e52" + "sample_3.bgc.gbk:md5,41920a93524a1bb32ae1003d69327642" ], "meta": { "nf-test": "0.9.0", From 3ffe6111d826baffca9a21f0948401f55a7c9c5c Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Fri, 20 Dec 2024 16:55:53 +0100 Subject: [PATCH 055/175] Template update for nf-core/tools version 3.1.0 --- .editorconfig | 4 ++ .github/ISSUE_TEMPLATE/bug_report.yml | 1 - .github/PULL_REQUEST_TEMPLATE.md | 4 +- .github/workflows/download_pipeline.yml | 41 +++++++++++------- .nf-core.yml | 2 +- .prettierignore | 1 + CHANGELOG.md | 2 +- CITATIONS.md | 4 +- LICENSE | 2 +- README.md | 15 ++----- assets/multiqc_config.yml | 4 +- assets/nf-core-funcscan_logo_light.png | Bin 74373 -> 74373 bytes assets/schema_input.json | 2 +- conf/test.config | 4 +- docs/images/nf-core-funcscan_logo_dark.png | Bin 28033 -> 28033 bytes docs/images/nf-core-funcscan_logo_light.png | Bin 24169 -> 24197 bytes docs/output.md | 11 ++--- docs/usage.md | 2 +- nextflow.config | 9 ++-- nextflow_schema.json | 2 +- ro-crate-metadata.json | 41 ++++++++++++------ .../utils_nfcore_funcscan_pipeline/main.nf | 2 +- 22 files changed, 83 insertions(+), 70 deletions(-) diff --git a/.editorconfig b/.editorconfig index 72dda289..6d9b74cc 100644 --- a/.editorconfig +++ b/.editorconfig @@ -31,3 +31,7 @@ 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/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 34300c5d..a16aefdf 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -9,7 +9,6 @@ body: - [nf-core website: troubleshooting](https://nf-co.re/usage/troubleshooting) - [nf-core/funcscan pipeline documentation](https://nf-co.re/funcscan/usage) - - type: textarea id: description attributes: diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index b6e5cebd..565c77f8 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/nf-core/funcscan/tree/master/.github/CONTRIBUTING.md) +Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/funcscan/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/nf-core/funcscan/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/nf-core/funcscan/tree/main/.github/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/funcscan _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] Make sure your code lints (`nf-core pipelines lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 2576cc0c..13b51e2c 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -28,8 +28,12 @@ env: NXF_ANSI_LOG: false jobs: - download: + configure: runs-on: ubuntu-latest + outputs: + 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: Install Nextflow uses: nf-core/setup-nextflow@v2 @@ -53,22 +57,27 @@ jobs: 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_ENV} - echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> ${GITHUB_ENV} - echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> ${GITHUB_ENV} + 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 run: | - nf-core pipelines download ${{ env.REPO_LOWERCASE }} \ - --revision ${{ env.REPO_BRANCH }} \ - --outdir ./${{ env.REPOTITLE_LOWERCASE }} \ + nf-core pipelines download ${{ needs.configure.outputs.REPO_LOWERCASE }} \ + --revision ${{ needs.configure.outputs.REPO_BRANCH }} \ + --outdir ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }} \ --compress "none" \ --container-system 'singularity' \ --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io/library/" \ @@ -76,14 +85,14 @@ jobs: --download-configuration 'yes' - name: Inspect download - run: tree ./${{ env.REPOTITLE_LOWERCASE }} + run: tree ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }} - name: Count the downloaded number of container images id: count_initial run: | image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) echo "Initial container image count: $image_count" - echo "IMAGE_COUNT_INITIAL=$image_count" >> ${GITHUB_ENV} + echo "IMAGE_COUNT_INITIAL=$image_count" >> "$GITHUB_OUTPUT" - name: Run the downloaded pipeline (stub) id: stub_run_pipeline @@ -91,27 +100,27 @@ jobs: env: NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results + run: nextflow run ./${{needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results - name: Run the downloaded pipeline (stub run not supported) id: run_pipeline - if: ${{ job.steps.stub_run_pipeline.status == failure() }} + if: ${{ steps.stub_run_pipeline.outcome == 'failure' }} env: NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -profile test,singularity --outdir ./results + run: nextflow run ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -profile test,singularity --outdir ./results - name: Count the downloaded number of container images id: count_afterwards run: | image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) echo "Post-pipeline run container image count: $image_count" - echo "IMAGE_COUNT_AFTER=$image_count" >> ${GITHUB_ENV} + echo "IMAGE_COUNT_AFTER=$image_count" >> "$GITHUB_OUTPUT" - name: Compare container image counts run: | - if [ "${{ env.IMAGE_COUNT_INITIAL }}" -ne "${{ env.IMAGE_COUNT_AFTER }}" ]; then - initial_count=${{ env.IMAGE_COUNT_INITIAL }} - final_count=${{ env.IMAGE_COUNT_AFTER }} + 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 }} + 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 diff --git a/.nf-core.yml b/.nf-core.yml index eb1f60b7..9667ad7a 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -11,4 +11,4 @@ template: name: funcscan org: nf-core outdir: . - version: 2.1.0dev + version: 2.0.0 diff --git a/.prettierignore b/.prettierignore index 437d763d..edd29f01 100644 --- a/.prettierignore +++ b/.prettierignore @@ -10,3 +10,4 @@ testing/ testing* *.pyc bin/ +ro-crate-metadata.json diff --git a/CHANGELOG.md b/CHANGELOG.md index a1d052a9..de392b4c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ 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). -## v2.1.0dev - [date] +## v2.0.0 - [date] Initial release of nf-core/funcscan, created with the [nf-core](https://nf-co.re/) template. diff --git a/CITATIONS.md b/CITATIONS.md index fd005177..365d4b0a 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -12,9 +12,7 @@ - [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) -> Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. - -- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) +> Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online].- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. diff --git a/LICENSE b/LICENSE index a5c91c03..5df67c3a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James A. Fellows Yates +Copyright (c) The nf-core/funcscan 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 8c207e26..e315bfec 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,7 @@ nf-core/funcscan - - -[![GitHub Actions CI Status](https://github.com/nf-core/funcscan/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/ci.yml) +[![GitHub Actions CI Status](https://github.com/nf-core/funcscan/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/ci.yml) [![GitHub Actions Linting Status](https://github.com/nf-core/funcscan/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/funcscan/results)[![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) @@ -29,15 +27,12 @@ - - -1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) -2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) +1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) ## Usage > [!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. +> 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. - - - + 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/multiqc_config.yml b/assets/multiqc_config.yml index bf128717..7ff9d40a 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,7 @@ report_comment: > - This report has been generated by the nf-core/funcscan + This report has been generated by the nf-core/funcscan analysis pipeline. For information about how to interpret these results, please see the - documentation. + documentation. report_section_order: "nf-core-funcscan-methods-description": order: -1000 diff --git a/assets/nf-core-funcscan_logo_light.png b/assets/nf-core-funcscan_logo_light.png index f63ae1f578d07b38b7e68ffa7cdf681b4b14b9bb..24b2ae9504eb2e411b7b2123ec795b412302cd14 100644 GIT binary patch delta 22031 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 delta 22124 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 diff --git a/assets/schema_input.json b/assets/schema_input.json index df1294f0..14292914 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/nf-core/funcscan/master/assets/schema_input.json", + "$id": "https://raw.githubusercontent.com/nf-core/funcscan/main/assets/schema_input.json", "title": "nf-core/funcscan pipeline - params.input schema", "description": "Schema for the file provided with params.input", "type": "array", diff --git a/conf/test.config b/conf/test.config index a55b8e32..ece9397d 100644 --- a/conf/test.config +++ b/conf/test.config @@ -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/docs/images/nf-core-funcscan_logo_dark.png b/docs/images/nf-core-funcscan_logo_dark.png index 9c13157836aa0b466f634715c218fa5c3d574258..be2cadd4ccb4e8c0f8e49f5c1686646ff9af5e9b 100644 GIT binary patch literal 28033 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�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 aR|@81&YkMh0UxafS)H~+RheD7`+oqBUmuMC literal 28033 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 D(dr2l delta 23528 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 diff --git a/docs/output.md b/docs/output.md index 875a444a..d5f4b8fc 100644 --- a/docs/output.md +++ b/docs/output.md @@ -12,8 +12,7 @@ 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: -- [FastQC](#fastqc) - Raw read QC -- [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline +- [FastQC](#fastqc) - Raw read QC- [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution ### FastQC @@ -27,9 +26,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d -[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). - -### MultiQC +[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/).### MultiQC

Output files @@ -43,9 +40,7 @@ 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 fe73ac87..f1d3f4b5 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -130,7 +130,7 @@ Several generic profiles are bundled with the pipeline which instruct the pipeli > [!IMPORTANT] > We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. -The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to check if your system is suported, please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). +The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to check if your system is supported, please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important! They are loaded in sequence, so later profiles can overwrite earlier profiles. diff --git a/nextflow.config b/nextflow.config index 0691259a..2a19c61e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -273,9 +273,9 @@ manifest { homePage = 'https://github.com/nf-core/funcscan' description = """Pipeline for screening for functional components of assembled contigs""" mainScript = 'main.nf' - defaultBranch = 'master' + defaultBranch = 'main' nextflowVersion = '!>=24.04.2' - version = '2.1.0dev' + version = '2.0.0' doi = '' } @@ -307,7 +307,7 @@ validation { https://doi.org/10.1038/s41587-020-0439-x * Software dependencies - https://github.com/nf-core/funcscan/blob/master/CITATIONS.md + https://github.com/nf-core/funcscan/blob/main/CITATIONS.md """ } summary { @@ -315,3 +315,6 @@ validation { afterText = validation.help.afterText } } + +// Load modules.config for DSL2 module specific options +includeConfig 'conf/modules.config' diff --git a/nextflow_schema.json b/nextflow_schema.json index 60a71c78..00d6af6d 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/nf-core/funcscan/master/nextflow_schema.json", + "$id": "https://raw.githubusercontent.com/nf-core/funcscan/main/nextflow_schema.json", "title": "nf-core/funcscan pipeline parameters", "description": "Pipeline for screening for functional components of assembled contigs", "type": "object", diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 585014ae..fcaff8da 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -21,9 +21,9 @@ { "@id": "./", "@type": "Dataset", - "creativeWorkStatus": "InProgress", - "datePublished": "2024-12-12T11:23:38+00:00", - "description": "

\n \n \n \"nf-core/funcscan\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/funcscan/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/funcscan/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/funcscan/results)[![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/nf-core/funcscan)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23funcscan-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/funcscan)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/funcscan** is a bioinformatics pipeline that ...\n\n\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))\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 nf-core/funcscan \\\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\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/funcscan/usage) and the [parameter documentation](https://nf-co.re/funcscan/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/funcscan/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/funcscan/output).\n\n## Credits\n\nnf-core/funcscan was originally written by Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James A. Fellows Yates.\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\nFor further information or help, don't hesitate to get in touch on the [Slack `#funcscan` channel](https://nfcore.slack.com/channels/funcscan) (you can join with [this invite](https://nf-co.re/join/slack)).\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\nYou can cite the `nf-core` publication as follows:\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", + "creativeWorkStatus": "Stable", + "datePublished": "2024-12-20T15:55:51+00:00", + "description": "

\n \n \n \"nf-core/funcscan\"\n \n

[![GitHub Actions CI Status](https://github.com/nf-core/funcscan/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/funcscan/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/funcscan/results)[![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/nf-core/funcscan)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23funcscan-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/funcscan)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/funcscan** is a bioinformatics pipeline that ...\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. 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 nf-core/funcscan \\\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\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/funcscan/usage) and the [parameter documentation](https://nf-co.re/funcscan/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/funcscan/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/funcscan/output).\n\n## Credits\n\nnf-core/funcscan was originally written by Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James A. Fellows Yates.\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\nFor further information or help, don't hesitate to get in touch on the [Slack `#funcscan` channel](https://nfcore.slack.com/channels/funcscan) (you can join with [this invite](https://nf-co.re/join/slack)).\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\nYou can cite the `nf-core` publication as follows:\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" @@ -99,7 +99,7 @@ }, "mentions": [ { - "@id": "#81e54547-4c56-4a55-8ebc-88d7333cd8f9" + "@id": "#e925e8bc-bab9-4e68-995f-97d5732b8fd4" } ], "name": "nf-core/funcscan" @@ -121,14 +121,18 @@ }, { "@id": "main.nf", - "@type": ["File", "SoftwareSourceCode", "ComputationalWorkflow"], + "@type": [ + "File", + "SoftwareSourceCode", + "ComputationalWorkflow" + ], "creator": [ { "@id": "#jfy133@gmail.com" } ], "dateCreated": "", - "dateModified": "2024-12-12T11:23:38Z", + "dateModified": "2024-12-20T16:55:51Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -149,16 +153,25 @@ "screening", "secondary-metabolites" ], - "license": ["MIT"], - "name": ["nf-core/funcscan"], + "license": [ + "MIT" + ], + "name": [ + "nf-core/funcscan" + ], "programmingLanguage": { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow" }, "sdPublisher": { "@id": "https://nf-co.re/" }, - "url": ["https://github.com/nf-core/funcscan", "https://nf-co.re/funcscan/dev/"], - "version": ["2.1.0dev"] + "url": [ + "https://github.com/nf-core/funcscan", + "https://nf-co.re/funcscan/2.0.0/" + ], + "version": [ + "2.0.0" + ] }, { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow", @@ -173,11 +186,11 @@ "version": "!>=24.04.2" }, { - "@id": "#81e54547-4c56-4a55-8ebc-88d7333cd8f9", + "@id": "#e925e8bc-bab9-4e68-995f-97d5732b8fd4", "@type": "TestSuite", "instance": [ { - "@id": "#9b92794c-5ba0-4816-8b18-0346b8e4fefd" + "@id": "#f94431b7-7ddb-4913-90ae-af0a4f960090" } ], "mainEntity": { @@ -186,7 +199,7 @@ "name": "Test suite for nf-core/funcscan" }, { - "@id": "#9b92794c-5ba0-4816-8b18-0346b8e4fefd", + "@id": "#f94431b7-7ddb-4913-90ae-af0a4f960090", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/funcscan", "resource": "repos/nf-core/funcscan/actions/workflows/ci.yml", @@ -321,4 +334,4 @@ "name": "James Fellows Yates" } ] -} +} \ No newline at end of file diff --git a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf index 5693c827..0d5d68a6 100644 --- a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf @@ -117,7 +117,7 @@ workflow PIPELINE_COMPLETION { main: summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") def multiqc_reports = multiqc_report.toList() - + // // Completion email and summary // From 5d64dd911cec1838b9e1b03615ed3fc53a2ab5dc Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Fri, 20 Dec 2024 17:01:22 +0100 Subject: [PATCH 056/175] Template update for nf-core/tools version 3.1.1 --- .nf-core.yml | 2 +- ro-crate-metadata.json | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.nf-core.yml b/.nf-core.yml index 9667ad7a..31d1c17b 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,6 +1,6 @@ lint: actions_ci: false -nf_core_version: 3.1.0 +nf_core_version: 3.1.1 repository_type: pipeline template: author: Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index fcaff8da..3f67007a 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,7 +22,7 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "Stable", - "datePublished": "2024-12-20T15:55:51+00:00", + "datePublished": "2024-12-20T16:01:20+00:00", "description": "

\n \n \n \"nf-core/funcscan\"\n \n

[![GitHub Actions CI Status](https://github.com/nf-core/funcscan/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/funcscan/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/funcscan/results)[![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/nf-core/funcscan)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23funcscan-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/funcscan)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/funcscan** is a bioinformatics pipeline that ...\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. 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 nf-core/funcscan \\\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\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/funcscan/usage) and the [parameter documentation](https://nf-co.re/funcscan/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/funcscan/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/funcscan/output).\n\n## Credits\n\nnf-core/funcscan was originally written by Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James A. Fellows Yates.\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\nFor further information or help, don't hesitate to get in touch on the [Slack `#funcscan` channel](https://nfcore.slack.com/channels/funcscan) (you can join with [this invite](https://nf-co.re/join/slack)).\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\nYou can cite the `nf-core` publication as follows:\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": [ { @@ -99,7 +99,7 @@ }, "mentions": [ { - "@id": "#e925e8bc-bab9-4e68-995f-97d5732b8fd4" + "@id": "#4c661451-7e3e-44e5-9c60-1163324cf072" } ], "name": "nf-core/funcscan" @@ -132,7 +132,7 @@ } ], "dateCreated": "", - "dateModified": "2024-12-20T16:55:51Z", + "dateModified": "2024-12-20T17:01:20Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -186,11 +186,11 @@ "version": "!>=24.04.2" }, { - "@id": "#e925e8bc-bab9-4e68-995f-97d5732b8fd4", + "@id": "#4c661451-7e3e-44e5-9c60-1163324cf072", "@type": "TestSuite", "instance": [ { - "@id": "#f94431b7-7ddb-4913-90ae-af0a4f960090" + "@id": "#77e97a37-fd48-4a1a-9bdd-53ed807cb1e2" } ], "mainEntity": { @@ -199,7 +199,7 @@ "name": "Test suite for nf-core/funcscan" }, { - "@id": "#f94431b7-7ddb-4913-90ae-af0a4f960090", + "@id": "#77e97a37-fd48-4a1a-9bdd-53ed807cb1e2", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/funcscan", "resource": "repos/nf-core/funcscan/actions/workflows/ci.yml", From deb9ac855a92321bcbf0153e302d8ac89e7bcdcc Mon Sep 17 00:00:00 2001 From: jasmezz Date: Fri, 20 Dec 2024 18:17:15 +0100 Subject: [PATCH 057/175] Fix ampir nf.test + increase antismashdownloaddatabases time --- conf/base.config | 1 + tests/test_preannotated.nf.test | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/conf/base.config b/conf/base.config index d6e451de..68f87c98 100644 --- a/conf/base.config +++ b/conf/base.config @@ -156,6 +156,7 @@ process { withName: ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES { memory = { 4.GB * task.attempt } cpus = 1 + time = { 2.h * task.attempt } } withName: DEEPBGC_DOWNLOAD { diff --git a/tests/test_preannotated.nf.test b/tests/test_preannotated.nf.test index f13676b8..144916c8 100644 --- a/tests/test_preannotated.nf.test +++ b/tests/test_preannotated.nf.test @@ -27,7 +27,7 @@ nextflow_pipeline { path("$outputDir/amp/ampir/sample_2/sample_2.ampir.tsv").text.contains("MRWGYPLSLVLMALSVAAPMIYFRRKGWLR"), path("$outputDir/amp/ampir/sample_2/sample_2.ampir.faa"), path("$outputDir/amp/ampir/sample_3/sample_3.ampir.tsv").text.contains("IPELEMRWGYPLSLVLMALSVAAPMIYFRRKGWLR"), - path("$outputDir/amp/ampir/sample_3/sample_3.ampir.faa") + path("$outputDir/amp/ampir/sample_3/sample_3.ampir.faa").text.contains(">NODE_882919_length_258_cov_0.935961_1 # 149 # 256 # -1 # ID=") ).match("ampir") }, // AMPlify From 96bded251bbb6722fbbd0bc052a217afbaad4983 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Mon, 23 Dec 2024 11:00:43 +0100 Subject: [PATCH 058/175] Add `compressed` flag as ext.args to mmseqs modules --- conf/modules.config | 10 +++++++++- nextflow.config | 8 ++++---- nextflow_schema.json | 14 ++++++++------ 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index d4e473d2..3e331c3c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -41,7 +41,8 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] ext.args = [ - params.taxa_classification_mmseqs_db_savetmp ? "" : "--remove-tmp-files" + params.taxa_classification_mmseqs_db_savetmp ? "" : "--remove-tmp-files", + "--compressed ${params.taxa_classification_mmseqs_compressed}" ].join(' ').trim() } @@ -52,6 +53,9 @@ process { enabled: params.save_db, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] + ext.args = [ + "--compressed ${params.taxa_classification_mmseqs_compressed}" + ].join(' ').trim() } withName: MMSEQS_TAXONOMY { @@ -70,6 +74,7 @@ process { "--orf-filter-s ${params.taxa_classification_mmseqs_taxonomy_orffilters}", "--lca-mode ${params.taxa_classification_mmseqs_taxonomy_lcamode}", "--vote-mode ${params.taxa_classification_mmseqs_taxonomy_votemode}", + "--compressed ${params.taxa_classification_mmseqs_compressed}" ].join(' ').trim() } @@ -81,6 +86,9 @@ process { pattern: "*.tsv", saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] + ext.args = [ + "--compressed ${params.taxa_classification_mmseqs_compressed}" + ].join(' ').trim() } withName: SEQKIT_SEQ { diff --git a/nextflow.config b/nextflow.config index 8a700a13..85914230 100644 --- a/nextflow.config +++ b/nextflow.config @@ -38,6 +38,7 @@ params { // Taxonomy classification options run_taxa_classification = false taxa_classification_tool = 'mmseqs2' + taxa_classification_mmseqs_compressed = 0 taxa_classification_mmseqs_db = null taxa_classification_mmseqs_db_id = 'Kalamari' @@ -174,12 +175,11 @@ params { arg_skip_deeparg = false arg_deeparg_db = null - arg_deeparg_db_version = 2 - // Make sure to update on module version bump! + arg_deeparg_db_version = 2 // Make sure to update on module version bump! arg_deeparg_model = 'LS' arg_deeparg_minprob = 0.8 arg_deeparg_alignmentidentity = 50 - arg_deeparg_alignmentevalue = 1E-10 + arg_deeparg_alignmentevalue = 1e-10 arg_deeparg_alignmentoverlap = 0.8 arg_deeparg_numalignmentsperentry = 1000 @@ -229,7 +229,7 @@ params { bgc_skip_gecco = false bgc_gecco_cds = 3 bgc_gecco_threshold = 0.8 - bgc_gecco_pfilter = 1E-9 + bgc_gecco_pfilter = 0.000000001 bgc_gecco_edgedistance = 0 bgc_gecco_mask = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 4ba539bd..b5fea956 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -86,6 +86,14 @@ "help_text": "This flag specifies which tool for taxonomic classification should be activated. At the moment only 'MMseqs2' is incorporated in the pipeline.", "description": "Specifies the tool used for taxonomic classification.", "fa_icon": "fas fa-tools" + }, + "taxa_classification_mmseqs_compressed": { + "type": "integer", + "default": 0, + "enum": [0, 1], + "help_text": "To compress MMseqs2 output files, choose 1, otherwise leave to 0. Compressing output files can lead to errors when the output is actually empty. In that case, just leave this parameter to default. More details can be found in the [documentation (GitHub)](https://github.com/soedinglab/MMseqs2?tab=readme-ov-file#memory-requirements).\n\n> Modifies tool parameter(s):\n> - mmseqs createdb --compressed <0|1>\n> - mmseqs createtsv --compressed <0|1>\n> - mmseqs databases --compressed <0|1>\n> - mmseqs taxonomy --compressed <0|1>", + "description": "If MMseqs2 is chosen as taxonomic classification tool: Specifies if the output of all MMseqs2 subcommands shall be compressed.", + "fa_icon": "fas fa-file-archive" } }, "fa_icon": "fas fa-tag" @@ -1531,12 +1539,6 @@ "description": "Base URL or local path to location of pipeline test dataset files", "default": "https://raw.githubusercontent.com/nf-core/test-datasets/", "hidden": true - }, - "trace_report_suffix": { - "type": "string", - "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 } } } From 8b44ed56991428ea8987a22259269e0f392b62e2 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Wed, 8 Jan 2025 08:17:33 +0100 Subject: [PATCH 059/175] remove comments and fix Interproscan subworkflow --- conf/base.config | 2 +- conf/modules.config | 10 ++-- nextflow.config | 4 +- nextflow_schema.json | 95 +++++++++++++++++++++------------- subworkflows/local/amp.nf | 17 ------ subworkflows/local/function.nf | 29 ++++++++--- workflows/funcscan.nf | 8 +-- 7 files changed, 89 insertions(+), 76 deletions(-) diff --git a/conf/base.config b/conf/base.config index 7c1362ec..09613474 100644 --- a/conf/base.config +++ b/conf/base.config @@ -233,7 +233,7 @@ process { withName: INTERPROSCAN_DATABASE { memory = { 6.GB * task.attempt } - time = { 4.h * task.attempt } + time = { 4.h * task.attempt } // Download might take longer with some Bandwidth! cpus = { 6 * task.attempt } } diff --git a/conf/modules.config b/conf/modules.config index 1793f019..91953e43 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -99,7 +99,7 @@ process { withName: SEQKIT_SEQ_FILTER { ext.prefix = { "${meta.id}_cleaned.faa" } publishDir = [ - path: { "${params.outdir}/function/interproscan" }, + path: { "${params.outdir}/function/interproscan/" }, mode: params.publish_dir_mode, enabled: { params.run_function_interproscan }, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -111,7 +111,7 @@ process { withName: INTERPROSCAN_DATABASE { publishDir = [ - path: { "${params.outdir}/databases/interproscan" }, + path: { "${params.outdir}/databases/interproscan/" }, mode: params.publish_dir_mode, enabled: params.save_db, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -119,11 +119,11 @@ process { } withName: INTERPROSCAN { - ext.prefix = { "${meta.id}_interproscan.faa" } // add .tsv -- i tested it but it now saves it correctly as *faa.tsv which is what ampcombi requires -check! + ext.prefix = { "${meta.id}_interproscan.faa" } publishDir = [ path: { "${params.outdir}/function/interproscan/" }, mode: params.publish_dir_mode, - enabled: params.run_function_interproscan, // SHould also be with save_annotation activated?! + enabled: params.run_function_interproscan, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] ext.args = [ @@ -715,7 +715,7 @@ process { withName: AMP_DATABASE_DOWNLOAD { publishDir = [ - path: { "${params.outdir}/databases/${params.amp_ampcombi_db}" }, + path: { "${params.outdir}/databases/" }, mode: params.publish_dir_mode, enabled: params.save_db, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, diff --git a/nextflow.config b/nextflow.config index ed1ae551..b9728bfc 100644 --- a/nextflow.config +++ b/nextflow.config @@ -103,8 +103,8 @@ params { // Function classification options run_function_interproscan = false - function_interproscan_db = '/Net/Groups/ccdata/databases/interproscan_5.67-99.0/'//null - change that in interproscan_download.nf - function_interproscan_db_url = 'http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.59-91.0/interproscan-5.59-91.0-64-bit.tar.gz'//change to the newest version tested with AMP: http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz + function_interproscan_db = null + function_interproscan_db_url = 'http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz' function_interproscan_applications = 'PANTHER,ProSiteProfiles,ProSitePatterns,Pfam' function_interproscan_enableprecalc = false function_interproscan_enableresidueannot = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 765fc3e7..c9645ac4 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -153,14 +153,14 @@ }, "taxa_classification_mmseqs_taxonomy_sensitivity": { "type": "number", - "default": 5, + "default": 5.0, "help_text": "This flag specifies the speed and sensitivity of the taxonomic search. It stands for how many kmers should be produced during the preliminary seeding stage. A very fast search requires a low value e.g. '1.0' and a a very sensitive search requires e.g. '7.0'. More details can be found in the [documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - mmseqs taxonomy: `-s`", "description": "Specify the speed and sensitivity for taxonomy assignment.", "fa_icon": "fas fa-history" }, "taxa_classification_mmseqs_taxonomy_orffilters": { "type": "number", - "default": 2, + "default": 2.0, "help_text": "This flag specifies the sensitivity used for prefiltering the query ORF. Before the taxonomy-assigning step, MMseqs2 searches the predicted ORFs against the provided database. This value influences the speed with which the search is carried out. More details can be found in the [documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - mmseqs taxonomy: `--orf-filter-s`", "description": "Specify the ORF search sensitivity in the prefilter step.", "fa_icon": "fas fa-history" @@ -508,6 +508,53 @@ }, "fa_icon": "fas fa-file-signature" }, + "function_interproscan": { + "title": "Function: INTERPROSCAN", + "type": "object", + "description": "Functionally annotates all annotated coding regions.", + "default": "", + "properties": { + "run_function_interproscan": { + "type": "boolean", + "description": "Activates the functional annotation of annotated coding regions.", + "help_text": "Activates the annotation of annotated coding regions using [InterProScan](https://github.com/ebi-pf-team/interproscan). These annotate the locus tags to protein and domain levels according to the InterPro database. \n\nMore details can be found in the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/index.html)." + }, + "function_interproscan_db_url": { + "type": "string", + "default": "http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.59-91.0/interproscan-5.59-91.0-64-bit.tar.gz", + "help_text": "This allows the user to change the default InterProScan version for coding region functional annotation, which allows for the latest release usage. By default this is set to `http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz`. ", + "description": "Change the database version used for annotation." + }, + "function_interproscan_db": { + "type": "string", + "default": "/Net/Groups/ccdata/databases/interproscan_5.67-99.0/", + "help_text": "Use this to supply the path to a pre- downloaded InterProScan database. This can be any unziped InterProScan version. By default the database version '5.67-99.0' is downloaded. \n\nFor more details on where to find different InterProScan databases see tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/UserDocs.html#obtaining-a-copy-of-interproscan).\n", + "description": "Path to pre-downloaded database." + }, + "function_interproscan_applications": { + "type": "string", + "default": "PANTHER,ProSiteProfiles,ProSitePatterns,Pfam", + "help_text": "Assigns the database /s to be used to annotate the coding regions annotated during the 'ANNOTATION' workflow of the pipeline. By default these include `PANTHER,ProSiteProfiles,ProSitePatterns,Pfam`. \n- PANTHER (Protein ANalysis THrough Evolutionary Relationships): genes classified by their functions, using published scientific experimental evidence and evolutionary relationships. \n- PROSITE: protein domains, families, functional sites and specific patterns and profiles to identify them. \n- PFAM: protein families, represented by multiple sequence alignments and hidden Markov models (HMMs). \n\nThese databases were chosen based on the AMP workflow and therefore, with only these databases, do we guarantee the integration of the results to the AMPcombi final summary. \n\nNOTE: Currently, no integration of the results are implemented for the BGC and the ARG final summary tables. \n\nFor more information about all possible databases see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--applications`", + "description": "Assigns the database /s to be used to annotate the coding regions." + }, + "function_interproscan_enableprecalc": { + "type": "boolean", + "help_text": "This decreases the speed of functional annotation with InterProScan by pre-calculating matches found in the UniProtKB, thereby identifying unique matches in the query sequences for faster annotation. By default this is turned OFF.\n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `---diasable-precalc`", + "description": "Pre-calculates residue mutual matches." + }, + "function_interproscan_enableresidueannot": { + "type": "boolean", + "help_text": "This removes the residue annotation from the final XML and JSON output files, which we do not supply as output files from InerProScan. This is by default turned OFF.\n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--disable-residue-annot`", + "description": "Enable residue annotation in XML and JSON files." + }, + "function_interproscan_disableresidueannottsv": { + "type": "boolean", + "help_text": "This disables the addition of the annotations assigned according to the databases activated to the final `_interproscan.tsv` file. Turning this ON will remove the annotations from the final table. We don't recommend turning this ON to ensure a successful run. \n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--enable-tsv-residue-annot`\n", + "description": "Removes annotations from TSV file." + } + }, + "help_text": "This subworkflow adds functional information to all annotated coding regions. Currently, only annotation with InterProScan is integrated in the subworkflow. " + }, "database_downloading_options": { "title": "Database downloading options", "type": "object", @@ -655,7 +702,7 @@ }, "amp_ampcombi_parsetables_dbevalue": { "type": "number", - "default": 5, + "default": 5.0, "description": "Remove all DRAMP annotations that have an e-value greater than this value.", "help_text": "This e-value is used as a cut-off for the annotations from the internal Diamond alignment step (against the DRAMP database by default). Any e-value below this value will only remove the DRAMP classification and not the entire hit.\n\n> Modifies tool parameter(s):\n> - AMPCOMBI: `--db_evalue`", "fa_icon": "fas fa-sort-numeric-down" @@ -726,14 +773,14 @@ "properties": { "amp_ampcombi_cluster_covmode": { "type": "number", - "default": 0, + "default": 0.0, "description": "MMseqs2 coverage mode.", "help_text": "This assigns the coverage mode to the MMseqs2 cluster module. This determines how AMPs are grouped into clusters. More details can be found in the [MMseqs2 documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - AMPCOMBI: `--cluster_cov_mode`", "fa_icon": "far fa-circle" }, "amp_ampcombi_cluster_sensitivity": { "type": "number", - "default": 4, + "default": 4.0, "description": "Remove hits that have no stop codon upstream and downstream of the AMP.", "help_text": "This assigns the sensitivity of alignment to the MMseqs2 cluster module. This determines how AMPs are grouped into clusters. More information can be obtained in the [MMseqs2 documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - AMPCOMBI: `--cluster_sensitivity`", "fa_icon": "fas fa-arrows-alt-h" @@ -747,7 +794,7 @@ }, "amp_ampcombi_cluster_mode": { "type": "number", - "default": 1, + "default": 1.0, "description": "MMseqs2 clustering mode.", "help_text": "This assigns the cluster mode to the MMseqs2 cluster module. This determines how AMPs are grouped into clusters. More information can be obtained in the [MMseqs2 documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - AMPCOMBI: `--cluster_mode`", "fa_icon": "fas fa-circle" @@ -795,7 +842,7 @@ }, "arg_amrfinderplus_identmin": { "type": "number", - "default": -1, + "default": -1.0, "help_text": "Specify the minimum percentage amino-acid identity to reference protein or nucleotide identity for nucleotide reference must have if a BLAST alignment (based on methods: BLAST or PARTIAL) was detected, otherwise NA.\n\n If you specify `-1`, this means use a curated threshold if it exists and `0.9` otherwise.\n\nSetting this value to something other than `-1` will override any curated similarity cutoffs. For BLAST: alignment is > 90% of length and > 90% identity to a protein in the AMRFinderPlus database. For PARTIAL: alignment is > 50% of length, but < 90% of length and > 90% identity to the reference, and does not end at a contig boundary.\n\nFor more information check the AMRFinderPlus [documentation](https://github.com/ncbi/amr/wiki/Running-AMRFinderPlus#--organism-option).\n\n> Modifies tool parameter(s):\n> - AMRFinderPlus: `--ident_min`", "description": "Minimum percent identity to reference sequence.", "fa_icon": "fas fa-angle-left" @@ -1572,6 +1619,9 @@ { "$ref": "#/$defs/annotation_pyrodigal" }, + { + "$ref": "#/$defs/function_interproscan" + }, { "$ref": "#/$defs/database_downloading_options" }, @@ -1635,34 +1685,5 @@ { "$ref": "#/$defs/generic_options" } - ], - "properties": { - "run_function_interproscan": { - "type": "boolean", - "description": "Activates the functional annotation of annotated coding regions.", - "help_text": "Activates the annotation of annotated coding regions using [InterProScan](https://github.com/ebi-pf-team/interproscan). These annotate the locus tags to protein and domain levels according to the InterPro database. \n\nMore details can be found in the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/index.html)." - }, - "function_interproscan_applications": { - "type": "string", - "default": "PANTHER,ProSiteProfiles,ProSitePatterns,Pfam", - "help_text": "Assigns the database /s to be used to annotate the coding regions annotated during the 'Annotaton' workflow of the pipeline. By default these include `PANTHER,ProSiteProfiles,ProSitePatterns,Pfam`. \n- PANTHER (Protein ANalysis THrough Evolutionary Relationships): genes classified by their functions, using published scientific experimental evidence and evolutionary relationships. \n- PROSITE: protein domains, families, functional sites and specific patterns and profiles to identify them. \n- PFAM: protein families, represented by multiple sequence alignments and hidden Markov models (HMMs). \n\nThese databases were chosen based on the AMP workflow and therefore, with only these databases, do we guarantee the integration of the results to the AMPcombi final summary. Currently, no integration of the results are implemented for the BGC and the ARG final summary tables. \n\nFor more information about all possible databases see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--applications`" - }, - "function_interproscan_enableprecalc": { - "type": "boolean" - }, - "function_interproscan_enableresidueannot": { - "type": "boolean" - }, - "function_interproscan_disableresidueannottsv": { - "type": "boolean" - }, - "function_interproscan_db": { - "type": "string", - "default": "/Net/Groups/ccdata/databases/interproscan_5.67-99.0/" - }, - "function_interproscan_db_url": { - "type": "string", - "default": "http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.59-91.0/interproscan-5.59-91.0-64-bit.tar.gz" - } - } + ] } diff --git a/subworkflows/local/amp.nf b/subworkflows/local/amp.nf index ea19291f..316b944d 100644 --- a/subworkflows/local/amp.nf +++ b/subworkflows/local/amp.nf @@ -114,23 +114,6 @@ workflow AMP { interpro: it [4] } - // INTERPROSCAN INPUT CHECK - // // Check if tsv_interpro is empty, if not empty update the params.dynamic_extra_ergs and if empty dont update that and continue the commands - // // dynamik arg - // ampcombi_parse_optional_args = tsvs_interpro - // .map { meta, file -> - // "--interproscan_input ${file}" - // } - // // pass dynamik arg - // ampcombi_parse_optional_args - // .first() - // .ifEmpty {} // just silently skip if empty - // .subscribe { dynamik_arg -> // terminal, consumes value - // // log.info "Resolved dynamic argument: ${dynamik_arg}" // only for debugging - // params.dynamic_extra_args = dynamik_arg - // } - // // Pass combined args to ext.args in modules.config - if ( params.amp_ampcombi_db != null ) { AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db_id, params.amp_ampcombi_db, ch_input_for_ampcombi.interpro ) } else { diff --git a/subworkflows/local/function.nf b/subworkflows/local/function.nf index 5861960c..4e08bf08 100644 --- a/subworkflows/local/function.nf +++ b/subworkflows/local/function.nf @@ -2,37 +2,50 @@ RUN FUNCTIONAL CLASSIFICATION */ -include { INTERPROSCAN } from '../../modules/nf-core/interproscan/main' include { INTERPROSCAN_DATABASE } from '../../modules/local/interproscan_download' +include { INTERPROSCAN } from '../../modules/nf-core/interproscan/main' workflow FUNCTION { take: faas // tuple val(meta), path(PROKKA/PRODIGAL.out.faa) main: - ch_versions = Channel.empty() - ch_interproscan_tsv = Channel.empty() - ch_interproscan_db = Channel.empty() + ch_versions = Channel.empty() + ch_interproscan_tsv = Channel.empty() + ch_interproscan_db = Channel.empty() + ch_interproscan_tsv_modified = Channel.empty() - ch_faa_for_interproscan = faas + ch_faa_for_interproscan = faas if ( params.function_interproscan_db != null ) { ch_interproscan_db = Channel .fromPath( params.function_interproscan_db ) - .first() // i dont know if this is required!!!? + .first() } else { INTERPROSCAN_DATABASE ( params.function_interproscan_db_url ) ch_versions = ch_versions.mix( INTERPROSCAN_DATABASE.out.versions ) ch_interproscan_db = ( INTERPROSCAN_DATABASE.out.db ) } - //INTERPROSCAN( ch_faa_for_interproscan, [] ) INTERPROSCAN( ch_faa_for_interproscan, ch_interproscan_db ) ch_interproscan_tsv = ch_interproscan_tsv.mix(INTERPROSCAN.out.tsv) + // Current INTERPROSCAN version 5.59_91.0 only includes 13 columns and not 15 which ampcombi expects, so we added them here + ch_interproscan_tsv_modified = INTERPROSCAN.out.tsv + .map { meta, tsv_path -> + def modified_tsv_path = "${workflow.workDir}/tmp/${meta.id}_interproscan.faa.tsv" + + def modified_tsv_content = new File(tsv_path.toString()) + .readLines() + .collect { line -> (line.split('\t') + ['NA', 'NA']).join('\t') } + + new File(modified_tsv_path).text = modified_tsv_content.join('\n') + [meta, file(modified_tsv_path)] + } + ch_versions = ch_versions.mix(INTERPROSCAN.out.versions) emit: versions = ch_versions - tsv = ch_interproscan_tsv // channel: [ val(meta), tsv ] + tsv = ch_interproscan_tsv_modified // channel: [ val(meta), tsv ] } diff --git a/workflows/funcscan.nf b/workflows/funcscan.nf index f6d248b8..1a587b80 100644 --- a/workflows/funcscan.nf +++ b/workflows/funcscan.nf @@ -218,15 +218,13 @@ workflow FUNCSCAN { !file.isEmpty() }, ch_taxonomy_tsv, - //ch_prepped_input.gbks ch_prepped_input.gbks, ch_interproscan_tsv.filter { meta, file -> if (file != [] && file.isEmpty()) { log.warn("[nf-core/funcscan] Functional annotation with INTERPROSCAN produced an empty TSV file. No InterProScan classifications will be added in the final table: ${meta.id}") } - //file !file.isEmpty() - },//.collect() + }, ) ch_versions = ch_versions.mix(AMP.out.versions) } @@ -245,15 +243,13 @@ workflow FUNCSCAN { } !file.isEmpty() }, - //ch_prepped_input.gbks ch_prepped_input.gbks, ch_interproscan_tsv.filter { meta, file -> if (file != [] && file.isEmpty()) { log.warn("[nf-core/funcscan] Functional annotation with INTERPROSCAN produced an empty TSV file. No InterProScan classifications will be added in the final table: ${meta.id}") } - //file !file.isEmpty() - },//.collect() + }, ) ch_versions = ch_versions.mix(AMP.out.versions) } From ed81b0b715f26cf3c64c93149d28418fe1a1438a Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Wed, 8 Jan 2025 07:30:39 +0000 Subject: [PATCH 060/175] [automated] Fix code linting --- CHANGELOG.md | 14 +++++++------- CITATIONS.md | 2 +- docs/output.md | 1 + docs/usage.md | 8 +++++--- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 69d51498..44be2dbe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,19 +12,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#429](https://github.com/nf-core/funcscan/pull/429) Updated to nf-core template 3.1.0. (by @jfy133 and @jasmezz) - [#428](https://github.com/nf-core/funcscan/pull/XXX) Added InterProScan annotation workflow to the pipeline. The results are coupled to AMPcombi final table. (by @darcy220606) - ### `Fixed` - [#427](https://github.com/nf-core/funcscan/pull/427) Fixed the AMP reference database issues reported by users, due to non-ASCII characters. (by @darcy220606) - [#430](https://github.com/nf-core/funcscan/pull/430) Updated `rgi/main` module to fix incorrect variable name. (by @amizeranschi and @jasmezz) ### `Dependencies` -| Tool | Previous version | New version | -| -------- | ---------------- | ----------- | -| AMPcombi | 0.2.2 | 2.0.1 | -| Macrel | 1.2.0 | 1.4.0 | -| MultiQC | 1.24.0 | 1.25.1 | -| InterProScan | - | 5.59_91.0 | + +| Tool | Previous version | New version | +| ------------ | ---------------- | ----------- | +| AMPcombi | 0.2.2 | 2.0.1 | +| Macrel | 1.2.0 | 1.4.0 | +| MultiQC | 1.24.0 | 1.25.1 | +| InterProScan | - | 5.59_91.0 | ### `Deprecated` diff --git a/CITATIONS.md b/CITATIONS.md index c80d84fc..91cab07c 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -72,7 +72,7 @@ - [InterPro](https://doi.org/10.1093/nar/gkaa977) - >Blum, M., Chang, H-Y., Chuguransky, S., Grego, T., Kandasaamy, S., Mitchell, A., Nuka, G., Paysan-Lafosse, T., Qureshi, M., Raj, S., Richardson, L., Salazar, G.A., Williams, L., Bork, P., Bridge, A., Gough, J., Haft, D.H., Letunic, I., Marchler-Bauer, A., Mi, H., Natale, D.A., Necci, M., Orengo, C.A., Pandurangan, A.P., Rivoire, C., Sigrist, C.A., Sillitoe, I., Thanki, N., Thomas, P.D., Tosatto, S.C.E, Wu, C.H., Bateman, A., Finn, R.D. (2021) The InterPro protein families and domains database: 20 years on, Nucleic Acids Research, 49(D1), D344–D354.[DOI: 10.1093/nar/gkaa977](https://doi.org/10.1093/nar/gkaa977). + > Blum, M., Chang, H-Y., Chuguransky, S., Grego, T., Kandasaamy, S., Mitchell, A., Nuka, G., Paysan-Lafosse, T., Qureshi, M., Raj, S., Richardson, L., Salazar, G.A., Williams, L., Bork, P., Bridge, A., Gough, J., Haft, D.H., Letunic, I., Marchler-Bauer, A., Mi, H., Natale, D.A., Necci, M., Orengo, C.A., Pandurangan, A.P., Rivoire, C., Sigrist, C.A., Sillitoe, I., Thanki, N., Thomas, P.D., Tosatto, S.C.E, Wu, C.H., Bateman, A., Finn, R.D. (2021) The InterPro protein families and domains database: 20 years on, Nucleic Acids Research, 49(D1), D344–D354.[DOI: 10.1093/nar/gkaa977](https://doi.org/10.1093/nar/gkaa977). - [InterProScan](https://doi.org/10.1093/bioinformatics/btu031) diff --git a/docs/output.md b/docs/output.md index 353640f0..696d335e 100644 --- a/docs/output.md +++ b/docs/output.md @@ -227,6 +227,7 @@ Output Summaries: [InterProScan](#interproscan) #### InterProScan +
Output files diff --git a/docs/usage.md b/docs/usage.md index e85d0230..5459fb87 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -134,11 +134,13 @@ MMseqs2 is currently the only taxonomic classification tool used in the pipeline ``` ### InterProScan + [InterProScan](https://github.com/ebi-pf-team/interproscan) is currently the only functional classification tool that gives a snapshot of the protein families and domains for each coding region. By runnning this tool `--run_function_interproscan`, the [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/) v5.67-99.0 is by default downloaded and prepared. This can be changed by downloading and extracting the files from any [InterPro version](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/) and the path to the folder assigned. - ```bash - --function_interproscan_db 'path/to/InterPro_directory/' - ``` +```bash +--function_interproscan_db 'path/to/InterPro_directory/' +``` + :::info By default the databases used to assign the nearest protein domain is set as `PANTHER,ProSiteProfiles,ProSitePatterns,Pfam`. An addition of other application to the list, does not guarantee that the results will be integrated correctly within `AMPcombi`. ::: From 0340ba93acead66fc76a1c1fd7d00ab987791a86 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Wed, 8 Jan 2025 08:35:24 +0100 Subject: [PATCH 061/175] fix linting issues --- nextflow_schema.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index c9645ac4..4028d21e 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -521,13 +521,12 @@ }, "function_interproscan_db_url": { "type": "string", - "default": "http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.59-91.0/interproscan-5.59-91.0-64-bit.tar.gz", + "default": "http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz", "help_text": "This allows the user to change the default InterProScan version for coding region functional annotation, which allows for the latest release usage. By default this is set to `http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz`. ", "description": "Change the database version used for annotation." }, "function_interproscan_db": { "type": "string", - "default": "/Net/Groups/ccdata/databases/interproscan_5.67-99.0/", "help_text": "Use this to supply the path to a pre- downloaded InterProScan database. This can be any unziped InterProScan version. By default the database version '5.67-99.0' is downloaded. \n\nFor more details on where to find different InterProScan databases see tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/UserDocs.html#obtaining-a-copy-of-interproscan).\n", "description": "Path to pre-downloaded database." }, From 7e1f164a0028b0e96f710a6423ccf6fb2ef08219 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Wed, 8 Jan 2025 12:05:09 +0100 Subject: [PATCH 062/175] fix ampcombi when only one file passes parsetables --- subworkflows/local/amp.nf | 14 +++++++++++--- workflows/funcscan.nf | 1 - 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/amp.nf b/subworkflows/local/amp.nf index 316b944d..b50aacd0 100644 --- a/subworkflows/local/amp.nf +++ b/subworkflows/local/amp.nf @@ -29,7 +29,7 @@ workflow AMP { ch_ampcombi_summaries = Channel.empty() ch_macrel_faa = Channel.empty() ch_ampcombi_complete = Channel.empty() - ch_ampcombi_for_cluster = Channel.empty() + ch_ampcombi_summaries = Channel.empty() // When adding new tool that requires FAA, make sure to update conditions // in funcscan.nf around annotation and AMP subworkflow execution @@ -114,6 +114,7 @@ workflow AMP { interpro: it [4] } + // AMPCOMBI2::PARSETABLES if ( params.amp_ampcombi_db != null ) { AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db_id, params.amp_ampcombi_db, ch_input_for_ampcombi.interpro ) } else { @@ -125,13 +126,20 @@ workflow AMP { ch_versions = ch_versions.mix( AMPCOMBI2_PARSETABLES.out.versions ) ch_ampcombi_summaries = AMPCOMBI2_PARSETABLES.out.tsv.map{ it[1] }.collect() + ch_ampcombi_summaries_count = ch_ampcombi_summaries.map{ it.size() } - AMPCOMBI2_COMPLETE ( ch_ampcombi_summaries ) + // AMPCOMBI2::COMPLETE + ch_more_than_one = ch_ampcombi_summaries_count.filter { it > 1 }.map { ch_ampcombi_summaries } + AMPCOMBI2_COMPLETE(ch_more_than_one) ch_versions = ch_versions.mix( AMPCOMBI2_COMPLETE.out.versions ) - ch_ampcombi_complete = AMPCOMBI2_COMPLETE.out.tsv .filter { file -> file.countLines() > 1 } + ch_ampcombi_summaries_count.filter { it < 2 }.subscribe { count -> + log.warn("[nf-core/funcscan] AMPCOMBI2: $count file passed AMPCOMBI2:parsetables. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.") + } + + // AMPCOMBI2::CLUSTER if ( ch_ampcombi_complete != null ) { AMPCOMBI2_CLUSTER ( ch_ampcombi_complete ) ch_versions = ch_versions.mix( AMPCOMBI2_CLUSTER.out.versions ) diff --git a/workflows/funcscan.nf b/workflows/funcscan.nf index 1a587b80..6e47e55b 100644 --- a/workflows/funcscan.nf +++ b/workflows/funcscan.nf @@ -195,7 +195,6 @@ workflow FUNCSCAN { ch_input_for_function ) ch_versions = ch_versions.mix(FUNCTION.out.versions) - //ch_interproscan_tsv = FUNCTION.out.tsv.map{ it[1] }.collect() ch_interproscan_tsv = FUNCTION.out.tsv } else { ch_interproscan_tsv = Channel.empty() From 5be17ef13fe0a0b58ea994da10b12a32f883dc3a Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Thu, 9 Jan 2025 13:05:03 +0100 Subject: [PATCH 063/175] fix ampcombi2 wo interproscan --- subworkflows/local/amp.nf | 23 ++++++++-------- workflows/funcscan.nf | 58 +++++++++++++++++++++++++++++++++------ 2 files changed, 61 insertions(+), 20 deletions(-) diff --git a/subworkflows/local/amp.nf b/subworkflows/local/amp.nf index b50aacd0..21df3fbb 100644 --- a/subworkflows/local/amp.nf +++ b/subworkflows/local/amp.nf @@ -26,10 +26,9 @@ workflow AMP { main: ch_versions = Channel.empty() ch_ampresults_for_ampcombi = Channel.empty() - ch_ampcombi_summaries = Channel.empty() ch_macrel_faa = Channel.empty() - ch_ampcombi_complete = Channel.empty() ch_ampcombi_summaries = Channel.empty() + ch_ampcombi_complete = null // When adding new tool that requires FAA, make sure to update conditions // in funcscan.nf around annotation and AMP subworkflow execution @@ -126,17 +125,17 @@ workflow AMP { ch_versions = ch_versions.mix( AMPCOMBI2_PARSETABLES.out.versions ) ch_ampcombi_summaries = AMPCOMBI2_PARSETABLES.out.tsv.map{ it[1] }.collect() - ch_ampcombi_summaries_count = ch_ampcombi_summaries.map{ it.size() } - - // AMPCOMBI2::COMPLETE - ch_more_than_one = ch_ampcombi_summaries_count.filter { it > 1 }.map { ch_ampcombi_summaries } - AMPCOMBI2_COMPLETE(ch_more_than_one) - ch_versions = ch_versions.mix( AMPCOMBI2_COMPLETE.out.versions ) - ch_ampcombi_complete = AMPCOMBI2_COMPLETE.out.tsv + + // AMPCOMBI2::PARSETABLES + ch_summary_count = ch_ampcombi_summaries.map { it.size() }.sum() + + if ( ch_summary_count == 0 || ch_summary_count == 1 ) { + log.warn("[nf-core/funcscan] AMPCOMBI2: ${ch_summary_count} file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.") + } else { + AMPCOMBI2_COMPLETE(ch_ampcombi_summaries) + ch_versions = ch_versions.mix( AMPCOMBI2_COMPLETE.out.versions ) + ch_ampcombi_complete = AMPCOMBI2_COMPLETE.out.tsv .filter { file -> file.countLines() > 1 } - - ch_ampcombi_summaries_count.filter { it < 2 }.subscribe { count -> - log.warn("[nf-core/funcscan] AMPCOMBI2: $count file passed AMPCOMBI2:parsetables. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.") } // AMPCOMBI2::CLUSTER diff --git a/workflows/funcscan.nf b/workflows/funcscan.nf index 6e47e55b..b48655a5 100644 --- a/workflows/funcscan.nf +++ b/workflows/funcscan.nf @@ -195,11 +195,43 @@ workflow FUNCSCAN { ch_input_for_function ) ch_versions = ch_versions.mix(FUNCTION.out.versions) - ch_interproscan_tsv = FUNCTION.out.tsv + // ch_interproscan_tsv = FUNCTION.out.tsv + //} else { + // ch_interproscan_tsv = Channel.empty() + // //ch_interproscan_tsv = ch_prepped_input.faas.map { meta, _ -> [meta, []] } + //} + + //if (params.run_function_interproscan) { + // def filtered_faas = ch_prepped_input.faas.filter { meta, file -> + // if (file != [] && file.isEmpty()) { + // log.warn("[nf-core/funcscan] Annotation of the following sample produced an empty FAA file. InterProScan classification of the CDS requiring this file will not be executed: ${meta.id}") + // } + // !file.isEmpty() + // } + // SEQKIT_SEQ_FILTER(filtered_faas) + // ch_versions = ch_versions.mix(SEQKIT_SEQ_FILTER.out.versions) + // ch_input_for_function = SEQKIT_SEQ_FILTER.out.fastx +// + // FUNCTION( + // ch_input_for_function + // ) + // ch_versions = ch_versions.mix(FUNCTION.out.versions) + + ch_interproscan_tsv = FUNCTION.out.tsv.map { meta, file -> + if (file == [] || file.isEmpty()) { + log.warn("[nf-core/funcscan] Functional annotation with INTERPROSCAN produced an empty TSV file. Passing empty file for ${meta.id}.") + [meta, []] + } else { + [meta, file] + } + } } else { - ch_interproscan_tsv = Channel.empty() + ch_interproscan_tsv = ch_prepped_input.faas.map { meta, _ -> + [meta, []] + } } + /* SCREENING */ @@ -218,12 +250,22 @@ workflow FUNCSCAN { }, ch_taxonomy_tsv, ch_prepped_input.gbks, - ch_interproscan_tsv.filter { meta, file -> - if (file != [] && file.isEmpty()) { - log.warn("[nf-core/funcscan] Functional annotation with INTERPROSCAN produced an empty TSV file. No InterProScan classifications will be added in the final table: ${meta.id}") - } - !file.isEmpty() - }, + //ch_interproscan_tsv.filter { meta, file -> + //if (file != [] && file.isEmpty()) { + // log.warn("[nf-core/funcscan] Functional annotation with INTERPROSCAN produced an empty TSV file. No InterProScan classifications will be added in the final table: ${meta.id}") + //} + // !file.isEmpty() + //}, + //TODO!!!! AMPCOMBI is not running and interproscan is not turned on!!! FIX! + //ch_interproscan_tsv.filter { meta, file -> + //if (file == [] || file.isEmpty()) { + // log.warn("[nf-core/funcscan] Functional annotation with INTERPROSCAN produced an empty TSV file. No InterProScan classifications will be added in the final table: ${meta.id}") + // [meta, file] + //} else { + // [meta, file] + // } + //}, + ch_interproscan_tsv ) ch_versions = ch_versions.mix(AMP.out.versions) } From b782b54a45cc39eee8c1ba1e99893e4fe5ba7d84 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Thu, 9 Jan 2025 13:35:20 +0100 Subject: [PATCH 064/175] clean up comments --- workflows/funcscan.nf | 43 +------------------------------------------ 1 file changed, 1 insertion(+), 42 deletions(-) diff --git a/workflows/funcscan.nf b/workflows/funcscan.nf index b48655a5..6becdd5a 100644 --- a/workflows/funcscan.nf +++ b/workflows/funcscan.nf @@ -195,27 +195,6 @@ workflow FUNCSCAN { ch_input_for_function ) ch_versions = ch_versions.mix(FUNCTION.out.versions) - // ch_interproscan_tsv = FUNCTION.out.tsv - //} else { - // ch_interproscan_tsv = Channel.empty() - // //ch_interproscan_tsv = ch_prepped_input.faas.map { meta, _ -> [meta, []] } - //} - - //if (params.run_function_interproscan) { - // def filtered_faas = ch_prepped_input.faas.filter { meta, file -> - // if (file != [] && file.isEmpty()) { - // log.warn("[nf-core/funcscan] Annotation of the following sample produced an empty FAA file. InterProScan classification of the CDS requiring this file will not be executed: ${meta.id}") - // } - // !file.isEmpty() - // } - // SEQKIT_SEQ_FILTER(filtered_faas) - // ch_versions = ch_versions.mix(SEQKIT_SEQ_FILTER.out.versions) - // ch_input_for_function = SEQKIT_SEQ_FILTER.out.fastx -// - // FUNCTION( - // ch_input_for_function - // ) - // ch_versions = ch_versions.mix(FUNCTION.out.versions) ch_interproscan_tsv = FUNCTION.out.tsv.map { meta, file -> if (file == [] || file.isEmpty()) { @@ -250,21 +229,6 @@ workflow FUNCSCAN { }, ch_taxonomy_tsv, ch_prepped_input.gbks, - //ch_interproscan_tsv.filter { meta, file -> - //if (file != [] && file.isEmpty()) { - // log.warn("[nf-core/funcscan] Functional annotation with INTERPROSCAN produced an empty TSV file. No InterProScan classifications will be added in the final table: ${meta.id}") - //} - // !file.isEmpty() - //}, - //TODO!!!! AMPCOMBI is not running and interproscan is not turned on!!! FIX! - //ch_interproscan_tsv.filter { meta, file -> - //if (file == [] || file.isEmpty()) { - // log.warn("[nf-core/funcscan] Functional annotation with INTERPROSCAN produced an empty TSV file. No InterProScan classifications will be added in the final table: ${meta.id}") - // [meta, file] - //} else { - // [meta, file] - // } - //}, ch_interproscan_tsv ) ch_versions = ch_versions.mix(AMP.out.versions) @@ -285,12 +249,7 @@ workflow FUNCSCAN { !file.isEmpty() }, ch_prepped_input.gbks, - ch_interproscan_tsv.filter { meta, file -> - if (file != [] && file.isEmpty()) { - log.warn("[nf-core/funcscan] Functional annotation with INTERPROSCAN produced an empty TSV file. No InterProScan classifications will be added in the final table: ${meta.id}") - } - !file.isEmpty() - }, + ch_interproscan_tsv ) ch_versions = ch_versions.mix(AMP.out.versions) } From e58b322d5bfe749ab7777f538e5b7b723914f67c Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Thu, 9 Jan 2025 14:06:58 +0100 Subject: [PATCH 065/175] fix linting --- modules/local/interproscan_download.nf | 3 +-- subworkflows/local/amp.nf | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/modules/local/interproscan_download.nf b/modules/local/interproscan_download.nf index 170f8278..1921305a 100644 --- a/modules/local/interproscan_download.nf +++ b/modules/local/interproscan_download.nf @@ -1,7 +1,6 @@ process INTERPROSCAN_DATABASE { tag "interproscan_database_download" - //label 'process_medium' - //TODO DOnt forget to change the link to the db :: the version optimized to AMPcombi + label 'process_medium' conda "conda-forge::sed=4.7" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? diff --git a/subworkflows/local/amp.nf b/subworkflows/local/amp.nf index 21df3fbb..77665f28 100644 --- a/subworkflows/local/amp.nf +++ b/subworkflows/local/amp.nf @@ -125,10 +125,10 @@ workflow AMP { ch_versions = ch_versions.mix( AMPCOMBI2_PARSETABLES.out.versions ) ch_ampcombi_summaries = AMPCOMBI2_PARSETABLES.out.tsv.map{ it[1] }.collect() - + // AMPCOMBI2::PARSETABLES ch_summary_count = ch_ampcombi_summaries.map { it.size() }.sum() - + if ( ch_summary_count == 0 || ch_summary_count == 1 ) { log.warn("[nf-core/funcscan] AMPCOMBI2: ${ch_summary_count} file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.") } else { From 7abbb1456dbb6725c451d16691078c7310885a1d Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Fri, 10 Jan 2025 09:17:10 +0100 Subject: [PATCH 066/175] fix merge taxonomy scripts and outputs --- bin/merge_taxonomy.py | 137 ++++++++++++++++++++++++++++++------------ 1 file changed, 98 insertions(+), 39 deletions(-) diff --git a/bin/merge_taxonomy.py b/bin/merge_taxonomy.py index 44eed31a..d492e4b4 100755 --- a/bin/merge_taxonomy.py +++ b/bin/merge_taxonomy.py @@ -3,7 +3,7 @@ # Written by Anan Ibrahim and released under the MIT license. # See git repository (https://github.com/Darcy220606/AMPcombi) for full license text. # Date: March 2024 -# Version: 0.1.0 +# Version: 0.1.1 # Required modules import sys @@ -12,7 +12,7 @@ import numpy as np import argparse -tool_version = "0.1.0" +tool_version = "0.1.1" ######################################### # TOP LEVEL: AMPCOMBI ######################################### @@ -66,6 +66,15 @@ # TAXONOMY ######################################### def reformat_mmseqs_taxonomy(mmseqs_taxonomy): + """_summary_ + Reformats the taxonomy files and joins them in a list to be passed on to the tools functions + + Args: + mmseqs_taxonomy (tsv): mmseqs output file per sample + + Returns: + data frame: reformated tables + """ mmseqs2_df = pd.read_csv(mmseqs_taxonomy, sep='\t', header=None, names=['contig_id', 'taxid', 'rank_label', 'scientific_name', 'lineage', 'mmseqs_lineage_contig']) # remove the lineage column mmseqs2_df.drop('lineage', axis=1, inplace=True) @@ -85,7 +94,19 @@ def reformat_mmseqs_taxonomy(mmseqs_taxonomy): # FUNCTION: AMPCOMBI ######################################### def ampcombi_taxa(args): - merged_df = pd.DataFrame() + """_summary_ + Merges AMPcombi tool output with taxonomy information. + + Parameters: + ---------- + args: + Contains arguments for AMPcombi file path (`amp`) and list of taxonomy file paths (`taxa1`). + + Outputs: + ------- + Creates a file named `ampcombi_complete_summary_taxonomy.tsv` containing the merged results. + """ + combined_dfs = [] # assign input args to variables ampcombi = args.amp @@ -100,13 +121,6 @@ def ampcombi_taxa(args): # filter the tool df tool_df = pd.read_csv(ampcombi, sep='\t') - # remove the column with contig_id - duplicate #NOTE: will be fixed in AMPcombi v2.0.0 - tool_df = tool_df.drop('contig_id', axis=1) - # make sure 1st and 2nd column have the same column labels - tool_df.rename(columns={tool_df.columns[0]: 'sample_id'}, inplace=True) - tool_df.rename(columns={tool_df.columns[1]: 'contig_id'}, inplace=True) - # grab the real contig id in another column copy for merging - tool_df['contig_id_merge'] = tool_df['contig_id'].str.rsplit('_', 1).str[0] # merge rows from taxa to ampcombi_df based on substring match in sample_id # grab the unique sample names from the taxonomy table @@ -114,17 +128,18 @@ def ampcombi_taxa(args): # for every sampleID in taxadf merge the results for sampleID in samples_taxa: # subset ampcombi - subset_tool = tool_df.loc[tool_df['sample_id'].str.contains(sampleID)] + subset_tool = tool_df[tool_df['sample_id'].str.contains(sampleID, na=False)] # subset taxa - subset_taxa = taxa_df.loc[taxa_df['sample_id'].str.contains(sampleID)] + subset_taxa = taxa_df[taxa_df['sample_id'].str.contains(sampleID, na=False)] # merge - subset_df = pd.merge(subset_tool, subset_taxa, left_on = 'contig_id_merge', right_on='contig_id', how='left') + subset_df = pd.merge(subset_tool, subset_taxa, on='contig_id', how='left') # cleanup the table - columnsremove = ['contig_id_merge','contig_id_y', 'sample_id_y'] + columnsremove = ['sample_id_y'] subset_df.drop(columnsremove, axis=1, inplace=True) - subset_df.rename(columns={'contig_id_x': 'contig_id', 'sample_id_x':'sample_id'},inplace=True) + subset_df.rename(columns={'sample_id_x':'sample_id'},inplace=True) # append in the combined_df - merged_df = merged_df.append(subset_df, ignore_index=True) + combined_dfs.append(subset_df) + merged_df = pd.concat(combined_dfs, ignore_index=True) # write to file merged_df.to_csv('ampcombi_complete_summary_taxonomy.tsv', sep='\t', index=False) @@ -133,7 +148,20 @@ def ampcombi_taxa(args): # FUNCTION: COMBGC ######################################### def combgc_taxa(args): - merged_df = pd.DataFrame() + """_summary_ + + Merges comBGC tool output with taxonomy information. + + Parameters: + ---------- + args: + Contains arguments for comBGC file path (`bgc`) and list of taxonomy file paths (`taxa2`). + + Outputs: + ------- + Creates a file named `combgc_complete_summary_taxonomy.tsv` containing the merged results. + """ + combined_dfs = [] # assign input args to variables combgc = args.bgc @@ -152,23 +180,24 @@ def combgc_taxa(args): tool_df.rename(columns={tool_df.columns[0]: 'sample_id'}, inplace=True) tool_df.rename(columns={tool_df.columns[1]: 'contig_id'}, inplace=True) - # merge rows from taxa to ampcombi_df based on substring match in sample_id + # merge rows from taxa to combgc_df based on substring match in sample_id # grab the unique sample names from the taxonomy table samples_taxa = taxa_df['sample_id'].unique() # for every sampleID in taxadf merge the results for sampleID in samples_taxa: - # subset ampcombi - subset_tool = tool_df.loc[tool_df['sample_id'].str.contains(sampleID)] + # subset tool + subset_tool = tool_df[tool_df['sample_id'].str.contains(sampleID, na=False)] # subset taxa - subset_taxa = taxa_df.loc[taxa_df['sample_id'].str.contains(sampleID)] + subset_taxa = taxa_df[taxa_df['sample_id'].str.contains(sampleID, na=False)] # merge - subset_df = pd.merge(subset_tool, subset_taxa, left_on = 'contig_id', right_on='contig_id', how='left') + subset_df = pd.merge(subset_tool, subset_taxa, on='contig_id', how='left') # cleanup the table columnsremove = ['sample_id_y'] subset_df.drop(columnsremove, axis=1, inplace=True) subset_df.rename(columns={'sample_id_x':'sample_id'},inplace=True) # append in the combined_df - merged_df = merged_df.append(subset_df, ignore_index=True) + combined_dfs.append(subset_df) + merged_df = pd.concat(combined_dfs, ignore_index=True) # write to file merged_df.to_csv('combgc_complete_summary_taxonomy.tsv', sep='\t', index=False) @@ -176,8 +205,21 @@ def combgc_taxa(args): ######################################### # FUNCTION: HAMRONIZATION ######################################### +# TODO : FIX THE MERGING in ARG pipeline def hamronization_taxa(args): - merged_df = pd.DataFrame() + """_summary_ + Merges Hamronization tool output with taxonomy information. + + Parameters: + ---------- + args: + Contains arguments for hamronization file path (`arg`) and list of taxonomy file paths (`taxa2`). + + Outputs: + ------- + Creates a file named `hamronization_complete_summary_taxonomy.tsv` containing the merged results. + """ + combined_dfs = [] # assign input args to variables hamronization = args.arg @@ -197,29 +239,46 @@ def hamronization_taxa(args): # reorder the columns new_order = ['sample_id', 'contig_id'] + [col for col in tool_df.columns if col not in ['sample_id', 'contig_id']] tool_df = tool_df.reindex(columns=new_order) - # grab the real contig id in another column copy for merging - tool_df['contig_id_merge'] = tool_df['contig_id'].str.rsplit('_', 1).str[0] - # merge rows from taxa to ampcombi_df based on substring match in sample_id + # merge rows from taxa to hamronization_df based on substring match in sample_id # grab the unique sample names from the taxonomy table samples_taxa = taxa_df['sample_id'].unique() # for every sampleID in taxadf merge the results for sampleID in samples_taxa: - # subset ampcombi - subset_tool = tool_df.loc[tool_df['sample_id'].str.contains(sampleID)] + # subset tool + subset_tool = tool_df[tool_df['sample_id'].str.contains(sampleID, na=False)] # subset taxa - subset_taxa = taxa_df.loc[taxa_df['sample_id'].str.contains(sampleID)] - # merge - subset_df = pd.merge(subset_tool, subset_taxa, left_on = 'contig_id_merge', right_on='contig_id', how='left') - # cleanup the table - columnsremove = ['contig_id_merge','contig_id_y', 'sample_id_y'] - subset_df.drop(columnsremove, axis=1, inplace=True) - subset_df.rename(columns={'contig_id_x': 'contig_id', 'sample_id_x':'sample_id'},inplace=True) - # append in the combined_df - merged_df = merged_df.append(subset_df, ignore_index=True) + subset_taxa = taxa_df[taxa_df['sample_id'].str.contains(sampleID, na=False)] + # ensure strings + subset_tool['contig_id'] = subset_tool['contig_id'].astype(str) + subset_taxa['contig_id'] = subset_taxa['contig_id'].astype(str) + # rename columns to avoid droping of mutual ones + rename_dict = {col: f"{col}_taxa" for col in subset_taxa.columns if col in subset_tool.columns} + subset_taxa = subset_taxa.rename(columns=rename_dict) + + # merge by string + merged_rows = [] + # iterate and find all matches + for _, tool_row in subset_tool.iterrows(): + tool_contig_id = tool_row['contig_id'] + matches = subset_taxa[subset_taxa['contig_id_taxa'].apply(lambda x: str(x) in tool_contig_id)] + # if match, merge row + if not matches.empty: + for _, taxa_row in matches.iterrows(): + merged_row = {**tool_row.to_dict(), **taxa_row.to_dict()} + merged_rows.append(merged_row) + else: + # if no match keep row as is + merged_row = {**tool_row.to_dict()} + merged_rows.append(merged_row) + + merged_df = pd.DataFrame(merged_rows) + combined_dfs.append(merged_df) + + merged_df_final = pd.concat(combined_dfs, ignore_index=True) # write to file - merged_df.to_csv('hamronization_complete_summary_taxonomy.tsv', sep='\t', index=False) + merged_df_final.to_csv('hamronization_complete_summary_taxonomy.tsv', sep='\t', index=False) ######################################### # SUBPARSERS: DEFAULT From e7630e81549c84366369f22de50b0d2339040beb Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Fri, 10 Jan 2025 09:18:55 +0100 Subject: [PATCH 067/175] fix ARG TABIX output file name --- conf/modules.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/modules.config b/conf/modules.config index d4e473d2..7999b58a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -534,6 +534,7 @@ process { } withName: ARG_TABIX_BGZIP { + ext.prefix = { "hamronization_complete_summary_taxonomy" } publishDir = [ path: { "${params.outdir}/reports/hamronization_summarize" }, mode: params.publish_dir_mode, From 681906c42e4e934060183cbf62ffc1d181c34421 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Fri, 10 Jan 2025 09:31:03 +0100 Subject: [PATCH 068/175] fix output declaration for args --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 0920236c..686ef2dc 100644 --- a/docs/output.md +++ b/docs/output.md @@ -522,7 +522,7 @@ Note that filtered FASTA is only used for BGC workflow for run-time optimisation - `hamronization_summarize/` one of the following: - `hamronization_combined_report.json`: summarised output in .json format - `hamronization_combined_report.tsv`: summarised output in .tsv format when the taxonomic classification is turned off (pipeline default). - - `hamronization_combined_report.tsv.gz`: summarised output in gzipped format when the taxonomic classification is turned on by `--run_taxa_classification`. + - `hamronization_complete_summary_taxonomy.tsv.gz`: summarised output in gzipped format when the taxonomic classification is turned on by `--run_taxa_classification`. - `hamronization_combined_report.html`: interactive output in .html format
From a039619bcac5a901df190885f92c693f5ea0ccbd Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Fri, 10 Jan 2025 09:39:08 +0100 Subject: [PATCH 069/175] update CHANGELOG --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a27c12d3..9227c5b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#427](https://github.com/nf-core/funcscan/pull/427) Fixed the AMP reference database issues reported by users, due to non-ASCII characters. (by @darcy220606) - [#430](https://github.com/nf-core/funcscan/pull/430) Updated `rgi/main` module to fix incorrect variable name. (by @amizeranschi and @jasmezz) +- [#435](https://github.com/nf-core/funcscan/pull/435) Fixed dependency errors within taxonomy merging scripts and updated the code and output for all three workflows. Bumped to version 0.1.1. (by @darcy220606) ### `Dependencies` @@ -24,6 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | Macrel | 1.2.0 | 1.4.0 | | MultiQC | 1.24.0 | 1.25.1 | + ### `Deprecated` ## v2.0.0 - [2024-09-05] From 35423f435200889ae2ccb4fab1b2bde9b767c1be Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Fri, 10 Jan 2025 10:03:17 +0100 Subject: [PATCH 070/175] fix linting --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9227c5b1..84df40b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | Macrel | 1.2.0 | 1.4.0 | | MultiQC | 1.24.0 | 1.25.1 | - ### `Deprecated` ## v2.0.0 - [2024-09-05] From 11a07ca24739d830d63014a08ce2df2a8db042c2 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Fri, 10 Jan 2025 11:28:24 +0100 Subject: [PATCH 071/175] update nf tests --- tests/test_taxonomy_bakta.nf.test | 2 +- tests/test_taxonomy_prokka.nf.test | 2 +- tests/test_taxonomy_pyrodigal.nf.test | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_taxonomy_bakta.nf.test b/tests/test_taxonomy_bakta.nf.test index 6498c4bd..5f076d29 100644 --- a/tests/test_taxonomy_bakta.nf.test +++ b/tests/test_taxonomy_bakta.nf.test @@ -79,7 +79,7 @@ nextflow_pipeline { ).match("fargene") }, // hAMRonization - { assert new File("$outputDir/reports/hamronization_summarize/hamronization_combined_report.tsv.gz").exists() }, + { assert new File("$outputDir/reports/hamronization_summarize/hamronization_complete_summary_taxonomy.tsv.gz").exists() }, // antiSMASH { assert snapshot ( diff --git a/tests/test_taxonomy_prokka.nf.test b/tests/test_taxonomy_prokka.nf.test index 0628508a..64c67b4a 100644 --- a/tests/test_taxonomy_prokka.nf.test +++ b/tests/test_taxonomy_prokka.nf.test @@ -79,7 +79,7 @@ nextflow_pipeline { ).match("fargene") }, // hAMRonization - { assert new File("$outputDir/reports/hamronization_summarize/hamronization_combined_report.tsv.gz").exists() }, + { assert new File("$outputDir/reports/hamronization_summarize/hamronization_complete_summary_taxonomy.tsv.gz").exists() }, // antiSMASH { assert snapshot ( diff --git a/tests/test_taxonomy_pyrodigal.nf.test b/tests/test_taxonomy_pyrodigal.nf.test index 8f325fc0..f0dc1012 100644 --- a/tests/test_taxonomy_pyrodigal.nf.test +++ b/tests/test_taxonomy_pyrodigal.nf.test @@ -79,7 +79,7 @@ nextflow_pipeline { ).match("fargene") }, // hAMRonization - { assert new File("$outputDir/reports/hamronization_summarize/hamronization_combined_report.tsv.gz").exists() }, + { assert new File("$outputDir/reports/hamronization_summarize/hamronization_complete_summary_taxonomy.tsv.gz").exists() }, // antiSMASH { assert snapshot ( From 3027027c706dce3190f63c276bdd7eb0c3c441e9 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Fri, 10 Jan 2025 12:41:06 +0000 Subject: [PATCH 072/175] [automated] Fix code linting --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d100d045..fc20be57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#429](https://github.com/nf-core/funcscan/pull/429) Updated to nf-core template 3.1.0. (by @jfy133 and @jasmezz) - [#433](https://github.com/nf-core/funcscan/pull/433) Updated to nf-core template 3.1.0. (by @jfy133) - ### `Fixed` - [#427](https://github.com/nf-core/funcscan/pull/427) Fixed the AMP reference database issues reported by users, due to non-ASCII characters. (by @darcy220606) From 9cf137e5a1941008e59c3b27fe9d252944a852c5 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Fri, 10 Jan 2025 14:06:17 +0100 Subject: [PATCH 073/175] Fix linting --- README.md | 1 + assets/multiqc_config.yml | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4a8f918d..3ca22f87 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ nf-core/funcscan + [![GitHub Actions CI Status](https://github.com/nf-core/funcscan/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/ci.yml) [![GitHub Actions Linting Status](https://github.com/nf-core/funcscan/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/funcscan/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.7643099-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.7643099) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 5471c44d..45ddd48c 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,7 @@ report_comment: > - This report has been generated by the nf-core/funcscan + This report has been generated by the nf-core/funcscan analysis pipeline. For information about how to interpret these results, please see the - documentation. + documentation. report_section_order: "nf-core-funcscan-methods-description": order: -1000 From e9e9ee2c9dd3e1ffe6628eb14f0522d6d5cd4e0f Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Fri, 10 Jan 2025 14:09:21 +0100 Subject: [PATCH 074/175] Annoy linting --- .editorconfig | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.editorconfig b/.editorconfig index 6d9b74cc..6cf8d1cd 100644 --- a/.editorconfig +++ b/.editorconfig @@ -35,3 +35,8 @@ indent_style = unset # ignore ro-crate metadata files [**/ro-crate-metadata.json] insert_final_newline = unset + + + + + From 5881d5b2eb10c1220faeb5a8dad00a5cda1d8a5e Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Fri, 10 Jan 2025 14:10:09 +0100 Subject: [PATCH 075/175] Fix linting --- .editorconfig | 5 ----- .prettierignore | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/.editorconfig b/.editorconfig index 6cf8d1cd..6d9b74cc 100644 --- a/.editorconfig +++ b/.editorconfig @@ -35,8 +35,3 @@ indent_style = unset # ignore ro-crate metadata files [**/ro-crate-metadata.json] insert_final_newline = unset - - - - - diff --git a/.prettierignore b/.prettierignore index d8554674..f6400d75 100644 --- a/.prettierignore +++ b/.prettierignore @@ -11,4 +11,4 @@ testing* *.pyc bin/ ro-crate-metadata.json -tests/ \ No newline at end of file +tests/ From 218ac6760b65918ce3e84c52d395a3dbf701bd6e Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Fri, 10 Jan 2025 14:14:36 +0100 Subject: [PATCH 076/175] Try satisfying nf-core linting on PR.md --- .github/PULL_REQUEST_TEMPLATE.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 565c77f8..27301150 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,22 +1,22 @@ ## 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/nf-core/funcscan/tree/main/.github/CONTRIBUTING.md) -- [ ] If necessary, also make a PR on the nf-core/funcscan _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. +- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/funcscan/tree/master/.github/CONTRIBUTING.md) +- [ ] If necessary, also make a PR on the funcscan _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] 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 88186e2e0cb72eac40c5efb5edd8c9b73d19e900 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Fri, 10 Jan 2025 13:18:56 +0000 Subject: [PATCH 077/175] Fix PR request template --- .github/PULL_REQUEST_TEMPLATE.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 27301150..b6e5cebd 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,22 +1,22 @@ ## 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/funcscan/tree/master/.github/CONTRIBUTING.md) -- [ ] If necessary, also make a PR on the funcscan _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. +- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/funcscan/tree/master/.github/CONTRIBUTING.md) +- [ ] If necessary, also make a PR on the nf-core/funcscan _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] 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 374cf4124139f4b82754dc654487c3607e6f452e Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Fri, 10 Jan 2025 14:37:08 +0100 Subject: [PATCH 078/175] Apply suggestions from code review --- CHANGELOG.md | 2 +- README.md | 2 +- assets/schema_input.json | 2 +- ro-crate-metadata.json | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc20be57..02fa7794 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#421](https://github.com/nf-core/funcscan/pull/421) Updated to nf-core template 3.0.2. (by @jfy133) - [#427](https://github.com/nf-core/funcscan/pull/427) AMPcombi now can use multiple other databases for classifications. (by @darcy220606) - [#429](https://github.com/nf-core/funcscan/pull/429) Updated to nf-core template 3.1.0. (by @jfy133 and @jasmezz) -- [#433](https://github.com/nf-core/funcscan/pull/433) Updated to nf-core template 3.1.0. (by @jfy133) +- [#433](https://github.com/nf-core/funcscan/pull/433) Updated to nf-core template 3.1.1. (by @jfy133) ### `Fixed` diff --git a/README.md b/README.md index 3ca22f87..7753440d 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ The nf-core/funcscan AWS full test dataset are contigs generated by the MGnify s ## Usage > [!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. +> 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. First, prepare a samplesheet with your input data that looks as follows: diff --git a/assets/schema_input.json b/assets/schema_input.json index b12a50a1..c13fd75e 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/nf-core/funcscan/main/assets/schema_input.json", + "$id": "https://raw.githubusercontent.com/nf-core/funcscan/master/assets/schema_input.json", "title": "nf-core/funcscan pipeline - params.input schema", "description": "Schema for the file provided with params.input", "type": "array", diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 3f67007a..4c4c1f22 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -167,10 +167,10 @@ }, "url": [ "https://github.com/nf-core/funcscan", - "https://nf-co.re/funcscan/2.0.0/" + "https://nf-co.re/funcscan/2.1.0dev/" ], "version": [ - "2.0.0" + "2.1.0dev" ] }, { From d9908f465f33d8c5af058ba02e27f4f788fe2133 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 15 Jan 2025 08:51:38 +0100 Subject: [PATCH 079/175] Apply suggestions from code review --- nextflow.config | 4 ++-- nextflow_schema.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/nextflow.config b/nextflow.config index 3a979f16..8a700a13 100644 --- a/nextflow.config +++ b/nextflow.config @@ -515,7 +515,7 @@ manifest { homePage = 'https://github.com/nf-core/funcscan' description = """Pipeline for screening for functional components of assembled contigs""" mainScript = 'main.nf' - defaultBranch = 'main' + defaultBranch = 'master' nextflowVersion = '!>=24.04.2' version = '2.1.0dev' doi = '10.5281/zenodo.7643099' @@ -549,7 +549,7 @@ validation { https://doi.org/10.1038/s41587-020-0439-x * Software dependencies - https://github.com/nf-core/funcscan/blob/main/CITATIONS.md + https://github.com/nf-core/funcscan/blob/master/CITATIONS.md """ } summary { diff --git a/nextflow_schema.json b/nextflow_schema.json index 5a3c59c5..4ba539bd 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/nf-core/funcscan/main/nextflow_schema.json", + "$id": "https://raw.githubusercontent.com/nf-core/funcscan/master/nextflow_schema.json", "title": "nf-core/funcscan pipeline parameters", "description": "Pipeline for screening for functional components of assembled contigs", "type": "object", From f7fe3411ee03c82ca648329b3e598dc2c7563b01 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Wed, 15 Jan 2025 11:46:07 +0100 Subject: [PATCH 080/175] Update mmseqs to v16, update multiqc to v 1.26 [skip ci] --- modules.json | 12 +- .../nf-core/ampcombi2/parsetables/meta.yml | 1 - .../ampcombi2/parsetables/tests/tags.yml | 2 + modules/nf-core/bakta/bakta/meta.yml | 4 +- .../nf-core/mmseqs/createdb/environment.yml | 2 +- modules/nf-core/mmseqs/createdb/main.nf | 4 +- .../mmseqs/createdb/mmseqs-createdb.diff | 1 - .../mmseqs/createdb/tests/main.nf.test.snap | 16 +- .../nf-core/mmseqs/createdb/tests/tags.yml | 2 - .../nf-core/mmseqs/createtsv/environment.yml | 2 +- modules/nf-core/mmseqs/createtsv/main.nf | 4 +- .../mmseqs/createtsv/mmseqs-createtsv.diff | 1 - .../mmseqs/createtsv/tests/main.nf.test.snap | 40 +-- .../nf-core/mmseqs/createtsv/tests/tags.yml | 2 - .../nf-core/mmseqs/databases/environment.yml | 2 +- modules/nf-core/mmseqs/databases/main.nf | 4 +- .../mmseqs/databases/tests/main.nf.test.snap | 8 +- modules/nf-core/multiqc/environment.yml | 2 +- modules/nf-core/multiqc/main.nf | 4 +- .../nf-core/multiqc/tests/main.nf.test.snap | 6 +- .../nf-core/prokka/tests/main.nf.test.snap | 326 ++++++++++++++++++ 21 files changed, 383 insertions(+), 62 deletions(-) create mode 100644 modules/nf-core/ampcombi2/parsetables/tests/tags.yml delete mode 100644 modules/nf-core/mmseqs/createdb/tests/tags.yml delete mode 100644 modules/nf-core/mmseqs/createtsv/tests/tags.yml diff --git a/modules.json b/modules.json index e31f87a2..e7212f74 100644 --- a/modules.json +++ b/modules.json @@ -22,7 +22,7 @@ }, "ampcombi2/parsetables": { "branch": "master", - "git_sha": "993865fe60cb1569155fbbbe0cee113e1127abaf", + "git_sha": "0e9cb409c32d3ec4f0d3804588e4778971c09b7e", "installed_by": ["modules"] }, "ampir": { @@ -62,7 +62,7 @@ }, "bakta/bakta": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "0e9cb409c32d3ec4f0d3804588e4778971c09b7e", "installed_by": ["modules"] }, "bakta/baktadbdownload": { @@ -147,19 +147,19 @@ }, "mmseqs/createdb": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff" }, "mmseqs/createtsv": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff" }, "mmseqs/databases": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/databases/mmseqs-databases.diff" }, @@ -171,7 +171,7 @@ }, "multiqc": { "branch": "master", - "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", + "git_sha": "f80914f78fb7fa1c00b14cfeb29575ee12240d9c", "installed_by": ["modules"] }, "prodigal": { diff --git a/modules/nf-core/ampcombi2/parsetables/meta.yml b/modules/nf-core/ampcombi2/parsetables/meta.yml index 14a0fd02..a8d1a4f7 100644 --- a/modules/nf-core/ampcombi2/parsetables/meta.yml +++ b/modules/nf-core/ampcombi2/parsetables/meta.yml @@ -176,7 +176,6 @@ output: - amp_${opt_amp_db}_database/*.fasta: type: file description: AMP reference database fasta file in clean format. - characters. pattern: "/amp_*_database/*.fasta" - db_mmseqs: - meta: diff --git a/modules/nf-core/ampcombi2/parsetables/tests/tags.yml b/modules/nf-core/ampcombi2/parsetables/tests/tags.yml new file mode 100644 index 00000000..b56b0468 --- /dev/null +++ b/modules/nf-core/ampcombi2/parsetables/tests/tags.yml @@ -0,0 +1,2 @@ +ampcombi2/parsetables: + - "modules/nf-core/ampcombi2/parsetables/**" diff --git a/modules/nf-core/bakta/bakta/meta.yml b/modules/nf-core/bakta/bakta/meta.yml index f947e61b..7d734f28 100644 --- a/modules/nf-core/bakta/bakta/meta.yml +++ b/modules/nf-core/bakta/bakta/meta.yml @@ -103,7 +103,7 @@ output: - ${prefix}.hypotheticals.tsv: type: file description: additional information on hypothetical protein CDS as simple human - readble tab separated values + readable tab separated values pattern: "*.hypotheticals.tsv" - hypotheticals_faa: - meta: @@ -123,7 +123,7 @@ output: e.g. [ id:'test', single_end:false ] - ${prefix}.tsv: type: file - description: annotations as simple human readble tab separated values + description: annotations as simple human readable tab separated values pattern: "*.tsv" - txt: - meta: diff --git a/modules/nf-core/mmseqs/createdb/environment.yml b/modules/nf-core/mmseqs/createdb/environment.yml index 18547591..235ad03a 100644 --- a/modules/nf-core/mmseqs/createdb/environment.yml +++ b/modules/nf-core/mmseqs/createdb/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=15.6f452 + - bioconda::mmseqs2=16.747c6 diff --git a/modules/nf-core/mmseqs/createdb/main.nf b/modules/nf-core/mmseqs/createdb/main.nf index b7ac14c2..ef113068 100644 --- a/modules/nf-core/mmseqs/createdb/main.nf +++ b/modules/nf-core/mmseqs/createdb/main.nf @@ -4,8 +4,8 @@ process MMSEQS_CREATEDB { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" input: tuple val(meta), path(sequence) diff --git a/modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff b/modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff index 2c18d816..6f322142 100644 --- a/modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff +++ b/modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff @@ -16,6 +16,5 @@ Changes in 'mmseqs/createdb/main.nf': 'modules/nf-core/mmseqs/createdb/environment.yml' is unchanged 'modules/nf-core/mmseqs/createdb/tests/main.nf.test' is unchanged -'modules/nf-core/mmseqs/createdb/tests/tags.yml' is unchanged 'modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap' is unchanged ************************************************************ diff --git a/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap b/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap index a24c4118..92f1e6d8 100644 --- a/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap @@ -20,14 +20,14 @@ ] ], [ - "versions.yml:md5,e644cbe263d4560298438a24f268eb6f" + "versions.yml:md5,d30a1af41e7f3f5b67afdec412fa693f" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-08-09T10:01:44.163384" + "timestamp": "2024-12-05T10:35:27.322864475" }, "Should build an mmseqs db from a zipped amino acid sequence file": { "content": [ @@ -49,13 +49,13 @@ ] ], [ - "versions.yml:md5,e644cbe263d4560298438a24f268eb6f" + "versions.yml:md5,d30a1af41e7f3f5b67afdec412fa693f" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-08-09T10:01:48.894044" + "timestamp": "2024-12-05T10:35:33.418552595" } } \ No newline at end of file diff --git a/modules/nf-core/mmseqs/createdb/tests/tags.yml b/modules/nf-core/mmseqs/createdb/tests/tags.yml deleted file mode 100644 index 1f511ab0..00000000 --- a/modules/nf-core/mmseqs/createdb/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -mmseqs/createdb: - - modules/nf-core/mmseqs/createdb/** diff --git a/modules/nf-core/mmseqs/createtsv/environment.yml b/modules/nf-core/mmseqs/createtsv/environment.yml index 18547591..235ad03a 100644 --- a/modules/nf-core/mmseqs/createtsv/environment.yml +++ b/modules/nf-core/mmseqs/createtsv/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=15.6f452 + - bioconda::mmseqs2=16.747c6 diff --git a/modules/nf-core/mmseqs/createtsv/main.nf b/modules/nf-core/mmseqs/createtsv/main.nf index 12d118ef..8fde5767 100644 --- a/modules/nf-core/mmseqs/createtsv/main.nf +++ b/modules/nf-core/mmseqs/createtsv/main.nf @@ -5,8 +5,8 @@ process MMSEQS_CREATETSV { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" input: tuple val(meta), path(db_result) diff --git a/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff index 4ccd6846..630628d1 100644 --- a/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff +++ b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff @@ -18,6 +18,5 @@ Changes in 'mmseqs/createtsv/main.nf': 'modules/nf-core/mmseqs/createtsv/tests/main.nf.test' is unchanged 'modules/nf-core/mmseqs/createtsv/tests/cluster.nextflow.config' is unchanged 'modules/nf-core/mmseqs/createtsv/tests/taxonomy.nextflow.config' is unchanged -'modules/nf-core/mmseqs/createtsv/tests/tags.yml' is unchanged 'modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap' is unchanged ************************************************************ diff --git a/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap b/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap index 1087de88..6192fa16 100644 --- a/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap @@ -12,7 +12,7 @@ ] ], "1": [ - "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" ], "tsv": [ [ @@ -24,15 +24,15 @@ ] ], "versions": [ - "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-07-12T13:55:17.642787" + "timestamp": "2024-12-05T10:50:48.386202112" }, "mmseqs/createtsv - sarscov2 - cluster - stub": { "content": [ @@ -47,7 +47,7 @@ ] ], "1": [ - "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" ], "tsv": [ [ @@ -59,15 +59,15 @@ ] ], "versions": [ - "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-07-12T13:55:33.645454" + "timestamp": "2024-12-05T10:50:56.33475153" }, "mmseqs/createtsv - bacteroides_fragilis - taxonomy": { "content": [ @@ -82,7 +82,7 @@ ] ], "1": [ - "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" ], "tsv": [ [ @@ -94,15 +94,15 @@ ] ], "versions": [ - "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-07-12T13:54:45.718678" + "timestamp": "2024-12-05T11:25:54.741775111" }, "mmseqs/createtsv - sarscov2 - cluster": { "content": [ @@ -117,7 +117,7 @@ ] ], "1": [ - "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" ], "tsv": [ [ @@ -129,14 +129,14 @@ ] ], "versions": [ - "versions.yml:md5,20a853f50c920d431e5ab7593ca79e6f" + "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-07-12T13:55:02.731974" + "timestamp": "2024-12-05T10:50:42.432284995" } } \ No newline at end of file diff --git a/modules/nf-core/mmseqs/createtsv/tests/tags.yml b/modules/nf-core/mmseqs/createtsv/tests/tags.yml deleted file mode 100644 index e27827f5..00000000 --- a/modules/nf-core/mmseqs/createtsv/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -mmseqs/createtsv: - - "modules/nf-core/mmseqs/createtsv/**" diff --git a/modules/nf-core/mmseqs/databases/environment.yml b/modules/nf-core/mmseqs/databases/environment.yml index 18547591..235ad03a 100644 --- a/modules/nf-core/mmseqs/databases/environment.yml +++ b/modules/nf-core/mmseqs/databases/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=15.6f452 + - bioconda::mmseqs2=16.747c6 diff --git a/modules/nf-core/mmseqs/databases/main.nf b/modules/nf-core/mmseqs/databases/main.nf index ef38eed9..8f94eac5 100644 --- a/modules/nf-core/mmseqs/databases/main.nf +++ b/modules/nf-core/mmseqs/databases/main.nf @@ -4,8 +4,8 @@ process MMSEQS_DATABASES { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" input: val database diff --git a/modules/nf-core/mmseqs/databases/tests/main.nf.test.snap b/modules/nf-core/mmseqs/databases/tests/main.nf.test.snap index 00d3003e..b3d0b9f7 100644 --- a/modules/nf-core/mmseqs/databases/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/databases/tests/main.nf.test.snap @@ -15,14 +15,14 @@ "database_taxonomy" ], [ - "versions.yml:md5,b038db45e5934b8f0f743449bbac01b4" + "versions.yml:md5,e236ec16fdc9f054d0a660d02e680255" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.2" }, - "timestamp": "2024-09-06T15:43:58.454012" + "timestamp": "2024-12-05T14:33:16.697954954" }, "test-mmseqs-databases-stub": { "content": [ diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index 6f5b867b..439a7c22 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.26 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index cc0643e1..775b3ffd 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.26--pyhdfd78af_0' : + 'biocontainers/multiqc:1.26--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..ee01208e 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -2,7 +2,7 @@ "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" + "versions.yml:md5,4cab99fb04e679fd2d72e29eda1b9646" ] ], "meta": { @@ -17,7 +17,7 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" + "versions.yml:md5,4cab99fb04e679fd2d72e29eda1b9646" ] ], "meta": { @@ -29,7 +29,7 @@ "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" + "versions.yml:md5,4cab99fb04e679fd2d72e29eda1b9646" ] ], "meta": { diff --git a/modules/nf-core/prokka/tests/main.nf.test.snap b/modules/nf-core/prokka/tests/main.nf.test.snap index 874c989d..35713a8f 100644 --- a/modules/nf-core/prokka/tests/main.nf.test.snap +++ b/modules/nf-core/prokka/tests/main.nf.test.snap @@ -91,5 +91,331 @@ "nextflow": "24.04.3" }, "timestamp": "2024-07-30T12:34:20.447734" + }, + "Prokka - sarscov2 - genome.fasta.gz": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.gff:md5,5dbfb8fcf2db020564c16045976a0933" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fna:md5,787307f29a263e5657cc276ebbf7e2b3" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.faa:md5,a4ceda83262b3c222a6b1f508fb9e24b" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.ffn:md5,80f474b5367b7ea5ed23791935f65e34" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fsa:md5,71bbefcb7f12046bcd3263f58cfd5404" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.tbl:md5,d8f816a066ced94b62d9618b13fb8add" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.err:md5,b3daedc646fddd422824e2b3e5e9229d" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.txt:md5,b40e485ffc8eaf1feacf8d79d9751a33" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,da7c720c3018c5081d6a70b517b7d450" + ] + ], + [ + "versions.yml:md5,e83a22fe02167e290d90853b45650db9" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.3" + }, + "timestamp": "2024-12-19T09:48:05.110188714" + }, + "Prokka - sarscov2 - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gbk:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + "versions.yml:md5,e83a22fe02167e290d90853b45650db9" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fna:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.faa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ffn:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sqn:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fsa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tbl:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + "test.err:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "err": [ + [ + { + "id": "test", + "single_end": false + }, + "test.err:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "faa": [ + [ + { + "id": "test", + "single_end": false + }, + "test.faa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "ffn": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ffn:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fna": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fna:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fsa": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fsa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gbk": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gbk:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gff": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sqn": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sqn:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbl": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tbl:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tsv": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "txt": [ + [ + { + "id": "test", + "single_end": false + }, + "test.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e83a22fe02167e290d90853b45650db9" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.3" + }, + "timestamp": "2025-01-06T10:51:57.362187225" } } \ No newline at end of file From cbb2bc39b30ccf387b1dd0b2fff5c9d02be49ccb Mon Sep 17 00:00:00 2001 From: jasmezz Date: Wed, 15 Jan 2025 11:50:59 +0100 Subject: [PATCH 081/175] Update changelog [skip ci] --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b0f14b1..d1bbc110 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | --------- | ---------------- | ----------- | | AMPcombi | 0.2.2 | 2.0.1 | | Macrel | 1.2.0 | 1.4.0 | -| MultiQC | 1.24.0 | 1.25.1 | +| MMseqs2 | 15.6f452 | 16.747c6 | +| MultiQC | 1.24.0 | 1.26 | | Pyrodigal | 3.3.0 | 3.6.3 | ### `Deprecated` @@ -103,7 +104,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | GECCO | 0.9.8 | 0.9.10 | | hAMRonization | 1.1.1 | 1.1.4 | | HMMER | 3.3.2 | 3.4 | -| MMSeqs | NA | 2:15.6f452 | +| MMseqs2 | NA | 15.6f452 | | MultiQC | 1.15 | 1.24 | | Pyrodigal | 2.1.0 | 3.3.0 | | RGI | 5.2.1 | 6.0.3 | From 0637ebfdf37e840fd76a74b5c95b08df94747aad Mon Sep 17 00:00:00 2001 From: jasmezz Date: Wed, 15 Jan 2025 12:02:13 +0100 Subject: [PATCH 082/175] Patch mmseqs/createtsv --- modules/nf-core/mmseqs/createtsv/main.nf | 6 +++--- .../nf-core/mmseqs/createtsv/mmseqs-createtsv.diff | 13 +++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/modules/nf-core/mmseqs/createtsv/main.nf b/modules/nf-core/mmseqs/createtsv/main.nf index 8fde5767..b41b5c54 100644 --- a/modules/nf-core/mmseqs/createtsv/main.nf +++ b/modules/nf-core/mmseqs/createtsv/main.nf @@ -22,9 +22,9 @@ process MMSEQS_CREATETSV { script: def args = task.ext.args ?: '' - def args2 = task.ext.args ?: "*.dbtype" // database generated by mmyseqs cluster | search | taxonomy | ... - def args3 = task.ext.args ?: "*.dbtype" // database generated by mmyseqs/createdb - def args4 = task.ext.args ?: "*.dbtype" // database generated by mmyseqs/createdb + def args2 = task.ext.args2 ?: "*.dbtype" // database generated by mmyseqs cluster | search | taxonomy | ... + def args3 = task.ext.args3 ?: "*.dbtype" // database generated by mmyseqs/createdb + def args4 = task.ext.args4 ?: "*.dbtype" // database generated by mmyseqs/createdb def prefix = task.ext.prefix ?: "${meta.id}" """ diff --git a/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff index 630628d1..8ba3acc8 100644 --- a/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff +++ b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff @@ -3,6 +3,19 @@ Changes in module 'nf-core/mmseqs/createtsv' Changes in 'mmseqs/createtsv/main.nf': --- modules/nf-core/mmseqs/createtsv/main.nf +++ modules/nf-core/mmseqs/createtsv/main.nf +@@ -22,9 +22,9 @@ + + script: + def args = task.ext.args ?: '' +- def args2 = task.ext.args ?: "*.dbtype" // database generated by mmyseqs cluster | search | taxonomy | ... +- def args3 = task.ext.args ?: "*.dbtype" // database generated by mmyseqs/createdb +- def args4 = task.ext.args ?: "*.dbtype" // database generated by mmyseqs/createdb ++ def args2 = task.ext.args2 ?: "*.dbtype" // database generated by mmyseqs cluster | search | taxonomy | ... ++ def args3 = task.ext.args3 ?: "*.dbtype" // database generated by mmyseqs/createdb ++ def args4 = task.ext.args4 ?: "*.dbtype" // database generated by mmyseqs/createdb + def prefix = task.ext.prefix ?: "${meta.id}" + + """ @@ -40,8 +40,7 @@ \$DB_RESULT_PATH_NAME \\ ${prefix}.tsv \\ From 0e1e426972b430693431adc56d6a3c753bb9d741 Mon Sep 17 00:00:00 2001 From: Anan Ibrahim <81744003+Darcy220606@users.noreply.github.com> Date: Wed, 15 Jan 2025 13:27:35 +0100 Subject: [PATCH 083/175] Update bin/merge_taxonomy.py Co-authored-by: Jasmin Frangenberg <73216762+jasmezz@users.noreply.github.com> --- bin/merge_taxonomy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/merge_taxonomy.py b/bin/merge_taxonomy.py index d492e4b4..b3a4aa6b 100755 --- a/bin/merge_taxonomy.py +++ b/bin/merge_taxonomy.py @@ -73,7 +73,7 @@ def reformat_mmseqs_taxonomy(mmseqs_taxonomy): mmseqs_taxonomy (tsv): mmseqs output file per sample Returns: - data frame: reformated tables + data frame: reformatted tables """ mmseqs2_df = pd.read_csv(mmseqs_taxonomy, sep='\t', header=None, names=['contig_id', 'taxid', 'rank_label', 'scientific_name', 'lineage', 'mmseqs_lineage_contig']) # remove the lineage column From 8101fab9ba40054c53938f07a5dab3301034ad6b Mon Sep 17 00:00:00 2001 From: Anan Ibrahim <81744003+Darcy220606@users.noreply.github.com> Date: Wed, 15 Jan 2025 13:27:52 +0100 Subject: [PATCH 084/175] Update bin/merge_taxonomy.py Co-authored-by: Jasmin Frangenberg <73216762+jasmezz@users.noreply.github.com> --- bin/merge_taxonomy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/merge_taxonomy.py b/bin/merge_taxonomy.py index b3a4aa6b..49a9a970 100755 --- a/bin/merge_taxonomy.py +++ b/bin/merge_taxonomy.py @@ -208,7 +208,7 @@ def combgc_taxa(args): # TODO : FIX THE MERGING in ARG pipeline def hamronization_taxa(args): """_summary_ - Merges Hamronization tool output with taxonomy information. + Merges hAMRonization tool output with taxonomy information. Parameters: ---------- From 727215308a2ccc18099eb7f66993c01c7c1e6eee Mon Sep 17 00:00:00 2001 From: Anan Ibrahim <81744003+Darcy220606@users.noreply.github.com> Date: Wed, 15 Jan 2025 13:28:15 +0100 Subject: [PATCH 085/175] Update CHANGELOG.md Co-authored-by: Jasmin Frangenberg <73216762+jasmezz@users.noreply.github.com> --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 84df40b8..89c3fb0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#427](https://github.com/nf-core/funcscan/pull/427) Fixed the AMP reference database issues reported by users, due to non-ASCII characters. (by @darcy220606) - [#430](https://github.com/nf-core/funcscan/pull/430) Updated `rgi/main` module to fix incorrect variable name. (by @amizeranschi and @jasmezz) -- [#435](https://github.com/nf-core/funcscan/pull/435) Fixed dependency errors within taxonomy merging scripts and updated the code and output for all three workflows. Bumped to version 0.1.1. (by @darcy220606) +- [#435](https://github.com/nf-core/funcscan/pull/435) Fixed dependency errors within taxonomy merging scripts, updated the code and output for all three workflows. Bumped to version 0.1.1. (by @darcy220606) ### `Dependencies` From 10d9504425186f89aeffca2e33bbc2c6f7b0d990 Mon Sep 17 00:00:00 2001 From: Anan Ibrahim <81744003+Darcy220606@users.noreply.github.com> Date: Wed, 15 Jan 2025 13:28:33 +0100 Subject: [PATCH 086/175] Update bin/merge_taxonomy.py Co-authored-by: Jasmin Frangenberg <73216762+jasmezz@users.noreply.github.com> --- bin/merge_taxonomy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/merge_taxonomy.py b/bin/merge_taxonomy.py index 49a9a970..ead506e5 100755 --- a/bin/merge_taxonomy.py +++ b/bin/merge_taxonomy.py @@ -252,7 +252,7 @@ def hamronization_taxa(args): # ensure strings subset_tool['contig_id'] = subset_tool['contig_id'].astype(str) subset_taxa['contig_id'] = subset_taxa['contig_id'].astype(str) - # rename columns to avoid droping of mutual ones + # rename columns to avoid dropping of mutual ones rename_dict = {col: f"{col}_taxa" for col in subset_taxa.columns if col in subset_tool.columns} subset_taxa = subset_taxa.rename(columns=rename_dict) From eec773883aa97e0bc8871fc669d4bfc6a2c875a6 Mon Sep 17 00:00:00 2001 From: Anan Ibrahim <81744003+Darcy220606@users.noreply.github.com> Date: Wed, 15 Jan 2025 13:29:26 +0100 Subject: [PATCH 087/175] Update merge_taxonomy.py --- bin/merge_taxonomy.py | 1 - 1 file changed, 1 deletion(-) diff --git a/bin/merge_taxonomy.py b/bin/merge_taxonomy.py index ead506e5..d202bcbf 100755 --- a/bin/merge_taxonomy.py +++ b/bin/merge_taxonomy.py @@ -205,7 +205,6 @@ def combgc_taxa(args): ######################################### # FUNCTION: HAMRONIZATION ######################################### -# TODO : FIX THE MERGING in ARG pipeline def hamronization_taxa(args): """_summary_ Merges hAMRonization tool output with taxonomy information. From 25048e36e504491342b233584e1e7e5e7cd65dee Mon Sep 17 00:00:00 2001 From: jasmezz Date: Wed, 15 Jan 2025 14:56:22 +0100 Subject: [PATCH 088/175] Add logic to skip cardannotation --- subworkflows/local/arg.nf | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/arg.nf b/subworkflows/local/arg.nf index 81dffb72..f633a093 100644 --- a/subworkflows/local/arg.nf +++ b/subworkflows/local/arg.nf @@ -107,10 +107,15 @@ workflow ARG { } - RGI_CARDANNOTATION ( rgi_db ) - ch_versions = ch_versions.mix( RGI_CARDANNOTATION.out.versions ) + if (! rgi_db.contains("card_database_processed") ) { + RGI_CARDANNOTATION ( rgi_db ) + card = RGI_CARDANNOTATION.out.db + ch_versions = ch_versions.mix( RGI_CARDANNOTATION.out.versions ) + } else { + card = rgi_db + } - RGI_MAIN ( fastas, RGI_CARDANNOTATION.out.db, [] ) + RGI_MAIN ( fastas, card, [] ) ch_versions = ch_versions.mix( RGI_MAIN.out.versions ) // Reporting From b7a766e79875a01c6164ad08302d94fd485f99c0 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Wed, 15 Jan 2025 17:25:52 +0100 Subject: [PATCH 089/175] Remove mmseqs patches, update prokka module to include nf-test --- modules.json | 4 +- .../mmseqs/createdb/mmseqs-createdb.diff | 20 ------ .../mmseqs/createtsv/mmseqs-createtsv.diff | 35 ---------- .../mmseqs/createtsv/tests/main.nf.test.snap | 8 +-- .../mmseqs/databases/mmseqs-databases.diff | 18 ----- .../mmseqs/taxonomy/mmseqs-taxonomy.diff | 22 ------- modules/nf-core/prokka/environment.yml | 1 + modules/nf-core/prokka/main.nf | 57 ++++++++++++---- modules/nf-core/prokka/tests/main.nf.test | 65 +++++++++++++++++++ 9 files changed, 116 insertions(+), 114 deletions(-) delete mode 100644 modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff delete mode 100644 modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff delete mode 100644 modules/nf-core/mmseqs/databases/mmseqs-databases.diff delete mode 100644 modules/nf-core/mmseqs/taxonomy/mmseqs-taxonomy.diff diff --git a/modules.json b/modules.json index e7212f74..8a0b2b32 100644 --- a/modules.json +++ b/modules.json @@ -153,7 +153,7 @@ }, "mmseqs/createtsv": { "branch": "master", - "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", + "git_sha": "411a94f9cbb9219bb6ff778e5edcf95975ab28b2", "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff" }, @@ -181,7 +181,7 @@ }, "prokka": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "bcfb2f7efd4444ab442ffc8a248afbd62bca5ae7", "installed_by": ["modules"] }, "pyrodigal": { diff --git a/modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff b/modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff deleted file mode 100644 index 6f322142..00000000 --- a/modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff +++ /dev/null @@ -1,20 +0,0 @@ -Changes in module 'nf-core/mmseqs/createdb' -'modules/nf-core/mmseqs/createdb/meta.yml' is unchanged -Changes in 'mmseqs/createdb/main.nf': ---- modules/nf-core/mmseqs/createdb/main.nf -+++ modules/nf-core/mmseqs/createdb/main.nf -@@ -33,8 +33,7 @@ - createdb \\ - ${sequence_name} \\ - ${prefix}/${prefix} \\ -- $args \\ -- --compressed 1 -+ $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - -'modules/nf-core/mmseqs/createdb/environment.yml' is unchanged -'modules/nf-core/mmseqs/createdb/tests/main.nf.test' is unchanged -'modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap' is unchanged -************************************************************ diff --git a/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff deleted file mode 100644 index 8ba3acc8..00000000 --- a/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff +++ /dev/null @@ -1,35 +0,0 @@ -Changes in module 'nf-core/mmseqs/createtsv' -'modules/nf-core/mmseqs/createtsv/meta.yml' is unchanged -Changes in 'mmseqs/createtsv/main.nf': ---- modules/nf-core/mmseqs/createtsv/main.nf -+++ modules/nf-core/mmseqs/createtsv/main.nf -@@ -22,9 +22,9 @@ - - script: - def args = task.ext.args ?: '' -- def args2 = task.ext.args ?: "*.dbtype" // database generated by mmyseqs cluster | search | taxonomy | ... -- def args3 = task.ext.args ?: "*.dbtype" // database generated by mmyseqs/createdb -- def args4 = task.ext.args ?: "*.dbtype" // database generated by mmyseqs/createdb -+ def args2 = task.ext.args2 ?: "*.dbtype" // database generated by mmyseqs cluster | search | taxonomy | ... -+ def args3 = task.ext.args3 ?: "*.dbtype" // database generated by mmyseqs/createdb -+ def args4 = task.ext.args4 ?: "*.dbtype" // database generated by mmyseqs/createdb - def prefix = task.ext.prefix ?: "${meta.id}" - - """ -@@ -40,8 +40,7 @@ - \$DB_RESULT_PATH_NAME \\ - ${prefix}.tsv \\ - $args \\ -- --threads ${task.cpus} \\ -- --compressed 1 -+ --threads ${task.cpus} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - -'modules/nf-core/mmseqs/createtsv/environment.yml' is unchanged -'modules/nf-core/mmseqs/createtsv/tests/main.nf.test' is unchanged -'modules/nf-core/mmseqs/createtsv/tests/cluster.nextflow.config' is unchanged -'modules/nf-core/mmseqs/createtsv/tests/taxonomy.nextflow.config' is unchanged -'modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap' is unchanged -************************************************************ diff --git a/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap b/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap index 6192fa16..ad31aa06 100644 --- a/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap @@ -113,7 +113,7 @@ "id": "test_result", "single_end": true }, - "test_result.tsv:md5,4e7ba50ce2879660dc6595286bf0d097" + "test_result.tsv:md5,c81449fb936b76aad6f925b965e84bc5" ] ], "1": [ @@ -125,7 +125,7 @@ "id": "test_result", "single_end": true }, - "test_result.tsv:md5,4e7ba50ce2879660dc6595286bf0d097" + "test_result.tsv:md5,c81449fb936b76aad6f925b965e84bc5" ] ], "versions": [ @@ -135,8 +135,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "24.10.3" }, - "timestamp": "2024-12-05T10:50:42.432284995" + "timestamp": "2025-01-15T11:17:04.119521629" } } \ No newline at end of file diff --git a/modules/nf-core/mmseqs/databases/mmseqs-databases.diff b/modules/nf-core/mmseqs/databases/mmseqs-databases.diff deleted file mode 100644 index 6c15139e..00000000 --- a/modules/nf-core/mmseqs/databases/mmseqs-databases.diff +++ /dev/null @@ -1,18 +0,0 @@ -Changes in module 'nf-core/mmseqs/databases' -'modules/nf-core/mmseqs/databases/meta.yml' is unchanged -Changes in 'mmseqs/databases/main.nf': ---- modules/nf-core/mmseqs/databases/main.nf -+++ modules/nf-core/mmseqs/databases/main.nf -@@ -28,7 +28,6 @@ - ${prefix}/database \\ - tmp/ \\ - --threads ${task.cpus} \\ -- --compressed 1 \\ - ${args} - - cat <<-END_VERSIONS > versions.yml - -'modules/nf-core/mmseqs/databases/environment.yml' is unchanged -'modules/nf-core/mmseqs/databases/tests/main.nf.test' is unchanged -'modules/nf-core/mmseqs/databases/tests/main.nf.test.snap' is unchanged -************************************************************ diff --git a/modules/nf-core/mmseqs/taxonomy/mmseqs-taxonomy.diff b/modules/nf-core/mmseqs/taxonomy/mmseqs-taxonomy.diff deleted file mode 100644 index 687ebcee..00000000 --- a/modules/nf-core/mmseqs/taxonomy/mmseqs-taxonomy.diff +++ /dev/null @@ -1,22 +0,0 @@ -Changes in module 'nf-core/mmseqs/taxonomy' -'modules/nf-core/mmseqs/taxonomy/meta.yml' is unchanged -Changes in 'mmseqs/taxonomy/main.nf': ---- modules/nf-core/mmseqs/taxonomy/main.nf -+++ modules/nf-core/mmseqs/taxonomy/main.nf -@@ -38,8 +38,7 @@ - ${prefix}_taxonomy/${prefix} \\ - tmp1 \\ - $args \\ -- --threads ${task.cpus} \\ -- --compressed 1 -+ --threads ${task.cpus} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - -'modules/nf-core/mmseqs/taxonomy/environment.yml' is unchanged -'modules/nf-core/mmseqs/taxonomy/tests/main.nf.test' is unchanged -'modules/nf-core/mmseqs/taxonomy/tests/nextflow.config' is unchanged -'modules/nf-core/mmseqs/taxonomy/tests/tags.yml' is unchanged -'modules/nf-core/mmseqs/taxonomy/tests/main.nf.test.snap' is unchanged -************************************************************ diff --git a/modules/nf-core/prokka/environment.yml b/modules/nf-core/prokka/environment.yml index 7c9753fc..1d1a019f 100644 --- a/modules/nf-core/prokka/environment.yml +++ b/modules/nf-core/prokka/environment.yml @@ -3,3 +3,4 @@ channels: - bioconda dependencies: - bioconda::prokka=1.14.6 + - conda-forge::openjdk=8.0.412 diff --git a/modules/nf-core/prokka/main.nf b/modules/nf-core/prokka/main.nf index adfda037..bf5e64fc 100644 --- a/modules/nf-core/prokka/main.nf +++ b/modules/nf-core/prokka/main.nf @@ -1,11 +1,11 @@ process PROKKA { - tag "$meta.id" + tag "${meta.id}" label 'process_low' conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/prokka:1.14.6--pl5321hdfd78af_4' : - 'biocontainers/prokka:1.14.6--pl5321hdfd78af_4' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/3a/3af46b047c8fe84112adeaecf300878217c629b97f111f923ecf327656ddd141/data' : + 'community.wave.seqera.io/library/prokka_openjdk:10546cadeef11472' }" input: tuple val(meta), path(fasta) @@ -31,18 +31,49 @@ process PROKKA { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def proteins_opt = proteins ? "--proteins ${proteins[0]}" : "" - def prodigal_tf = prodigal_tf ? "--prodigaltf ${prodigal_tf[0]}" : "" + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def input = fasta.toString() - ~/\.gz$/ + def decompress = fasta.getExtension() == "gz" ? "gunzip -c ${fasta} > ${input}" : "" + def cleanup = fasta.getExtension() == "gz" ? "rm ${input}" : "" + def proteins_opt = proteins ? "--proteins ${proteins}" : "" + def prodigal_tf_in = prodigal_tf ? "--prodigaltf ${prodigal_tf}" : "" """ + ${decompress} + prokka \\ - $args \\ - --cpus $task.cpus \\ - --prefix $prefix \\ - $proteins_opt \\ - $prodigal_tf \\ - $fasta + ${args} \\ + --cpus ${task.cpus} \\ + --prefix ${prefix} \\ + ${proteins_opt} \\ + ${prodigal_tf_in} \\ + ${input} + + ${cleanup} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + prokka: \$(echo \$(prokka --version 2>&1) | sed 's/^.*prokka //') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir ${prefix} + touch ${prefix}/${prefix}.gff + touch ${prefix}/${prefix}.gbk + touch ${prefix}/${prefix}.fna + touch ${prefix}/${prefix}.faa + touch ${prefix}/${prefix}.ffn + touch ${prefix}/${prefix}.sqn + touch ${prefix}/${prefix}.fsa + touch ${prefix}/${prefix}.tbl + touch ${prefix}/${prefix}.err + touch ${prefix}/${prefix}.log + touch ${prefix}/${prefix}.txt + touch ${prefix}/${prefix}.tsv + touch ${prefix}/${prefix}.gff cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/prokka/tests/main.nf.test b/modules/nf-core/prokka/tests/main.nf.test index dca19bba..68150b33 100644 --- a/modules/nf-core/prokka/tests/main.nf.test +++ b/modules/nf-core/prokka/tests/main.nf.test @@ -47,4 +47,69 @@ nextflow_process { } + test("Prokka - sarscov2 - genome.fasta.gz") { + + when { + process { + """ + input[0] = Channel.fromList([ + tuple([ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true)) + ]) + input[1] = [] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.gbk.get(0).get(1)).exists() }, + { assert path(process.out.log.get(0).get(1)).exists() }, + { assert path(process.out.sqn.get(0).get(1)).exists() }, + { assert snapshot( + process.out.gff, + process.out.fna, + process.out.faa, + process.out.ffn, + process.out.fsa, + process.out.tbl, + process.out.err, + process.out.txt, + process.out.tsv, + process.out.versions + ).match() + } + ) + } + + } + + test("Prokka - sarscov2 - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.fromList([ + tuple([ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true)) + ]) + input[1] = [] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + } From 895298d811a44d6936de78a5cd9f3b231d0b3655 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Wed, 15 Jan 2025 18:27:49 +0100 Subject: [PATCH 090/175] Fix logic of cardannotation execution --- subworkflows/local/arg.nf | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/subworkflows/local/arg.nf b/subworkflows/local/arg.nf index f633a093..af618c5c 100644 --- a/subworkflows/local/arg.nf +++ b/subworkflows/local/arg.nf @@ -99,22 +99,24 @@ workflow ARG { UNTAR_CARD ( [ [], file('https://card.mcmaster.ca/latest/data', checkIfExists: true) ] ) ch_versions = ch_versions.mix( UNTAR_CARD.out.versions ) rgi_db = UNTAR_CARD.out.untar.map{ it[1] } + RGI_CARDANNOTATION ( rgi_db ) + card = RGI_CARDANNOTATION.out.db + ch_versions = ch_versions.mix( RGI_CARDANNOTATION.out.versions ) } else { // Use user-supplied database rgi_db = params.arg_rgi_db + if (! rgi_db.contains("card_database_processed") ) { + RGI_CARDANNOTATION ( rgi_db ) + card = RGI_CARDANNOTATION.out.db + ch_versions = ch_versions.mix( RGI_CARDANNOTATION.out.versions ) + } else { + card = rgi_db + } } - if (! rgi_db.contains("card_database_processed") ) { - RGI_CARDANNOTATION ( rgi_db ) - card = RGI_CARDANNOTATION.out.db - ch_versions = ch_versions.mix( RGI_CARDANNOTATION.out.versions ) - } else { - card = rgi_db - } - RGI_MAIN ( fastas, card, [] ) ch_versions = ch_versions.mix( RGI_MAIN.out.versions ) From b69a4715e27bf97d6d60e6f8e875333a8bc35b72 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Wed, 15 Jan 2025 19:33:29 +0100 Subject: [PATCH 091/175] Update changelog [skip ci] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 471e404c..84d0107a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#427](https://github.com/nf-core/funcscan/pull/427) Fixed the AMP reference database issues reported by users, due to non-ASCII characters. (by @darcy220606) - [#430](https://github.com/nf-core/funcscan/pull/430) Updated `rgi/main` module to fix incorrect variable name. (by @amizeranschi and @jasmezz) - [#435](https://github.com/nf-core/funcscan/pull/435) Fixed dependency errors within taxonomy merging scripts, updated the code and output for all three workflows. Bumped to version 0.1.1. (by @darcy220606) +- [#437](https://github.com/nf-core/funcscan/pull/437) Fixed error when supplying already preprocessed CARD database for ARG workflow. (by @jasmezz) ### `Dependencies` From 74e0fbf4c81c2daeecdc6f5f4c2287e939bb1444 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Thu, 16 Jan 2025 09:55:10 +0100 Subject: [PATCH 092/175] Update mmseqs (update snapshot of createdb), undo prokka change --- modules.json | 8 +- .../mmseqs/createdb/tests/main.nf.test.snap | 28 +- modules/nf-core/prokka/environment.yml | 1 - modules/nf-core/prokka/main.nf | 57 +-- modules/nf-core/prokka/tests/main.nf.test | 65 ---- .../nf-core/prokka/tests/main.nf.test.snap | 326 ------------------ tests/test_prokka.nf.test | 2 +- 7 files changed, 32 insertions(+), 455 deletions(-) diff --git a/modules.json b/modules.json index 8a0b2b32..a2b52ee1 100644 --- a/modules.json +++ b/modules.json @@ -147,25 +147,25 @@ }, "mmseqs/createdb": { "branch": "master", - "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", + "git_sha": "83ba95cd93c6a8cc5e2d9226083c01aea5e80d2a", "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff" }, "mmseqs/createtsv": { "branch": "master", - "git_sha": "411a94f9cbb9219bb6ff778e5edcf95975ab28b2", + "git_sha": "83ba95cd93c6a8cc5e2d9226083c01aea5e80d2a", "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff" }, "mmseqs/databases": { "branch": "master", - "git_sha": "a437c7940f903209eec932bd54663aa9cd1bbc01", + "git_sha": "83ba95cd93c6a8cc5e2d9226083c01aea5e80d2a", "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/databases/mmseqs-databases.diff" }, "mmseqs/taxonomy": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "83ba95cd93c6a8cc5e2d9226083c01aea5e80d2a", "installed_by": ["modules"], "patch": "modules/nf-core/mmseqs/taxonomy/mmseqs-taxonomy.diff" }, diff --git a/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap b/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap index 92f1e6d8..ececa7a4 100644 --- a/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap @@ -8,14 +8,14 @@ "single_end": false }, [ - "test:md5,7c3c2c5926cf8fa82e66b9628f680256", - "test.dbtype:md5,c8ed20c23ba91f4577f84c940c86c7db", - "test.index:md5,5b2fd8abd0ad3fee24738af7082e6a6e", + "test:md5,a2cda8768736a7a317a09d61556194bd", + "test.dbtype:md5,4352d88a78aa39750bf70cd6f27bcaa5", + "test.index:md5,4ba298b011e2472ce9f6b99fe6b6e3d5", "test.lookup:md5,32f88756dbcb6aaf7b239b0d61730f1b", "test.source:md5,9ada5b3ea6e1a7e16c4418eb98ae8d9d", - "test_h:md5,8c29f5ed94d83d7115e9c8a883ce358d", - "test_h.dbtype:md5,8895d3d8e9322aedbf45249dfb3ddb0a", - "test_h.index:md5,87c7c8c6d16018ebfaa6f408391a5ae2" + "test_h:md5,21c399702a071bdeecce09f9d1df4531", + "test_h.dbtype:md5,740bab4f9ec8808aedb68d6b1281aeb2", + "test_h.index:md5,d767fb43b37c0a644c676b00f9f93477" ] ] ], @@ -27,7 +27,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.2" }, - "timestamp": "2024-12-05T10:35:27.322864475" + "timestamp": "2024-12-15T19:30:25.339409238" }, "Should build an mmseqs db from a zipped amino acid sequence file": { "content": [ @@ -37,14 +37,14 @@ "id": "test" }, [ - "test:md5,4b494965ed7ab67da8ca3f39523eb104", - "test.dbtype:md5,152afd7bf4dbe26f85032eee0269201a", - "test.index:md5,46f9d884e9a7f442fe1cd2ce339734e3", + "test:md5,1162504bc65aacf734abdcb0cdbe87de", + "test.dbtype:md5,f1d3ff8443297732862df21dc4e57262", + "test.index:md5,8cdcbc06c2b99fdb09f3d1735a76def9", "test.lookup:md5,3e27cb93d9ee875ad42a6f32f5651bdc", "test.source:md5,eaa64fc8a5f7ec1ee49b0dcbd1a72e9d", - "test_h:md5,6e798b81c70d191f78939c2dd6223a7f", - "test_h.dbtype:md5,8895d3d8e9322aedbf45249dfb3ddb0a", - "test_h.index:md5,d5ac49ff56df064b980fa0eb5da57673" + "test_h:md5,f258f8cc04f83c270a75e8b00a6d2d89", + "test_h.dbtype:md5,740bab4f9ec8808aedb68d6b1281aeb2", + "test_h.index:md5,844bf1950bcd37284fdc5d7117ee4241" ] ] ], @@ -56,6 +56,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.2" }, - "timestamp": "2024-12-05T10:35:33.418552595" + "timestamp": "2024-12-15T19:30:34.93361715" } } \ No newline at end of file diff --git a/modules/nf-core/prokka/environment.yml b/modules/nf-core/prokka/environment.yml index 1d1a019f..7c9753fc 100644 --- a/modules/nf-core/prokka/environment.yml +++ b/modules/nf-core/prokka/environment.yml @@ -3,4 +3,3 @@ channels: - bioconda dependencies: - bioconda::prokka=1.14.6 - - conda-forge::openjdk=8.0.412 diff --git a/modules/nf-core/prokka/main.nf b/modules/nf-core/prokka/main.nf index bf5e64fc..adfda037 100644 --- a/modules/nf-core/prokka/main.nf +++ b/modules/nf-core/prokka/main.nf @@ -1,11 +1,11 @@ process PROKKA { - tag "${meta.id}" + tag "$meta.id" label 'process_low' conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/3a/3af46b047c8fe84112adeaecf300878217c629b97f111f923ecf327656ddd141/data' : - 'community.wave.seqera.io/library/prokka_openjdk:10546cadeef11472' }" + 'https://depot.galaxyproject.org/singularity/prokka:1.14.6--pl5321hdfd78af_4' : + 'biocontainers/prokka:1.14.6--pl5321hdfd78af_4' }" input: tuple val(meta), path(fasta) @@ -31,49 +31,18 @@ process PROKKA { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def input = fasta.toString() - ~/\.gz$/ - def decompress = fasta.getExtension() == "gz" ? "gunzip -c ${fasta} > ${input}" : "" - def cleanup = fasta.getExtension() == "gz" ? "rm ${input}" : "" - def proteins_opt = proteins ? "--proteins ${proteins}" : "" - def prodigal_tf_in = prodigal_tf ? "--prodigaltf ${prodigal_tf}" : "" + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def proteins_opt = proteins ? "--proteins ${proteins[0]}" : "" + def prodigal_tf = prodigal_tf ? "--prodigaltf ${prodigal_tf[0]}" : "" """ - ${decompress} - prokka \\ - ${args} \\ - --cpus ${task.cpus} \\ - --prefix ${prefix} \\ - ${proteins_opt} \\ - ${prodigal_tf_in} \\ - ${input} - - ${cleanup} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - prokka: \$(echo \$(prokka --version 2>&1) | sed 's/^.*prokka //') - END_VERSIONS - """ - - stub: - prefix = task.ext.prefix ?: "${meta.id}" - """ - mkdir ${prefix} - touch ${prefix}/${prefix}.gff - touch ${prefix}/${prefix}.gbk - touch ${prefix}/${prefix}.fna - touch ${prefix}/${prefix}.faa - touch ${prefix}/${prefix}.ffn - touch ${prefix}/${prefix}.sqn - touch ${prefix}/${prefix}.fsa - touch ${prefix}/${prefix}.tbl - touch ${prefix}/${prefix}.err - touch ${prefix}/${prefix}.log - touch ${prefix}/${prefix}.txt - touch ${prefix}/${prefix}.tsv - touch ${prefix}/${prefix}.gff + $args \\ + --cpus $task.cpus \\ + --prefix $prefix \\ + $proteins_opt \\ + $prodigal_tf \\ + $fasta cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/prokka/tests/main.nf.test b/modules/nf-core/prokka/tests/main.nf.test index 68150b33..dca19bba 100644 --- a/modules/nf-core/prokka/tests/main.nf.test +++ b/modules/nf-core/prokka/tests/main.nf.test @@ -47,69 +47,4 @@ nextflow_process { } - test("Prokka - sarscov2 - genome.fasta.gz") { - - when { - process { - """ - input[0] = Channel.fromList([ - tuple([ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true)) - ]) - input[1] = [] - input[2] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert path(process.out.gbk.get(0).get(1)).exists() }, - { assert path(process.out.log.get(0).get(1)).exists() }, - { assert path(process.out.sqn.get(0).get(1)).exists() }, - { assert snapshot( - process.out.gff, - process.out.fna, - process.out.faa, - process.out.ffn, - process.out.fsa, - process.out.tbl, - process.out.err, - process.out.txt, - process.out.tsv, - process.out.versions - ).match() - } - ) - } - - } - - test("Prokka - sarscov2 - stub") { - - options "-stub" - - when { - process { - """ - input[0] = Channel.fromList([ - tuple([ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true)) - ]) - input[1] = [] - input[2] = [] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - } diff --git a/modules/nf-core/prokka/tests/main.nf.test.snap b/modules/nf-core/prokka/tests/main.nf.test.snap index 35713a8f..874c989d 100644 --- a/modules/nf-core/prokka/tests/main.nf.test.snap +++ b/modules/nf-core/prokka/tests/main.nf.test.snap @@ -91,331 +91,5 @@ "nextflow": "24.04.3" }, "timestamp": "2024-07-30T12:34:20.447734" - }, - "Prokka - sarscov2 - genome.fasta.gz": { - "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.gff:md5,5dbfb8fcf2db020564c16045976a0933" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fna:md5,787307f29a263e5657cc276ebbf7e2b3" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.faa:md5,a4ceda83262b3c222a6b1f508fb9e24b" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.ffn:md5,80f474b5367b7ea5ed23791935f65e34" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fsa:md5,71bbefcb7f12046bcd3263f58cfd5404" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.tbl:md5,d8f816a066ced94b62d9618b13fb8add" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.err:md5,b3daedc646fddd422824e2b3e5e9229d" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.txt:md5,b40e485ffc8eaf1feacf8d79d9751a33" - ] - ], - [ - [ - { - "id": "test", - "single_end": false - }, - "test.tsv:md5,da7c720c3018c5081d6a70b517b7d450" - ] - ], - [ - "versions.yml:md5,e83a22fe02167e290d90853b45650db9" - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.3" - }, - "timestamp": "2024-12-19T09:48:05.110188714" - }, - "Prokka - sarscov2 - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.gbk:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "10": [ - [ - { - "id": "test", - "single_end": false - }, - "test.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": false - }, - "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "12": [ - "versions.yml:md5,e83a22fe02167e290d90853b45650db9" - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fna:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test.faa:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - [ - { - "id": "test", - "single_end": false - }, - "test.ffn:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": false - }, - "test.sqn:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "6": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fsa:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "7": [ - [ - { - "id": "test", - "single_end": false - }, - "test.tbl:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "8": [ - [ - { - "id": "test", - "single_end": false - }, - "test.err:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "9": [ - [ - { - "id": "test", - "single_end": false - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "err": [ - [ - { - "id": "test", - "single_end": false - }, - "test.err:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "faa": [ - [ - { - "id": "test", - "single_end": false - }, - "test.faa:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "ffn": [ - [ - { - "id": "test", - "single_end": false - }, - "test.ffn:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fna": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fna:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fsa": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fsa:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "gbk": [ - [ - { - "id": "test", - "single_end": false - }, - "test.gbk:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "gff": [ - [ - { - "id": "test", - "single_end": false - }, - "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "log": [ - [ - { - "id": "test", - "single_end": false - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "sqn": [ - [ - { - "id": "test", - "single_end": false - }, - "test.sqn:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "tbl": [ - [ - { - "id": "test", - "single_end": false - }, - "test.tbl:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "tsv": [ - [ - { - "id": "test", - "single_end": false - }, - "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "txt": [ - [ - { - "id": "test", - "single_end": false - }, - "test.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e83a22fe02167e290d90853b45650db9" - ] - } - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.3" - }, - "timestamp": "2025-01-06T10:51:57.362187225" } } \ No newline at end of file diff --git a/tests/test_prokka.nf.test b/tests/test_prokka.nf.test index d332362e..df5a33a8 100644 --- a/tests/test_prokka.nf.test +++ b/tests/test_prokka.nf.test @@ -53,7 +53,7 @@ nextflow_pipeline { ).match("macrel") }, // AMPcombi - { assert path("$outputDir/reports/ampcombi2/Ampcombi_summary.tsv").text.contains("PROKKA_00019") }, + { assert path("$outputDir/reports/ampcombi2/Ampcombi_summary.tsv").text.contains("PROKKA_377") }, { assert snapshot( path("$outputDir/reports/ampcombi2/Ampcombi_cluster.log"), path("$outputDir/reports/ampcombi2/Ampcombi_complete.log"), From 8f17a0f1825122c4af8362d93f4e2cf52114c19d Mon Sep 17 00:00:00 2001 From: jasmezz Date: Thu, 16 Jan 2025 10:07:23 +0100 Subject: [PATCH 093/175] Update something (to trigger CI tests) --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 84d0107a..3e6e0606 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#427](https://github.com/nf-core/funcscan/pull/427) Fixed the AMP reference database issues reported by users, due to non-ASCII characters. (by @darcy220606) - [#430](https://github.com/nf-core/funcscan/pull/430) Updated `rgi/main` module to fix incorrect variable name. (by @amizeranschi and @jasmezz) - [#435](https://github.com/nf-core/funcscan/pull/435) Fixed dependency errors within taxonomy merging scripts, updated the code and output for all three workflows. Bumped to version 0.1.1. (by @darcy220606) -- [#437](https://github.com/nf-core/funcscan/pull/437) Fixed error when supplying already preprocessed CARD database for ARG workflow. (by @jasmezz) +- [#437](https://github.com/nf-core/funcscan/pull/437) Fixed file name error when supplying already preprocessed CARD database for ARG workflow. (by @jasmezz) ### `Dependencies` From 4fdaf8c170ff9cc6d4bf6d157c96e06fda054cba Mon Sep 17 00:00:00 2001 From: jasmezz Date: Thu, 16 Jan 2025 10:41:20 +0100 Subject: [PATCH 094/175] Patch mmseqs modules to version 15 instead of 16 --- .../nf-core/mmseqs/createdb/environment.yml | 2 +- modules/nf-core/mmseqs/createdb/main.nf | 4 +-- .../mmseqs/createdb/mmseqs-createdb.diff | 30 +++++++++++++++++ .../nf-core/mmseqs/createtsv/environment.yml | 2 +- modules/nf-core/mmseqs/createtsv/main.nf | 4 +-- .../mmseqs/createtsv/mmseqs-createtsv.diff | 32 +++++++++++++++++++ .../nf-core/mmseqs/databases/environment.yml | 2 +- modules/nf-core/mmseqs/databases/main.nf | 4 +-- .../mmseqs/databases/mmseqs-databases.diff | 30 +++++++++++++++++ 9 files changed, 101 insertions(+), 9 deletions(-) create mode 100644 modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff create mode 100644 modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff create mode 100644 modules/nf-core/mmseqs/databases/mmseqs-databases.diff diff --git a/modules/nf-core/mmseqs/createdb/environment.yml b/modules/nf-core/mmseqs/createdb/environment.yml index 235ad03a..18547591 100644 --- a/modules/nf-core/mmseqs/createdb/environment.yml +++ b/modules/nf-core/mmseqs/createdb/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=16.747c6 + - bioconda::mmseqs2=15.6f452 diff --git a/modules/nf-core/mmseqs/createdb/main.nf b/modules/nf-core/mmseqs/createdb/main.nf index ef113068..b7ac14c2 100644 --- a/modules/nf-core/mmseqs/createdb/main.nf +++ b/modules/nf-core/mmseqs/createdb/main.nf @@ -4,8 +4,8 @@ process MMSEQS_CREATEDB { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" input: tuple val(meta), path(sequence) diff --git a/modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff b/modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff new file mode 100644 index 00000000..7124c302 --- /dev/null +++ b/modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff @@ -0,0 +1,30 @@ +Changes in module 'nf-core/mmseqs/createdb' +'modules/nf-core/mmseqs/createdb/meta.yml' is unchanged +Changes in 'mmseqs/createdb/main.nf': +--- modules/nf-core/mmseqs/createdb/main.nf ++++ modules/nf-core/mmseqs/createdb/main.nf +@@ -4,8 +4,8 @@ + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? +- 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': +- 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" ++ 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': ++ 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + + input: + tuple val(meta), path(sequence) + +Changes in 'mmseqs/createdb/environment.yml': +--- modules/nf-core/mmseqs/createdb/environment.yml ++++ modules/nf-core/mmseqs/createdb/environment.yml +@@ -2,4 +2,4 @@ + - conda-forge + - bioconda + dependencies: +- - bioconda::mmseqs2=16.747c6 ++ - bioconda::mmseqs2=15.6f452 + +'modules/nf-core/mmseqs/createdb/tests/main.nf.test' is unchanged +'modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap' is unchanged +************************************************************ diff --git a/modules/nf-core/mmseqs/createtsv/environment.yml b/modules/nf-core/mmseqs/createtsv/environment.yml index 235ad03a..18547591 100644 --- a/modules/nf-core/mmseqs/createtsv/environment.yml +++ b/modules/nf-core/mmseqs/createtsv/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=16.747c6 + - bioconda::mmseqs2=15.6f452 diff --git a/modules/nf-core/mmseqs/createtsv/main.nf b/modules/nf-core/mmseqs/createtsv/main.nf index b41b5c54..45eada85 100644 --- a/modules/nf-core/mmseqs/createtsv/main.nf +++ b/modules/nf-core/mmseqs/createtsv/main.nf @@ -5,8 +5,8 @@ process MMSEQS_CREATETSV { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" input: tuple val(meta), path(db_result) diff --git a/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff new file mode 100644 index 00000000..7c183dc6 --- /dev/null +++ b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff @@ -0,0 +1,32 @@ +Changes in module 'nf-core/mmseqs/createtsv' +'modules/nf-core/mmseqs/createtsv/meta.yml' is unchanged +Changes in 'mmseqs/createtsv/main.nf': +--- modules/nf-core/mmseqs/createtsv/main.nf ++++ modules/nf-core/mmseqs/createtsv/main.nf +@@ -5,8 +5,8 @@ + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? +- 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': +- 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" ++ 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': ++ 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + + input: + tuple val(meta), path(db_result) + +Changes in 'mmseqs/createtsv/environment.yml': +--- modules/nf-core/mmseqs/createtsv/environment.yml ++++ modules/nf-core/mmseqs/createtsv/environment.yml +@@ -2,4 +2,4 @@ + - conda-forge + - bioconda + dependencies: +- - bioconda::mmseqs2=16.747c6 ++ - bioconda::mmseqs2=15.6f452 + +'modules/nf-core/mmseqs/createtsv/tests/main.nf.test' is unchanged +'modules/nf-core/mmseqs/createtsv/tests/cluster.nextflow.config' is unchanged +'modules/nf-core/mmseqs/createtsv/tests/taxonomy.nextflow.config' is unchanged +'modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap' is unchanged +************************************************************ diff --git a/modules/nf-core/mmseqs/databases/environment.yml b/modules/nf-core/mmseqs/databases/environment.yml index 235ad03a..18547591 100644 --- a/modules/nf-core/mmseqs/databases/environment.yml +++ b/modules/nf-core/mmseqs/databases/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=16.747c6 + - bioconda::mmseqs2=15.6f452 diff --git a/modules/nf-core/mmseqs/databases/main.nf b/modules/nf-core/mmseqs/databases/main.nf index 8f94eac5..ef38eed9 100644 --- a/modules/nf-core/mmseqs/databases/main.nf +++ b/modules/nf-core/mmseqs/databases/main.nf @@ -4,8 +4,8 @@ process MMSEQS_DATABASES { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" input: val database diff --git a/modules/nf-core/mmseqs/databases/mmseqs-databases.diff b/modules/nf-core/mmseqs/databases/mmseqs-databases.diff new file mode 100644 index 00000000..9f66aa1c --- /dev/null +++ b/modules/nf-core/mmseqs/databases/mmseqs-databases.diff @@ -0,0 +1,30 @@ +Changes in module 'nf-core/mmseqs/databases' +'modules/nf-core/mmseqs/databases/meta.yml' is unchanged +Changes in 'mmseqs/databases/main.nf': +--- modules/nf-core/mmseqs/databases/main.nf ++++ modules/nf-core/mmseqs/databases/main.nf +@@ -4,8 +4,8 @@ + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? +- 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': +- 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" ++ 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': ++ 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + + input: + val database + +Changes in 'mmseqs/databases/environment.yml': +--- modules/nf-core/mmseqs/databases/environment.yml ++++ modules/nf-core/mmseqs/databases/environment.yml +@@ -2,4 +2,4 @@ + - conda-forge + - bioconda + dependencies: +- - bioconda::mmseqs2=16.747c6 ++ - bioconda::mmseqs2=15.6f452 + +'modules/nf-core/mmseqs/databases/tests/main.nf.test' is unchanged +'modules/nf-core/mmseqs/databases/tests/main.nf.test.snap' is unchanged +************************************************************ From 1f919a35cdafdfe478b4765cbc44d2509a2000a1 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Fri, 17 Jan 2025 15:15:15 +0100 Subject: [PATCH 095/175] Update all mmseqs modules to v16, change `--search-type` default to have taxonomy workflow succeed --- modules.json | 16 ++++------ .../nf-core/mmseqs/createdb/environment.yml | 2 +- modules/nf-core/mmseqs/createdb/main.nf | 4 +-- .../mmseqs/createdb/mmseqs-createdb.diff | 30 ----------------- .../nf-core/mmseqs/createtsv/environment.yml | 2 +- modules/nf-core/mmseqs/createtsv/main.nf | 4 +-- .../mmseqs/createtsv/mmseqs-createtsv.diff | 32 ------------------- .../mmseqs/createtsv/tests/main.nf.test.snap | 24 ++++---------- .../nf-core/mmseqs/databases/environment.yml | 2 +- modules/nf-core/mmseqs/databases/main.nf | 4 +-- .../mmseqs/databases/mmseqs-databases.diff | 30 ----------------- .../nf-core/mmseqs/taxonomy/environment.yml | 2 +- modules/nf-core/mmseqs/taxonomy/main.nf | 4 +-- .../mmseqs/taxonomy/tests/main.nf.test.snap | 10 +++--- nextflow.config | 2 +- nextflow_schema.json | 2 +- 16 files changed, 31 insertions(+), 139 deletions(-) delete mode 100644 modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff delete mode 100644 modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff delete mode 100644 modules/nf-core/mmseqs/databases/mmseqs-databases.diff diff --git a/modules.json b/modules.json index a2b52ee1..7a3cd777 100644 --- a/modules.json +++ b/modules.json @@ -148,26 +148,22 @@ "mmseqs/createdb": { "branch": "master", "git_sha": "83ba95cd93c6a8cc5e2d9226083c01aea5e80d2a", - "installed_by": ["modules"], - "patch": "modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff" + "installed_by": ["modules"] }, "mmseqs/createtsv": { "branch": "master", - "git_sha": "83ba95cd93c6a8cc5e2d9226083c01aea5e80d2a", - "installed_by": ["modules"], - "patch": "modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff" + "git_sha": "0306f1e9cc93049a210f32b52da3b180192aa003", + "installed_by": ["modules"] }, "mmseqs/databases": { "branch": "master", "git_sha": "83ba95cd93c6a8cc5e2d9226083c01aea5e80d2a", - "installed_by": ["modules"], - "patch": "modules/nf-core/mmseqs/databases/mmseqs-databases.diff" + "installed_by": ["modules"] }, "mmseqs/taxonomy": { "branch": "master", - "git_sha": "83ba95cd93c6a8cc5e2d9226083c01aea5e80d2a", - "installed_by": ["modules"], - "patch": "modules/nf-core/mmseqs/taxonomy/mmseqs-taxonomy.diff" + "git_sha": "0306f1e9cc93049a210f32b52da3b180192aa003", + "installed_by": ["modules"] }, "multiqc": { "branch": "master", diff --git a/modules/nf-core/mmseqs/createdb/environment.yml b/modules/nf-core/mmseqs/createdb/environment.yml index 18547591..986f560d 100644 --- a/modules/nf-core/mmseqs/createdb/environment.yml +++ b/modules/nf-core/mmseqs/createdb/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=15.6f452 + - bioconda::mmseqs2=16.747c6 \ No newline at end of file diff --git a/modules/nf-core/mmseqs/createdb/main.nf b/modules/nf-core/mmseqs/createdb/main.nf index b7ac14c2..ef113068 100644 --- a/modules/nf-core/mmseqs/createdb/main.nf +++ b/modules/nf-core/mmseqs/createdb/main.nf @@ -4,8 +4,8 @@ process MMSEQS_CREATEDB { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" input: tuple val(meta), path(sequence) diff --git a/modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff b/modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff deleted file mode 100644 index 7124c302..00000000 --- a/modules/nf-core/mmseqs/createdb/mmseqs-createdb.diff +++ /dev/null @@ -1,30 +0,0 @@ -Changes in module 'nf-core/mmseqs/createdb' -'modules/nf-core/mmseqs/createdb/meta.yml' is unchanged -Changes in 'mmseqs/createdb/main.nf': ---- modules/nf-core/mmseqs/createdb/main.nf -+++ modules/nf-core/mmseqs/createdb/main.nf -@@ -4,8 +4,8 @@ - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? -- 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': -- 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" -+ 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': -+ 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" - - input: - tuple val(meta), path(sequence) - -Changes in 'mmseqs/createdb/environment.yml': ---- modules/nf-core/mmseqs/createdb/environment.yml -+++ modules/nf-core/mmseqs/createdb/environment.yml -@@ -2,4 +2,4 @@ - - conda-forge - - bioconda - dependencies: -- - bioconda::mmseqs2=16.747c6 -+ - bioconda::mmseqs2=15.6f452 - -'modules/nf-core/mmseqs/createdb/tests/main.nf.test' is unchanged -'modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap' is unchanged -************************************************************ diff --git a/modules/nf-core/mmseqs/createtsv/environment.yml b/modules/nf-core/mmseqs/createtsv/environment.yml index 18547591..235ad03a 100644 --- a/modules/nf-core/mmseqs/createtsv/environment.yml +++ b/modules/nf-core/mmseqs/createtsv/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=15.6f452 + - bioconda::mmseqs2=16.747c6 diff --git a/modules/nf-core/mmseqs/createtsv/main.nf b/modules/nf-core/mmseqs/createtsv/main.nf index 45eada85..b41b5c54 100644 --- a/modules/nf-core/mmseqs/createtsv/main.nf +++ b/modules/nf-core/mmseqs/createtsv/main.nf @@ -5,8 +5,8 @@ process MMSEQS_CREATETSV { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" input: tuple val(meta), path(db_result) diff --git a/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff b/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff deleted file mode 100644 index 7c183dc6..00000000 --- a/modules/nf-core/mmseqs/createtsv/mmseqs-createtsv.diff +++ /dev/null @@ -1,32 +0,0 @@ -Changes in module 'nf-core/mmseqs/createtsv' -'modules/nf-core/mmseqs/createtsv/meta.yml' is unchanged -Changes in 'mmseqs/createtsv/main.nf': ---- modules/nf-core/mmseqs/createtsv/main.nf -+++ modules/nf-core/mmseqs/createtsv/main.nf -@@ -5,8 +5,8 @@ - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? -- 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': -- 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" -+ 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': -+ 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" - - input: - tuple val(meta), path(db_result) - -Changes in 'mmseqs/createtsv/environment.yml': ---- modules/nf-core/mmseqs/createtsv/environment.yml -+++ modules/nf-core/mmseqs/createtsv/environment.yml -@@ -2,4 +2,4 @@ - - conda-forge - - bioconda - dependencies: -- - bioconda::mmseqs2=16.747c6 -+ - bioconda::mmseqs2=15.6f452 - -'modules/nf-core/mmseqs/createtsv/tests/main.nf.test' is unchanged -'modules/nf-core/mmseqs/createtsv/tests/cluster.nextflow.config' is unchanged -'modules/nf-core/mmseqs/createtsv/tests/taxonomy.nextflow.config' is unchanged -'modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap' is unchanged -************************************************************ diff --git a/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap b/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap index ad31aa06..8279c81e 100644 --- a/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap @@ -73,36 +73,24 @@ "content": [ { "0": [ - [ - { - "id": "test_query", - "single_end": false - }, - "test_query.tsv:md5,9179f5c85b8b87a4dc998c9d17840161" - ] + ], "1": [ - "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" + ], "tsv": [ - [ - { - "id": "test_query", - "single_end": false - }, - "test_query.tsv:md5,9179f5c85b8b87a4dc998c9d17840161" - ] + ], "versions": [ - "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" + ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "24.10.3" }, - "timestamp": "2024-12-05T11:25:54.741775111" + "timestamp": "2025-01-16T14:29:41.214561285" }, "mmseqs/createtsv - sarscov2 - cluster": { "content": [ diff --git a/modules/nf-core/mmseqs/databases/environment.yml b/modules/nf-core/mmseqs/databases/environment.yml index 18547591..235ad03a 100644 --- a/modules/nf-core/mmseqs/databases/environment.yml +++ b/modules/nf-core/mmseqs/databases/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=15.6f452 + - bioconda::mmseqs2=16.747c6 diff --git a/modules/nf-core/mmseqs/databases/main.nf b/modules/nf-core/mmseqs/databases/main.nf index ef38eed9..8f94eac5 100644 --- a/modules/nf-core/mmseqs/databases/main.nf +++ b/modules/nf-core/mmseqs/databases/main.nf @@ -4,8 +4,8 @@ process MMSEQS_DATABASES { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" input: val database diff --git a/modules/nf-core/mmseqs/databases/mmseqs-databases.diff b/modules/nf-core/mmseqs/databases/mmseqs-databases.diff deleted file mode 100644 index 9f66aa1c..00000000 --- a/modules/nf-core/mmseqs/databases/mmseqs-databases.diff +++ /dev/null @@ -1,30 +0,0 @@ -Changes in module 'nf-core/mmseqs/databases' -'modules/nf-core/mmseqs/databases/meta.yml' is unchanged -Changes in 'mmseqs/databases/main.nf': ---- modules/nf-core/mmseqs/databases/main.nf -+++ modules/nf-core/mmseqs/databases/main.nf -@@ -4,8 +4,8 @@ - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? -- 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': -- 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" -+ 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': -+ 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" - - input: - val database - -Changes in 'mmseqs/databases/environment.yml': ---- modules/nf-core/mmseqs/databases/environment.yml -+++ modules/nf-core/mmseqs/databases/environment.yml -@@ -2,4 +2,4 @@ - - conda-forge - - bioconda - dependencies: -- - bioconda::mmseqs2=16.747c6 -+ - bioconda::mmseqs2=15.6f452 - -'modules/nf-core/mmseqs/databases/tests/main.nf.test' is unchanged -'modules/nf-core/mmseqs/databases/tests/main.nf.test.snap' is unchanged -************************************************************ diff --git a/modules/nf-core/mmseqs/taxonomy/environment.yml b/modules/nf-core/mmseqs/taxonomy/environment.yml index 65f1e5cd..c5b78bc7 100644 --- a/modules/nf-core/mmseqs/taxonomy/environment.yml +++ b/modules/nf-core/mmseqs/taxonomy/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::mmseqs2=15.6f452" + - "bioconda::mmseqs2=16.747c6" diff --git a/modules/nf-core/mmseqs/taxonomy/main.nf b/modules/nf-core/mmseqs/taxonomy/main.nf index 396abd1f..bb0caf23 100644 --- a/modules/nf-core/mmseqs/taxonomy/main.nf +++ b/modules/nf-core/mmseqs/taxonomy/main.nf @@ -4,8 +4,8 @@ process MMSEQS_TAXONOMY { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:15.6f452--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:15.6f452--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': + 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" input: tuple val(meta), path(db_query) diff --git a/modules/nf-core/mmseqs/taxonomy/tests/main.nf.test.snap b/modules/nf-core/mmseqs/taxonomy/tests/main.nf.test.snap index 225680ac..8a21ce4f 100644 --- a/modules/nf-core/mmseqs/taxonomy/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/taxonomy/tests/main.nf.test.snap @@ -59,7 +59,7 @@ ] ], "1": [ - "versions.yml:md5,a8f24dca956a1c84099ff129f826c63f" + "versions.yml:md5,019af282b55a28b89c5376b4e7a70fe4" ], "db_taxonomy": [ [ @@ -100,14 +100,14 @@ ] ], "versions": [ - "versions.yml:md5,a8f24dca956a1c84099ff129f826c63f" + "versions.yml:md5,019af282b55a28b89c5376b4e7a70fe4" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.3" }, - "timestamp": "2024-08-09T10:12:00.148815" + "timestamp": "2025-01-16T12:52:06.466899117" } } \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 85914230..ac10a1cb 100644 --- a/nextflow.config +++ b/nextflow.config @@ -45,7 +45,7 @@ params { taxa_classification_mmseqs_db_savetmp = false taxa_classification_mmseqs_taxonomy_savetmp = false - taxa_classification_mmseqs_taxonomy_searchtype = 2 + taxa_classification_mmseqs_taxonomy_searchtype = 3 taxa_classification_mmseqs_taxonomy_lcaranks = 'kingdom,phylum,class,order,family,genus,species' taxa_classification_mmseqs_taxonomy_taxlineage = 1 taxa_classification_mmseqs_taxonomy_sensitivity = 5.0 diff --git a/nextflow_schema.json b/nextflow_schema.json index b5fea956..b7a65129 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -140,7 +140,7 @@ }, "taxa_classification_mmseqs_taxonomy_searchtype": { "type": "integer", - "default": 2, + "default": 3, "help_text": "Specify the type of alignment to be carried out between the query database and the reference MMseqs2 database. This can be set to '0' for automatic detection, '1' for amino acid alignment, '2' for translating the inputs and running the alignment on the translated sequences, '3' nucleotide based alignment and '4' for the translated nucleotide sequences alignment. More details can be found in the [documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - mmseqs taxonomy: `--search-type`", "description": "Specify the alignment type between database and query.", "fa_icon": "fas fa-align-center" From 310a0be7e584a1818a52625ce9e62ccc5cfdb3ab Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Fri, 17 Jan 2025 15:58:18 +0100 Subject: [PATCH 096/175] Add reviewer requests --- CHANGELOG.md | 2 +- conf/base.config | 2 +- conf/modules.config | 18 +- docs/output.md | 13 +- docs/usage.md | 17 +- nextflow.config | 454 +++++++++--------- nextflow_schema.json | 34 +- subworkflows/local/amp.nf | 2 +- .../{function.nf => protein_annotation.nf} | 11 +- workflows/funcscan.nf | 38 +- 10 files changed, 305 insertions(+), 286 deletions(-) rename subworkflows/local/{function.nf => protein_annotation.nf} (81%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 44be2dbe..376941fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,8 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#421](https://github.com/nf-core/funcscan/pull/421) Updated to nf-core template 3.0.2. (by @jfy133) - [#427](https://github.com/nf-core/funcscan/pull/427) AMPcombi now can use multiple other databases for classifications. (by @darcy220606) +- [#428](https://github.com/nf-core/funcscan/pull/428) Added InterProScan annotation workflow to the pipeline. The results are coupled to AMPcombi final table. (by @darcy220606) - [#429](https://github.com/nf-core/funcscan/pull/429) Updated to nf-core template 3.1.0. (by @jfy133 and @jasmezz) -- [#428](https://github.com/nf-core/funcscan/pull/XXX) Added InterProScan annotation workflow to the pipeline. The results are coupled to AMPcombi final table. (by @darcy220606) ### `Fixed` diff --git a/conf/base.config b/conf/base.config index 09613474..7c1362ec 100644 --- a/conf/base.config +++ b/conf/base.config @@ -233,7 +233,7 @@ process { withName: INTERPROSCAN_DATABASE { memory = { 6.GB * task.attempt } - time = { 4.h * task.attempt } // Download might take longer with some Bandwidth! + time = { 4.h * task.attempt } cpus = { 6 * task.attempt } } diff --git a/conf/modules.config b/conf/modules.config index 91953e43..94b9bae3 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -99,9 +99,9 @@ process { withName: SEQKIT_SEQ_FILTER { ext.prefix = { "${meta.id}_cleaned.faa" } publishDir = [ - path: { "${params.outdir}/function/interproscan/" }, + path: { "${params.outdir}/protein_annotation/interproscan/" }, mode: params.publish_dir_mode, - enabled: { params.run_function_interproscan }, + enabled: { params.run_protein_annotation_interproscan }, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] ext.args = [ @@ -121,16 +121,16 @@ process { withName: INTERPROSCAN { ext.prefix = { "${meta.id}_interproscan.faa" } publishDir = [ - path: { "${params.outdir}/function/interproscan/" }, + path: { "${params.outdir}/protein_annotation/interproscan/" }, mode: params.publish_dir_mode, - enabled: params.run_function_interproscan, + enabled: params.run_protein_annotation_interproscan, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] ext.args = [ - "--applications ${params.function_interproscan_applications}", - params.function_interproscan_enableprecalc ? '' : '--disable-precalc', - params.function_interproscan_enableresidueannot ? '' : '--disable-residue-annot', - params.function_interproscan_disableresidueannottsv ? '--enable-tsv-residue-annot' : '', + "--applications ${params.protein_annotation_interproscan_applications}", + params.protein_annotation_interproscan_enableprecalc ? '' : '--disable-precalc', + params.protein_annotation_interproscan_enableresidueannot ? '' : '--disable-residue-annot', + params.protein_annotation_interproscan_disableresidueannottsv ? '--enable-tsv-residue-annot' : '', "--formats tsv" ].join(' ').trim() } @@ -715,7 +715,7 @@ process { withName: AMP_DATABASE_DOWNLOAD { publishDir = [ - path: { "${params.outdir}/databases/" }, + path: { "${params.outdir}/databases/ampcombi/" }, mode: params.publish_dir_mode, enabled: params.save_db, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, diff --git a/docs/output.md b/docs/output.md index 696d335e..edd7c5a9 100644 --- a/docs/output.md +++ b/docs/output.md @@ -25,7 +25,7 @@ results/ | ├── prodigal/ | ├── prokka/ | └── pyrodigal/ -├── function/ +├── protein_annotation/ | └── interproscan/ ├── amp/ | ├── ampir/ @@ -222,7 +222,7 @@ Output Summaries: [Bakta](https://github.com/oschwengers/bakta) is a tool for the rapid & standardised annotation of bacterial genomes and plasmids from both isolates and MAGs. It provides dbxref-rich, sORF-including and taxon-independent annotations in machine-readable JSON & bioinformatics standard file formats for automated downstream analysis. The output is used by some of the functional screening tools. -### Functional classifications +### Protein annotation [InterProScan](#interproscan) @@ -232,12 +232,12 @@ Output Summaries: Output files - `interproscan/` - - `_cleaned.faa`: clean version of the fasta files (amino acids) generated by one of the annotated tools. These contain sequences with no special character + - `_cleaned.faa`: clean version of the fasta files (in amino acid format) generated by one of the annotation tools (i.e. Pyrodigal, Prokka, Bakta or Prokke). These contain sequences with no special characters (for eg. '*' or '-'). - `_interproscan_faa.tsv`: predicted proteins and domains using the InterPro database in TSV format
-[InterProScan](https://academic.oup.com/bioinformatics/article/30/9/1236/237988?login=true) (**a**nti**m**icrobial **p**eptide **p**rediction **i**n **r**) was designed to predict the protein function and and provide possible domain and motif information for the coding regions. It utilizes the InterPro database that consists of multiple sister databases such as PANTHER, ProSite, Pfam, etc. More details can be found in the [documentation](https://interproscan-docs.readthedocs.io/en/latest/index.html). +[InterProScan](https://academic.oup.com/bioinformatics/article/30/9/1236/237988?login=true) is designed to predict the protein function and and provide possible domain and motif information for the coding regions. It utilizes the InterPro database that consists of multiple sister databases such as PANTHER, ProSite, Pfam, etc. More details can be found in the [documentation](https://interproscan-docs.readthedocs.io/en/latest/index.html). ### AMP detection tools @@ -488,6 +488,11 @@ Note that filtered FASTA is only used for BGC workflow for run-time optimisation - `/*_ampcombi.tsv`: summarised output in tsv format for each sample - `/*_amp.faa*`: fasta file containing the amino acid sequences for all AMP hits for each sample - `/*_mmseqs_matches.txt*`: alignment file generated by MMseqs2 for each sample + +:::info +In some cases, when the AMP workflow is turned on, only summary files per sample will be created in the output folder with **NO** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster.tsv` files and hence no taxonomic classifications will be merged (if the taxonomic classification subworkflow is turned on). This can occur when strictly setting parameters which can lead to no AMP hits found in any of the samples or in only one sample. Look out for `[nf-core/funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.`in the stdout or `.nextflow.log` file. +::: + AMP summary table header descriptions using DRAMP as reference database | Table column | Description | diff --git a/docs/usage.md b/docs/usage.md index 5459fb87..b52d8ea4 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -135,7 +135,7 @@ MMseqs2 is currently the only taxonomic classification tool used in the pipeline ### InterProScan -[InterProScan](https://github.com/ebi-pf-team/interproscan) is currently the only functional classification tool that gives a snapshot of the protein families and domains for each coding region. By runnning this tool `--run_function_interproscan`, the [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/) v5.67-99.0 is by default downloaded and prepared. This can be changed by downloading and extracting the files from any [InterPro version](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/) and the path to the folder assigned. +[InterProScan](https://github.com/ebi-pf-team/interproscan) is currently the only protein annotation tool that gives a snapshot of the protein families and domains for each coding region. By giving `--run_protein_annotation_interproscan`, the [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/) v5.67-99.0 is by default downloaded and prepared and the input sequences will be screened against the database. You can skip database downloading by the pipeline on each run by manually downloading and extracting the files from any [InterPro version](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/) and giving the resulting directory path to `--protein_annotation_interproscan_db`. ```bash --function_interproscan_db 'path/to/InterPro_directory/' @@ -271,7 +271,8 @@ This is due to an incompatibility issue of Prodigal's output `.gbk` file with mu ::: :::tip -If the `run_function_interproscan` is activated, protein and domain classifications of the coding regions are generated and the output is then integrated into the `AMPcombi parsetables` resulting table for every sample and the complete summary files e.g., `Ampcombi_summary.tsv`. +- If `--run_protein_annotation_interproscan` is given, protein and domain classifications of the coding regions are generated and the output is then integrated into the `AMPcombi parsetables` resulting table for every sample and the complete summary files e.g., `Ampcombi_summary.tsv`. +- In some cases, when the AMP workflow is turned on, only the summary files per sample will be created in the output folder with **NO** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster.tsv` files and hence no taxonomic classifications will be merged (if the taxonomic classification subworkflow is turned on). This can occur when strictly setting parameters which can lead to no AMP hits found in any of the samples or in only one sample. Look out for `[nf-core/funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.`in the stdout or `.nextflow.log` file. ::: ### Abricate @@ -525,6 +526,18 @@ deepbgc_db/ └── myDetectors*.pkl ``` +### InterProScan + +[InterProScan](https://github.com/ebi-pf-team/interproscan) is used to provide more information about the proteins annotated on the contigs. By default, turning on this subworkflow with `--run_protein_annotation_interproscan` will download and unzip the (as of now) latest [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/) v5.67-99.0. The database downloaded can be saved in the output directory `/databases/interproscan/*` if the `--save_db` is turned on. Note: the download can take upto 4 hours depending on teh bandwidth. + +A diifferent version of the database can be supplied to teh pipeline ba passing the InterProScan database directory to `--protein_annotation_interproscan_db path/to/interproscan_db/`. The directory can be created following with: + +``` +curl -L https://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz -o interproscan_db/interproscan-5.67-99.0-64-bit.tar.gz +tar -xzf interproscan_db/interproscan-5.67-99.0-64-bit.tar.gz -C interproscan_db/ + +``` + ## Updating the pipeline 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: diff --git a/nextflow.config b/nextflow.config index b9728bfc..961a5150 100644 --- a/nextflow.config +++ b/nextflow.config @@ -10,255 +10,255 @@ params { // Input options - input = null + input = null // MultiQC options - multiqc_config = null - multiqc_title = null - multiqc_logo = null - max_multiqc_email_size = '25.MB' - multiqc_methods_description = null + 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 = 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') + 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') // Config options // Taxonomy classification options - run_taxa_classification = false - taxa_classification_tool = 'mmseqs2' - - taxa_classification_mmseqs_db = null - taxa_classification_mmseqs_db_id = 'Kalamari' - taxa_classification_mmseqs_db_savetmp = false - - taxa_classification_mmseqs_taxonomy_savetmp = false - taxa_classification_mmseqs_taxonomy_searchtype = 2 - taxa_classification_mmseqs_taxonomy_lcaranks = 'kingdom,phylum,class,order,family,genus,species' - taxa_classification_mmseqs_taxonomy_taxlineage = 1 - taxa_classification_mmseqs_taxonomy_sensitivity = 5.0 - taxa_classification_mmseqs_taxonomy_orffilters = 2.0 - taxa_classification_mmseqs_taxonomy_lcamode = 3 - taxa_classification_mmseqs_taxonomy_votemode = 1 + run_taxa_classification = false + taxa_classification_tool = 'mmseqs2' + + taxa_classification_mmseqs_db = null + taxa_classification_mmseqs_db_id = 'Kalamari' + taxa_classification_mmseqs_db_savetmp = false + + taxa_classification_mmseqs_taxonomy_savetmp = false + taxa_classification_mmseqs_taxonomy_searchtype = 2 + taxa_classification_mmseqs_taxonomy_lcaranks = 'kingdom,phylum,class,order,family,genus,species' + taxa_classification_mmseqs_taxonomy_taxlineage = 1 + taxa_classification_mmseqs_taxonomy_sensitivity = 5.0 + taxa_classification_mmseqs_taxonomy_orffilters = 2.0 + taxa_classification_mmseqs_taxonomy_lcamode = 3 + taxa_classification_mmseqs_taxonomy_votemode = 1 // Annotation options - annotation_tool = 'pyrodigal' - save_annotations = false - - annotation_prodigal_singlemode = false - annotation_prodigal_closed = false - annotation_prodigal_transtable = 11 - annotation_prodigal_forcenonsd = false - - annotation_pyrodigal_singlemode = false - annotation_pyrodigal_closed = false - annotation_pyrodigal_transtable = 11 - annotation_pyrodigal_forcenonsd = false - - annotation_bakta_db = null - annotation_bakta_db_downloadtype = 'full' - annotation_bakta_singlemode = false - annotation_bakta_mincontiglen = 1 - annotation_bakta_translationtable = 11 - annotation_bakta_gram = '?' - annotation_bakta_complete = false - annotation_bakta_renamecontigheaders = false - annotation_bakta_compliant = false - annotation_bakta_trna = false - annotation_bakta_tmrna = false - annotation_bakta_rrna = false - annotation_bakta_ncrna = false - annotation_bakta_ncrnaregion = false - annotation_bakta_crispr = false - annotation_bakta_skipcds = false - annotation_bakta_pseudo = false - annotation_bakta_skipsorf = false - annotation_bakta_gap = false - annotation_bakta_ori = false - annotation_bakta_activate_plot = false - - annotation_prokka_singlemode = false - annotation_prokka_rawproduct = false - annotation_prokka_kingdom = 'Bacteria' - annotation_prokka_gcode = 11 - annotation_prokka_cdsrnaolap = false - annotation_prokka_rnammer = false - annotation_prokka_mincontiglen = 1 - annotation_prokka_evalue = 0.000001 - annotation_prokka_coverage = 80 - annotation_prokka_compliant = true - annotation_prokka_addgenes = false - annotation_prokka_retaincontigheaders = false - - // Function classification options - run_function_interproscan = false - function_interproscan_db = null - function_interproscan_db_url = 'http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz' - function_interproscan_applications = 'PANTHER,ProSiteProfiles,ProSitePatterns,Pfam' - function_interproscan_enableprecalc = false - function_interproscan_enableresidueannot = false - function_interproscan_disableresidueannottsv = false + annotation_tool = 'pyrodigal' + save_annotations = false + + annotation_prodigal_singlemode = false + annotation_prodigal_closed = false + annotation_prodigal_transtable = 11 + annotation_prodigal_forcenonsd = false + + annotation_pyrodigal_singlemode = false + annotation_pyrodigal_closed = false + annotation_pyrodigal_transtable = 11 + annotation_pyrodigal_forcenonsd = false + + annotation_bakta_db = null + annotation_bakta_db_downloadtype = 'full' + annotation_bakta_singlemode = false + annotation_bakta_mincontiglen = 1 + annotation_bakta_translationtable = 11 + annotation_bakta_gram = '?' + annotation_bakta_complete = false + annotation_bakta_renamecontigheaders = false + annotation_bakta_compliant = false + annotation_bakta_trna = false + annotation_bakta_tmrna = false + annotation_bakta_rrna = false + annotation_bakta_ncrna = false + annotation_bakta_ncrnaregion = false + annotation_bakta_crispr = false + annotation_bakta_skipcds = false + annotation_bakta_pseudo = false + annotation_bakta_skipsorf = false + annotation_bakta_gap = false + annotation_bakta_ori = false + annotation_bakta_activate_plot = false + + annotation_prokka_singlemode = false + annotation_prokka_rawproduct = false + annotation_prokka_kingdom = 'Bacteria' + annotation_prokka_gcode = 11 + annotation_prokka_cdsrnaolap = false + annotation_prokka_rnammer = false + annotation_prokka_mincontiglen = 1 + annotation_prokka_evalue = 0.000001 + annotation_prokka_coverage = 80 + annotation_prokka_compliant = true + annotation_prokka_addgenes = false + annotation_prokka_retaincontigheaders = false + + // Protein_annotation options + run_protein_annotation_interproscan = false + protein_annotation_interproscan_db = null + protein_annotation_interproscan_db_url = 'http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz' + protein_annotation_interproscan_applications = 'PANTHER,ProSiteProfiles,ProSitePatterns,Pfam' + protein_annotation_interproscan_enableprecalc = false + protein_annotation_interproscan_enableresidueannot = false + protein_annotation_interproscan_disableresidueannottsv = false // Database downloading options - save_db = false + save_db = false // AMP options - run_amp_screening = false - - amp_skip_amplify = false - - amp_skip_macrel = false - - amp_skip_ampir = false - amp_ampir_model = 'precursor' - amp_ampir_minlength = 10 - - amp_run_hmmsearch = false - amp_hmmsearch_models = null - amp_hmmsearch_savealignments = false - amp_hmmsearch_savetargets = false - amp_hmmsearch_savedomains = false - - amp_ampcombi_db_id = 'DRAMP' - amp_ampcombi_db = null - amp_ampcombi_parsetables_cutoff = 0.6 - amp_ampcombi_parsetables_ampir = '.ampir.tsv' - amp_ampcombi_parsetables_amplify = '.amplify.tsv' - amp_ampcombi_parsetables_macrel = '.macrel.prediction' - amp_ampcombi_parsetables_hmmsearch = '.hmmer_hmmsearch.txt' - amp_ampcombi_parsetables_aalength = 120 - amp_ampcombi_parsetables_dbevalue = 5 - amp_ampcombi_parsetables_hmmevalue = 0.06 - amp_ampcombi_parsetables_windowstopcodon = 60 - amp_ampcombi_parsetables_windowtransport = 11 - amp_ampcombi_parsetables_removehitswostopcodons = false - amp_ampcombi_cluster_covmode = 0 - amp_ampcombi_cluster_mode = 1 - amp_ampcombi_cluster_coverage = 0.8 - amp_ampcombi_cluster_seqid = 0.4 - amp_ampcombi_cluster_sensitivity = 4.0 - amp_ampcombi_cluster_removesingletons = false - amp_ampcombi_cluster_minmembers = 0 + run_amp_screening = false + + amp_skip_amplify = false + + amp_skip_macrel = false + + amp_skip_ampir = false + amp_ampir_model = 'precursor' + amp_ampir_minlength = 10 + + amp_run_hmmsearch = false + amp_hmmsearch_models = null + amp_hmmsearch_savealignments = false + amp_hmmsearch_savetargets = false + amp_hmmsearch_savedomains = false + + amp_ampcombi_db_id = 'DRAMP' + amp_ampcombi_db = null + amp_ampcombi_parsetables_cutoff = 0.6 + amp_ampcombi_parsetables_ampir = '.ampir.tsv' + amp_ampcombi_parsetables_amplify = '.amplify.tsv' + amp_ampcombi_parsetables_macrel = '.macrel.prediction' + amp_ampcombi_parsetables_hmmsearch = '.hmmer_hmmsearch.txt' + amp_ampcombi_parsetables_aalength = 120 + amp_ampcombi_parsetables_dbevalue = 5 + amp_ampcombi_parsetables_hmmevalue = 0.06 + amp_ampcombi_parsetables_windowstopcodon = 60 + amp_ampcombi_parsetables_windowtransport = 11 + amp_ampcombi_parsetables_removehitswostopcodons = false + amp_ampcombi_cluster_covmode = 0 + amp_ampcombi_cluster_mode = 1 + amp_ampcombi_cluster_coverage = 0.8 + amp_ampcombi_cluster_seqid = 0.4 + amp_ampcombi_cluster_sensitivity = 4.0 + amp_ampcombi_cluster_removesingletons = false + amp_ampcombi_cluster_minmembers = 0 // ARG options - run_arg_screening = false - - arg_skip_fargene = false - arg_fargene_hmmmodel = 'class_a,class_b_1_2,class_b_3,class_c,class_d_1,class_d_2,qnr,tet_efflux,tet_rpg,tet_enzyme' - arg_fargene_savetmpfiles = false - arg_fargene_minorflength = 90 - arg_fargene_score = null - arg_fargene_translationformat = 'pearson' - arg_fargene_orffinder = false - - arg_skip_rgi = false - arg_rgi_db = null - arg_rgi_savejson = false - arg_rgi_savetmpfiles = false - arg_rgi_alignmenttool = 'BLAST' - arg_rgi_includeloose = false - arg_rgi_includenudge = false - arg_rgi_lowquality = false - arg_rgi_data = 'NA' - arg_rgi_split_prodigal_jobs = true - - arg_skip_amrfinderplus = false - arg_amrfinderplus_db = null - arg_amrfinderplus_identmin = -1 - arg_amrfinderplus_coveragemin = 0.5 - arg_amrfinderplus_translationtable = 11 - arg_amrfinderplus_plus = false - arg_amrfinderplus_name = false - - arg_skip_deeparg = false - arg_deeparg_db = null - arg_deeparg_db_version = 2 + run_arg_screening = false + + arg_skip_fargene = false + arg_fargene_hmmmodel = 'class_a,class_b_1_2,class_b_3,class_c,class_d_1,class_d_2,qnr,tet_efflux,tet_rpg,tet_enzyme' + arg_fargene_savetmpfiles = false + arg_fargene_minorflength = 90 + arg_fargene_score = null + arg_fargene_translationformat = 'pearson' + arg_fargene_orffinder = false + + arg_skip_rgi = false + arg_rgi_db = null + arg_rgi_savejson = false + arg_rgi_savetmpfiles = false + arg_rgi_alignmenttool = 'BLAST' + arg_rgi_includeloose = false + arg_rgi_includenudge = false + arg_rgi_lowquality = false + arg_rgi_data = 'NA' + arg_rgi_split_prodigal_jobs = true + + arg_skip_amrfinderplus = false + arg_amrfinderplus_db = null + arg_amrfinderplus_identmin = -1 + arg_amrfinderplus_coveragemin = 0.5 + arg_amrfinderplus_translationtable = 11 + arg_amrfinderplus_plus = false + arg_amrfinderplus_name = false + + arg_skip_deeparg = false + arg_deeparg_db = null + arg_deeparg_db_version = 2 // Make sure to update on module version bump! - arg_deeparg_model = 'LS' - arg_deeparg_minprob = 0.8 - arg_deeparg_alignmentidentity = 50 - arg_deeparg_alignmentevalue = 1E-10 - arg_deeparg_alignmentoverlap = 0.8 - arg_deeparg_numalignmentsperentry = 1000 + arg_deeparg_model = 'LS' + arg_deeparg_minprob = 0.8 + arg_deeparg_alignmentidentity = 50 + arg_deeparg_alignmentevalue = 1E-10 + arg_deeparg_alignmentoverlap = 0.8 + arg_deeparg_numalignmentsperentry = 1000 - arg_skip_abricate = false - arg_abricate_db_id = 'ncbi' - arg_abricate_db = null - arg_abricate_minid = 80 - arg_abricate_mincov = 80 + arg_skip_abricate = false + arg_abricate_db_id = 'ncbi' + arg_abricate_db = null + arg_abricate_minid = 80 + arg_abricate_mincov = 80 - arg_hamronization_summarizeformat = 'tsv' + arg_hamronization_summarizeformat = 'tsv' - arg_skip_argnorm = false + arg_skip_argnorm = false // BGC options - run_bgc_screening = false - - bgc_mincontiglength = 3000 - bgc_savefilteredcontigs = false - - bgc_skip_antismash = false - bgc_antismash_db = null - bgc_antismash_installdir = null - bgc_antismash_cbgeneral = false - bgc_antismash_cbknownclusters = false - bgc_antismash_cbsubclusters = false - bgc_antismash_smcogtrees = false - bgc_antismash_ccmibig = false - bgc_antismash_contigminlength = 3000 - bgc_antismash_hmmdetectionstrictness = 'relaxed' - bgc_antismash_pfam2go = false - bgc_antismash_rre = false - bgc_antismash_taxon = 'bacteria' - bgc_antismash_tfbs = false - - bgc_skip_deepbgc = false - bgc_deepbgc_db = null - bgc_deepbgc_score = 0.5 - bgc_deepbgc_prodigalsinglemode = false - bgc_deepbgc_mergemaxproteingap = 0 - bgc_deepbgc_mergemaxnuclgap = 0 - bgc_deepbgc_minnucl = 1 - bgc_deepbgc_minproteins = 1 - bgc_deepbgc_mindomains = 1 - bgc_deepbgc_minbiodomains = 0 - bgc_deepbgc_classifierscore = 0.5 - - bgc_skip_gecco = false - bgc_gecco_cds = 3 - bgc_gecco_threshold = 0.8 - bgc_gecco_pfilter = 1E-9 - bgc_gecco_edgedistance = 0 - bgc_gecco_mask = false - - bgc_run_hmmsearch = false - bgc_hmmsearch_models = null - bgc_hmmsearch_savealignments = false - bgc_hmmsearch_savetargets = false - bgc_hmmsearch_savedomains = false + run_bgc_screening = false + + bgc_mincontiglength = 3000 + bgc_savefilteredcontigs = false + + bgc_skip_antismash = false + bgc_antismash_db = null + bgc_antismash_installdir = null + bgc_antismash_cbgeneral = false + bgc_antismash_cbknownclusters = false + bgc_antismash_cbsubclusters = false + bgc_antismash_smcogtrees = false + bgc_antismash_ccmibig = false + bgc_antismash_contigminlength = 3000 + bgc_antismash_hmmdetectionstrictness = 'relaxed' + bgc_antismash_pfam2go = false + bgc_antismash_rre = false + bgc_antismash_taxon = 'bacteria' + bgc_antismash_tfbs = false + + bgc_skip_deepbgc = false + bgc_deepbgc_db = null + bgc_deepbgc_score = 0.5 + bgc_deepbgc_prodigalsinglemode = false + bgc_deepbgc_mergemaxproteingap = 0 + bgc_deepbgc_mergemaxnuclgap = 0 + bgc_deepbgc_minnucl = 1 + bgc_deepbgc_minproteins = 1 + bgc_deepbgc_mindomains = 1 + bgc_deepbgc_minbiodomains = 0 + bgc_deepbgc_classifierscore = 0.5 + + bgc_skip_gecco = false + bgc_gecco_cds = 3 + bgc_gecco_threshold = 0.8 + bgc_gecco_pfilter = 1E-9 + bgc_gecco_edgedistance = 0 + bgc_gecco_mask = false + + bgc_run_hmmsearch = false + bgc_hmmsearch_models = null + bgc_hmmsearch_savealignments = false + bgc_hmmsearch_savetargets = false + bgc_hmmsearch_savedomains = false // Config options - config_profile_name = null - config_profile_description = null + 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 @@ -266,10 +266,10 @@ includeConfig 'conf/base.config' profiles { debug { - dumpHashes = true - process.beforeScript = 'echo $HOSTNAME' - cleanup = false - nextflow.enable.configProcessNamesValidation = true + dumpHashes = true + process.beforeScript = 'echo $HOSTNAME' + cleanup = false + nextflow.enable.configProcessNamesValidation = true } conda { conda.enabled = true diff --git a/nextflow_schema.json b/nextflow_schema.json index 4028d21e..05e818af 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -508,51 +508,51 @@ }, "fa_icon": "fas fa-file-signature" }, - "function_interproscan": { - "title": "Function: INTERPROSCAN", + "protein_annotation": { + "title": "Protein Annotation: INTERPROSCAN", "type": "object", "description": "Functionally annotates all annotated coding regions.", "default": "", "properties": { - "run_function_interproscan": { + "run_protein_annotation_interproscan": { "type": "boolean", "description": "Activates the functional annotation of annotated coding regions.", "help_text": "Activates the annotation of annotated coding regions using [InterProScan](https://github.com/ebi-pf-team/interproscan). These annotate the locus tags to protein and domain levels according to the InterPro database. \n\nMore details can be found in the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/index.html)." }, - "function_interproscan_db_url": { + "protein_annotation_interproscan_db_url": { "type": "string", "default": "http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz", - "help_text": "This allows the user to change the default InterProScan version for coding region functional annotation, which allows for the latest release usage. By default this is set to `http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz`. ", + "help_text": "This allows the user to change the InterProScan database version that for coding region functional annotation that the pipeline will download for you automatically if you don't supply a pre-supplied database to `--protein_annotation_interproscan_db`. Changing this URL allows for the use of the latest database release. By default this is set to `http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz`. ", "description": "Change the database version used for annotation." }, - "function_interproscan_db": { + "protein_annotation_interproscan_db": { "type": "string", - "help_text": "Use this to supply the path to a pre- downloaded InterProScan database. This can be any unziped InterProScan version. By default the database version '5.67-99.0' is downloaded. \n\nFor more details on where to find different InterProScan databases see tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/UserDocs.html#obtaining-a-copy-of-interproscan).\n", + "help_text": "Use this to supply the path to a pre-downloaded InterProScan database. This can be any unzipped InterProScan version. By default the database version '5.67-99.0' is downloaded. \n\nFor more details on where to find different InterProScan databases see tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/UserDocs.html#obtaining-a-copy-of-interproscan).\n", "description": "Path to pre-downloaded database." }, - "function_interproscan_applications": { + "protein_annotation_interproscan_applications": { "type": "string", "default": "PANTHER,ProSiteProfiles,ProSitePatterns,Pfam", - "help_text": "Assigns the database /s to be used to annotate the coding regions annotated during the 'ANNOTATION' workflow of the pipeline. By default these include `PANTHER,ProSiteProfiles,ProSitePatterns,Pfam`. \n- PANTHER (Protein ANalysis THrough Evolutionary Relationships): genes classified by their functions, using published scientific experimental evidence and evolutionary relationships. \n- PROSITE: protein domains, families, functional sites and specific patterns and profiles to identify them. \n- PFAM: protein families, represented by multiple sequence alignments and hidden Markov models (HMMs). \n\nThese databases were chosen based on the AMP workflow and therefore, with only these databases, do we guarantee the integration of the results to the AMPcombi final summary. \n\nNOTE: Currently, no integration of the results are implemented for the BGC and the ARG final summary tables. \n\nFor more information about all possible databases see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--applications`", + "help_text": "A comma separated string specifying the database(s) to be used to annotate the coding regions annotated during the 'ANNOTATION' workflow of the pipeline. By default these include `PANTHER,ProSiteProfiles,ProSitePatterns,Pfam`. \n- PANTHER (Protein ANalysis THrough Evolutionary Relationships): genes classified by their functions, using published scientific experimental evidence and evolutionary relationships. \n- PROSITE: protein domains, families, functional sites and specific patterns and profiles to identify them. \n- PFAM: protein families, represented by multiple sequence alignments and hidden Markov models (HMMs). \n\nThese databases were chosen based on the AMP workflow and therefore, with only these databases, do we guarantee the integration of the results to the AMPcombi final summary. \n\nNOTE: Currently, no integration of the results are implemented for the BGC and the ARG final summary tables. \n\nFor more information about all possible databases see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--applications`", "description": "Assigns the database /s to be used to annotate the coding regions." }, - "function_interproscan_enableprecalc": { + "protein_annotation_interproscan_enableprecalc": { "type": "boolean", - "help_text": "This decreases the speed of functional annotation with InterProScan by pre-calculating matches found in the UniProtKB, thereby identifying unique matches in the query sequences for faster annotation. By default this is turned OFF.\n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `---diasable-precalc`", + "help_text": "This increases the speed of functional annotation with InterProScan by pre-calculating matches found in the UniProtKB, thereby identifying unique matches in the query sequences for faster annotation. By default this is turned OFF.\n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `---diasable-precalc`", "description": "Pre-calculates residue mutual matches." }, - "function_interproscan_enableresidueannot": { + "protein_annotation_interproscan_enableresidueannot": { "type": "boolean", - "help_text": "This removes the residue annotation from the final XML and JSON output files, which we do not supply as output files from InerProScan. This is by default turned OFF.\n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--disable-residue-annot`", + "help_text": "Activating this flag will remove the residue annotation from the final XML and JSON output files, which we do not supply as output files from InerProScan. \n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--disable-residue-annot`", "description": "Enable residue annotation in XML and JSON files." }, - "function_interproscan_disableresidueannottsv": { + "protein_annotation_interproscan_disableresidueannottsv": { "type": "boolean", - "help_text": "This disables the addition of the annotations assigned according to the databases activated to the final `_interproscan.tsv` file. Turning this ON will remove the annotations from the final table. We don't recommend turning this ON to ensure a successful run. \n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--enable-tsv-residue-annot`\n", + "help_text": "This disables the addition of the annotations assigned according to the databases activated to the final `_interproscan.tsv` file. Turning this on will remove the annotations from the final table. It is not recommended to use this option, as it will cause a run failure because the format of the resulting files will no longer be adequate for integration in the final summary tables. Currently, only applicable for AMPcombi2. \n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--enable-tsv-residue-annot`\n", "description": "Removes annotations from TSV file." } }, - "help_text": "This subworkflow adds functional information to all annotated coding regions. Currently, only annotation with InterProScan is integrated in the subworkflow. " + "help_text": "This subworkflow adds additional protein annotations to all annotated coding regions. Currently, only annotation with InterProScan is integrated in the subworkflow. " }, "database_downloading_options": { "title": "Database downloading options", @@ -1619,7 +1619,7 @@ "$ref": "#/$defs/annotation_pyrodigal" }, { - "$ref": "#/$defs/function_interproscan" + "$ref": "#/$defs/protein_annotation" }, { "$ref": "#/$defs/database_downloading_options" diff --git a/subworkflows/local/amp.nf b/subworkflows/local/amp.nf index 77665f28..7bab1f57 100644 --- a/subworkflows/local/amp.nf +++ b/subworkflows/local/amp.nf @@ -130,7 +130,7 @@ workflow AMP { ch_summary_count = ch_ampcombi_summaries.map { it.size() }.sum() if ( ch_summary_count == 0 || ch_summary_count == 1 ) { - log.warn("[nf-core/funcscan] AMPCOMBI2: ${ch_summary_count} file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.") + log.warn("[nf-core/funcscan] AMPCOMBI2: ${ch_summary_count} file(s) passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.") } else { AMPCOMBI2_COMPLETE(ch_ampcombi_summaries) ch_versions = ch_versions.mix( AMPCOMBI2_COMPLETE.out.versions ) diff --git a/subworkflows/local/function.nf b/subworkflows/local/protein_annotation.nf similarity index 81% rename from subworkflows/local/function.nf rename to subworkflows/local/protein_annotation.nf index 4e08bf08..d8189343 100644 --- a/subworkflows/local/function.nf +++ b/subworkflows/local/protein_annotation.nf @@ -5,7 +5,7 @@ include { INTERPROSCAN_DATABASE } from '../../modules/local/interproscan_download' include { INTERPROSCAN } from '../../modules/nf-core/interproscan/main' -workflow FUNCTION { +workflow PROTEIN_ANNOTATION { take: faas // tuple val(meta), path(PROKKA/PRODIGAL.out.faa) @@ -17,18 +17,19 @@ workflow FUNCTION { ch_faa_for_interproscan = faas - if ( params.function_interproscan_db != null ) { + if ( params.protein_annotation_interproscan_db != null ) { ch_interproscan_db = Channel - .fromPath( params.function_interproscan_db ) + .fromPath( params.protein_annotation_interproscan_db ) .first() } else { - INTERPROSCAN_DATABASE ( params.function_interproscan_db_url ) + INTERPROSCAN_DATABASE ( params.protein_annotation_interproscan_db_url ) ch_versions = ch_versions.mix( INTERPROSCAN_DATABASE.out.versions ) ch_interproscan_db = ( INTERPROSCAN_DATABASE.out.db ) } INTERPROSCAN( ch_faa_for_interproscan, ch_interproscan_db ) - ch_interproscan_tsv = ch_interproscan_tsv.mix(INTERPROSCAN.out.tsv) + ch_versions = ch_versions.mix( INTERPROSCAN.out.versions ) + ch_interproscan_tsv = ch_interproscan_tsv.mix( INTERPROSCAN.out.tsv ) // Current INTERPROSCAN version 5.59_91.0 only includes 13 columns and not 15 which ampcombi expects, so we added them here ch_interproscan_tsv_modified = INTERPROSCAN.out.tsv diff --git a/workflows/funcscan.nf b/workflows/funcscan.nf index 6becdd5a..453dbd87 100644 --- a/workflows/funcscan.nf +++ b/workflows/funcscan.nf @@ -4,11 +4,11 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -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_funcscan_pipeline' +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_funcscan_pipeline' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -19,12 +19,12 @@ include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // -include { ANNOTATION } from '../subworkflows/local/annotation' -include { FUNCTION } from '../subworkflows/local/function' -include { AMP } from '../subworkflows/local/amp' -include { ARG } from '../subworkflows/local/arg' -include { BGC } from '../subworkflows/local/bgc' -include { TAXA_CLASS } from '../subworkflows/local/taxa_class' +include { ANNOTATION } from '../subworkflows/local/annotation' +include { PROTEIN_ANNOTATION } from '../subworkflows/local/protein_annotation' +include { AMP } from '../subworkflows/local/amp' +include { ARG } from '../subworkflows/local/arg' +include { BGC } from '../subworkflows/local/bgc' +include { TAXA_CLASS } from '../subworkflows/local/taxa_class' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -177,9 +177,9 @@ workflow FUNCSCAN { } /* - FUNCTION + PROTEIN ANNOTATION */ - if (params.run_function_interproscan) { + if (params.run_protein_annotation_interproscan) { def filtered_faas = ch_prepped_input.faas.filter { meta, file -> if (file != [] && file.isEmpty()) { log.warn("[nf-core/funcscan] Annotation of the following sample produced an empty FAA file. InterProScan classification of the CDS requiring this file will not be executed: ${meta.id}") @@ -189,16 +189,16 @@ workflow FUNCSCAN { SEQKIT_SEQ_FILTER(filtered_faas) ch_versions = ch_versions.mix(SEQKIT_SEQ_FILTER.out.versions) - ch_input_for_function = SEQKIT_SEQ_FILTER.out.fastx + ch_input_for_protein_annotation = SEQKIT_SEQ_FILTER.out.fastx - FUNCTION ( - ch_input_for_function + PROTEIN_ANNOTATION ( + ch_input_for_protein_annotation ) - ch_versions = ch_versions.mix(FUNCTION.out.versions) + ch_versions = ch_versions.mix(PROTEIN_ANNOTATION.out.versions) - ch_interproscan_tsv = FUNCTION.out.tsv.map { meta, file -> + ch_interproscan_tsv = PROTEIN_ANNOTATION.out.tsv.map { meta, file -> if (file == [] || file.isEmpty()) { - log.warn("[nf-core/funcscan] Functional annotation with INTERPROSCAN produced an empty TSV file. Passing empty file for ${meta.id}.") + log.warn("[nf-core/funcscan] Protein annotation with INTERPROSCAN produced an empty TSV file. No protein annotation will be added for ${meta.id}.") [meta, []] } else { [meta, file] From 8c8aeaf4818253acf1d8b7897ea26d8da56469d9 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Fri, 17 Jan 2025 16:14:42 +0100 Subject: [PATCH 097/175] fix prettier --- docs/output.md | 4 ++-- docs/usage.md | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/output.md b/docs/output.md index edd7c5a9..06ce1068 100644 --- a/docs/output.md +++ b/docs/output.md @@ -232,7 +232,7 @@ Output Summaries: Output files - `interproscan/` - - `_cleaned.faa`: clean version of the fasta files (in amino acid format) generated by one of the annotation tools (i.e. Pyrodigal, Prokka, Bakta or Prokke). These contain sequences with no special characters (for eg. '*' or '-'). + - `_cleaned.faa`: clean version of the fasta files (in amino acid format) generated by one of the annotation tools (i.e. Pyrodigal, Prokka, Bakta or Prokke). These contain sequences with no special characters (for eg. '\*' or '-'). - `_interproscan_faa.tsv`: predicted proteins and domains using the InterPro database in TSV format
@@ -490,7 +490,7 @@ Note that filtered FASTA is only used for BGC workflow for run-time optimisation - `/*_mmseqs_matches.txt*`: alignment file generated by MMseqs2 for each sample :::info -In some cases, when the AMP workflow is turned on, only summary files per sample will be created in the output folder with **NO** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster.tsv` files and hence no taxonomic classifications will be merged (if the taxonomic classification subworkflow is turned on). This can occur when strictly setting parameters which can lead to no AMP hits found in any of the samples or in only one sample. Look out for `[nf-core/funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.`in the stdout or `.nextflow.log` file. +In some cases, when the AMP workflow is turned on, only summary files per sample will be created in the output folder with **NO** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster.tsv` files and hence no taxonomic classifications will be merged (if the taxonomic classification subworkflow is turned on). This can occur when strictly setting parameters which can lead to no AMP hits found in any of the samples or in only one sample. Look out for `[nf-core/funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.`in the stdout or `.nextflow.log` file. ::: AMP summary table header descriptions using DRAMP as reference database diff --git a/docs/usage.md b/docs/usage.md index b52d8ea4..d8d5e0ad 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -271,9 +271,10 @@ This is due to an incompatibility issue of Prodigal's output `.gbk` file with mu ::: :::tip + - If `--run_protein_annotation_interproscan` is given, protein and domain classifications of the coding regions are generated and the output is then integrated into the `AMPcombi parsetables` resulting table for every sample and the complete summary files e.g., `Ampcombi_summary.tsv`. -- In some cases, when the AMP workflow is turned on, only the summary files per sample will be created in the output folder with **NO** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster.tsv` files and hence no taxonomic classifications will be merged (if the taxonomic classification subworkflow is turned on). This can occur when strictly setting parameters which can lead to no AMP hits found in any of the samples or in only one sample. Look out for `[nf-core/funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.`in the stdout or `.nextflow.log` file. -::: +- In some cases, when the AMP workflow is turned on, only the summary files per sample will be created in the output folder with **NO** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster.tsv` files and hence no taxonomic classifications will be merged (if the taxonomic classification subworkflow is turned on). This can occur when strictly setting parameters which can lead to no AMP hits found in any of the samples or in only one sample. Look out for `[nf-core/funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.`in the stdout or `.nextflow.log` file. + ::: ### Abricate From 3cbf8b163f477a42fba8bfc549ed960946e1329c Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Sun, 19 Jan 2025 15:25:27 +0000 Subject: [PATCH 098/175] [automated] Fix code linting --- modules/nf-core/mmseqs/createdb/environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nf-core/mmseqs/createdb/environment.yml b/modules/nf-core/mmseqs/createdb/environment.yml index 986f560d..235ad03a 100644 --- a/modules/nf-core/mmseqs/createdb/environment.yml +++ b/modules/nf-core/mmseqs/createdb/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=16.747c6 \ No newline at end of file + - bioconda::mmseqs2=16.747c6 From 296c032fb32729e4764d271752bfe017264c977b Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Mon, 20 Jan 2025 14:35:31 +0000 Subject: [PATCH 099/175] Template update for nf-core/tools version 3.1.2 --- .github/PULL_REQUEST_TEMPLATE.md | 4 +- .github/workflows/ci.yml | 2 + .github/workflows/download_pipeline.yml | 28 +- .nf-core.yml | 7 +- CHANGELOG.md | 2 +- CITATIONS.md | 4 +- README.md | 12 +- assets/multiqc_config.yml | 4 +- assets/nf-core-funcscan_logo_light.png | Bin 74373 -> 74373 bytes assets/schema_input.json | 2 +- conf/igenomes.config | 440 ------------------ conf/igenomes_ignored.config | 9 - conf/modules.config | 4 - conf/test.config | 3 +- conf/test_full.config | 4 +- docs/images/nf-core-funcscan_logo_dark.png | Bin 28033 -> 28033 bytes docs/images/nf-core-funcscan_logo_light.png | Bin 24197 -> 24169 bytes docs/output.md | 15 +- docs/usage.md | 3 +- main.nf | 13 - modules.json | 5 - modules/nf-core/fastqc/environment.yml | 5 - modules/nf-core/fastqc/main.nf | 64 --- modules/nf-core/fastqc/meta.yml | 67 --- modules/nf-core/fastqc/tests/main.nf.test | 309 ------------ .../nf-core/fastqc/tests/main.nf.test.snap | 392 ---------------- modules/nf-core/fastqc/tests/tags.yml | 2 - nextflow.config | 16 +- nextflow_schema.json | 44 +- ro-crate-metadata.json | 41 +- .../utils_nfcore_funcscan_pipeline/main.nf | 38 -- workflows/funcscan.nf | 9 - 32 files changed, 64 insertions(+), 1484 deletions(-) delete mode 100644 conf/igenomes.config delete mode 100644 conf/igenomes_ignored.config delete mode 100644 modules/nf-core/fastqc/environment.yml delete mode 100644 modules/nf-core/fastqc/main.nf delete mode 100644 modules/nf-core/fastqc/meta.yml delete mode 100644 modules/nf-core/fastqc/tests/main.nf.test delete mode 100644 modules/nf-core/fastqc/tests/main.nf.test.snap delete mode 100644 modules/nf-core/fastqc/tests/tags.yml diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 565c77f8..b6e5cebd 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/nf-core/funcscan/tree/main/.github/CONTRIBUTING.md) +Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/funcscan/tree/master/.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/nf-core/funcscan/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/nf-core/funcscan/tree/master/.github/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/funcscan _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] Make sure your code lints (`nf-core pipelines lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 72e51e1f..6b0678b7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -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/.nf-core.yml b/.nf-core.yml index 31d1c17b..801c4134 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,6 +1,6 @@ lint: actions_ci: false -nf_core_version: 3.1.1 +nf_core_version: 3.1.2 repository_type: pipeline template: author: Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James @@ -11,4 +11,7 @@ template: name: funcscan org: nf-core outdir: . - version: 2.0.0 + skip_features: + - igenomes + - fastqc + version: 2.1.0dev diff --git a/CHANGELOG.md b/CHANGELOG.md index de392b4c..a1d052a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ 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). -## v2.0.0 - [date] +## v2.1.0dev - [date] Initial release of nf-core/funcscan, created with the [nf-core](https://nf-co.re/) template. diff --git a/CITATIONS.md b/CITATIONS.md index 365d4b0a..786f39ed 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -10,9 +10,7 @@ ## Pipeline tools -- [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) - -> Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online].- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) +- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. diff --git a/README.md b/README.md index e315bfec..521317a1 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,9 @@ nf-core/funcscan -[![GitHub Actions CI Status](https://github.com/nf-core/funcscan/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/ci.yml) + + +[![GitHub Actions CI Status](https://github.com/nf-core/funcscan/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/ci.yml) [![GitHub Actions Linting Status](https://github.com/nf-core/funcscan/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/funcscan/results)[![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) @@ -27,12 +29,12 @@ -1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) +2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) ## Usage > [!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. +> 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. - + + + 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/multiqc_config.yml b/assets/multiqc_config.yml index 7ff9d40a..bf128717 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,7 @@ report_comment: > - This report has been generated by the nf-core/funcscan + This report has been generated by the nf-core/funcscan analysis pipeline. For information about how to interpret these results, please see the - documentation. + documentation. report_section_order: "nf-core-funcscan-methods-description": order: -1000 diff --git a/assets/nf-core-funcscan_logo_light.png b/assets/nf-core-funcscan_logo_light.png index 24b2ae9504eb2e411b7b2123ec795b412302cd14..f63ae1f578d07b38b7e68ffa7cdf681b4b14b9bb 100644 GIT binary patch delta 22124 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 delta 22031 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 diff --git a/assets/schema_input.json b/assets/schema_input.json index 14292914..df1294f0 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/nf-core/funcscan/main/assets/schema_input.json", + "$id": "https://raw.githubusercontent.com/nf-core/funcscan/master/assets/schema_input.json", "title": "nf-core/funcscan pipeline - params.input schema", "description": "Schema for the file provided with params.input", "type": "array", diff --git a/conf/igenomes.config b/conf/igenomes.config deleted file mode 100644 index 3f114377..00000000 --- a/conf/igenomes.config +++ /dev/null @@ -1,440 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for iGenomes paths -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Defines reference genomes using iGenome paths. - Can be used by any config that customises the base path using: - $params.igenomes_base / --igenomes_base ----------------------------------------------------------------------------------------- -*/ - -params { - // illumina iGenomes reference file paths - genomes { - 'GRCh37' { - fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" - } - 'GRCh38' { - fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - } - 'CHM13' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAIndex/" - bwamem2 = "${params.igenomes_base}/Homo_sapiens/UCSC/CHM13/Sequence/BWAmem2Index/" - gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/CHM13/Annotation/Genes/genes.gtf" - gff = "ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/009/914/755/GCF_009914755.1_T2T-CHM13v2.0/GCF_009914755.1_T2T-CHM13v2.0_genomic.gff.gz" - mito_name = "chrM" - } - 'GRCm38' { - fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "1.87e9" - blacklist = "${projectDir}/assets/blacklists/GRCm38-blacklist.bed" - } - 'TAIR10' { - fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt" - mito_name = "Mt" - } - 'EB2' { - fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt" - } - 'UMD3.1' { - fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt" - mito_name = "MT" - } - 'WBcel235' { - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" - mito_name = "MtDNA" - macs_gsize = "9e7" - } - 'CanFam3.1' { - fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt" - mito_name = "MT" - } - 'GRCz10' { - fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'BDGP6' { - fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" - mito_name = "M" - macs_gsize = "1.2e8" - } - 'EquCab2' { - fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt" - mito_name = "MT" - } - 'EB1' { - fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" - } - 'Galgal4' { - fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'Gm01' { - fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt" - } - 'Mmul_1' { - fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt" - mito_name = "MT" - } - 'IRGSP-1.0' { - fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" - mito_name = "Mt" - } - 'CHIMP2.1.4' { - fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt" - mito_name = "MT" - } - 'Rnor_5.0' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'Rnor_6.0' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'R64-1-1' { - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" - mito_name = "MT" - macs_gsize = "1.2e7" - } - 'EF2' { - fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "1.21e7" - } - 'Sbi1' { - fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt" - } - 'Sscrofa10.2' { - fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt" - mito_name = "MT" - } - 'AGPv3' { - fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" - mito_name = "Mt" - } - 'hg38' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - } - 'hg19' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg19-blacklist.bed" - } - 'mm10' { - fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "1.87e9" - blacklist = "${projectDir}/assets/blacklists/mm10-blacklist.bed" - } - 'bosTau8' { - fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed" - mito_name = "chrM" - } - 'ce10' { - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "9e7" - } - 'canFam3' { - fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt" - mito_name = "chrM" - } - 'danRer10' { - fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "1.37e9" - } - 'dm6' { - fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "1.2e8" - } - 'equCab2' { - fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt" - mito_name = "chrM" - } - 'galGal4' { - fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt" - mito_name = "chrM" - } - 'panTro4' { - fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt" - mito_name = "chrM" - } - 'rn6' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed" - mito_name = "chrM" - } - 'sacCer3' { - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" - readme = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "1.2e7" - } - 'susScr3' { - fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/version0.6.0/" - bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" - mito_name = "chrM" - } - } -} diff --git a/conf/igenomes_ignored.config b/conf/igenomes_ignored.config deleted file mode 100644 index b4034d82..00000000 --- a/conf/igenomes_ignored.config +++ /dev/null @@ -1,9 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for iGenomes paths -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Empty genomes dictionary to use when igenomes is ignored. ----------------------------------------------------------------------------------------- -*/ - -params.genomes = [:] diff --git a/conf/modules.config b/conf/modules.config index d203d2b6..f0b0d55a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,10 +18,6 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] - withName: FASTQC { - ext.args = '--quiet' - } - withName: 'MULTIQC' { ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } publishDir = [ diff --git a/conf/test.config b/conf/test.config index ece9397d..a9cafda1 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,6 +25,5 @@ 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 - genome = 'R64-1-1' + input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv' } diff --git a/conf/test_full.config b/conf/test_full.config index b919e3e2..01f50de9 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -19,6 +19,6 @@ params { // 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' - // Genome references - genome = 'R64-1-1' + // Fasta references + fasta = params.pipelines_testdata_base_path + 'viralrecon/genome/NC_045512.2/GCF_009858895.2_ASM985889v3_genomic.200409.fna.gz' } diff --git a/docs/images/nf-core-funcscan_logo_dark.png b/docs/images/nf-core-funcscan_logo_dark.png index be2cadd4ccb4e8c0f8e49f5c1686646ff9af5e9b..9c13157836aa0b466f634715c218fa5c3d574258 100644 GIT binary patch literal 28033 zcmd42^;a9r^9C9`#jOzBy|@>LP`tQ9p`-+Nr%>FjxI?j0B)GdvvEuGpDDHmqe!lnq z5BHaxljQ8q%?+~U{Sg498S5(2c#v_?&i)qE8KV>4SH()p|vc+Hy@*Pb<& z+uBd*o3-tAlbX(t0z3T;cMVu*89aXTI|Y53XoWR=nfNO_vF|hCl{4;ztw*cRP%P+8 zlgeqiY1$=BW$Y->X*w8)g+{?Gt2+pVO3&0!d?g+AJmR*QmAI{3#8)s52qoH7mz_oL zN$kn15466Bbxci&U zl`}9=R`M$puM7K<4irfA=f+-MkIQmMFOtiak^WrSf=+$^v|&le_TIhciOz*oiFccK zWOO~eN@*b{c^0qJZKfG#61YCIqSFW^^#ViWGmCQI9sUq$oZ2zB&MSlT4E2EXq7GV3`QJrCP>7&$jwC9GMBL2Jo^h0djNYYGLYdakYooNL{ z4`I^64Mf{SF{5Qv)&Lh>CzP|&2CAcb0dpUI^GkF(5Mt-Cm;8UCw*S>mG_>z_D3wp0 znn7`aGy@VSvHO;3?Jz};VWX9|U3lbPMfulqL?ke&zUSs!s{5^aK_h=fNUDF`|CWb9 zXQHN9JRNk|fJ+DXLcU#GBl_*!&!LTbc_VK`!m-DRSU=mRZxBc;9gRm5Y~mS9?6ccK z_Ig&N9^RR)@V})}mOPc%Tp%DU@x$Q`49KF(z3)G=zw7=>5wth0z+`6!{6+!=(by1r^Ytg6nW4hUVy|Oc5S}Bq)*1$h{kj4!PlV= zd0KW8vux}mU_-jC*ZiHB4?E+V6!`XV2l$*NrK*PJyFiLM-m>jY*nSyJwoIV^zd`uU zkIt~G1^}*ETVw6abJS$4m1u(0$$t}qd-UW>H6kd$x<*Zw>f%c@G5@cl5cJ(MQSe5I zQIJ5u$Z2T~B*$q3Y=3D9;e!}~zh_SjCY1pjLnG2GqFhVdF}hR#*=}ZJx(CDUVMCOr za7&lBv2&o#FAkNcx#f|p%qKZ>sQ#Nup$hI+(HLvZuUvCEd3i^kwjC`J zN3V;(;Mq^|$Nd|JTcZSQ&E!`9b6e15Q>UL4b=D|1?LgJypfv=chr!s`SV@k#t--N- zGb~fwlnv?+G(DRxpqTb#g#2%AFB)!#*@2G~tj!vVG|213h$aHkdG#^%Vq%(-ZRTH4 zk*H-SV%?Ru)9XxQG!0j-QYyxsmnaHO9c>9BGgxH(th7&;Mb;LbQi2 z=QHRRIXoK|2l4RC&eYkiWAM;nFwm4{TKta`T|5QOIj#g`8_eayQr_F(EkW*Sn=U6b z#b`vNK1?twudajErzg(%3`ALs@B?$ML-tXp;XsOI9%jl&Txr6d(WU)G;cHPH ztDucbi7xt1ij$@#{J+DIdh?_ez-o&mI?{RiZqlGV&i5|F^jDuzKQh|9X9hclZ;awJ zvj+t%;fDMGghmP!Z^q~WX+pzXkismp$#Hx4I$wX?u*)@thljq@kcXK8Be+R_t@_li zUF1@_c5g!W@LH3+bKPdQTH~c-n&}RW;vheINV@lMl?3Koi!&)NVLAi+8AiQ(c z?t{maY)7Zp14`q^cx0Ps&ta^6mEV^EQNtO6RXCED5y@~rwc2&|LZiL5rZn552KWOp zU$F6DBriiB#+B@a95npAOdCF=p&a}z-lma(@M974lI8pZUVBZKD4&kkh#Q&yzH0I){IOZ#|s&swaZ z$3_vg)^~RI$hu{HKUZxD9q>;6+tc6PREteR)9S=q?CxCrC$OSlgg@G+nYi@O2vM@mQc zK^o0uvH5}u^+&D$FlSRhvr>(ai`60wo$Xv%?)8hAS{-P!B)|&A z5@lTM$BaWnub;&I(ny8vaeSQER3Ja9Yx!>pRf-#J(LX&qitq@`wKqE*wBPt6RuKt| zzTw!fr&4j#d|=yZrXv*kww<3RRxJZcHz`^E(J~U#zuW#2OHK-b4a!I{V!`l3tTo7Z zIoU((*~f3cwychFXxi#lOriX`tE-$PoA5A8ZyfLlywg)?Af))MPWArvu(l%Fz}NDx z4TpE(y{@Tk0!xOS{Y$b%2a!Sc^i&EPO)zLX>qtnJOoS7YzsZ;d`7|4WgEa4tf%TfU zMQ)Q1_WFQlj!(RqD?TAce#2+2=n1ogOF=sq>R%HCt=f*#KrZju+ zTCQw+2aSj=S@?FV+#i*TRpC>#T7Y4@iqDbV;3m|7A@3vQpIL^GG12%zwfL26fB8r~F#A zmAKN%%xhGzq$Re{F+V|kyfl)G8NqPN(UqU$?OUTr;iHwzlNfkq#(updV!X`YK8=Km z705F7yf*rd%=E;NIAZk2sV3W(w-)5nk!pkZ3RO#QgCu=Qm1W?U)iuhVOY&5oOmwG) z0o~n`c$&FjjGCoNX6M1EOnsis@Sl%a_wnq71SHf47gq|JlClp#L0a&4oz=p>%Z9I4 zS1^N`32tfpa)El&$#g>kN9IRH-70ltMLuSJ&KLThJV9!3-${Ena%0-V7HTll94M)l ziq8%L-E|Huge&|XTCP#Qk&=t2zCEU%gpUkkYDM~nZ`v-l`gwbfk~x2 z=PEcYCLe*izlq|$=|S!khp5B-=gro!lu)GNaN9v|uvaYx&44&cmU*;F80*-N`cRMi z+5tuhxKm{CoL=0zfj_yh6nWcYpvyN>jEfB&B<`8C?`W$c%*VKk(n-Pf?~m^N6(JS+ zh0u)ho4=OtR>?N!%V22d`c0$@^nTRuyT9OF0-wbjnk6dUiSsq~FBJvmof?FfVc@Hk zGr2iY^Z6{f60t9$jJg0;c1WZoC6(9T-QpEKyp-j5zYqu_qc#g%45&aOnN;#%kFOzDxn21VIq)U5%6En@9$fXOvMUR zL+7a?2=uHN*KEsdZ+v6*?{)M8V-cRrT{BIKAF{Mf2GoVfEiK)Ma{smkQ!Sq*Wwj&? z@Fv9-t3I#G2{oV*}_xWXjJG+W$)du-6@gbf(H*=Ab##`K73f6N+<*FJv`N!nz5qeEs!Rh&2* zQr5_}Wnn-T57&ft|7QLJm4S&BDgcidZ!%5KBsyL71F!b@ZP5Ru$F695 zZVyra=nUC}gQZ^=!5+*-$7m$gi!-9d6~WBsUU!sW@=4L`q#Syy3he-@YAmv zVzCDc@?e_f{~HDb-<`~q)LAbe*&qmVooP&^=~_xp<63_$JXAF-(TZL_VGztp759F6 zg%(hZJCbm|AsTDG`S&+;n+VyqH=rSC%PU+oEF8L3$}pWmkj&NpQ=wC(3r}>hC&i!2K=`L80svx=FUWMmNyC*)t|c$`$w4RQ4pt9~^gAk>SmgfYi60X4 zw#5v(0VujwFf#o^XN7{jIS6>U*pjj%Pozb6VpnlV74zCTpihKI`T4yD(ksLwZj}MN zNzxi;1`hKYSAAV&V|HK-&N3%Rnanu#Fd$=jF&u*3$ zt{rNGDwKW-$g*hr+Q43K(AQwpMJF23N2nK1OXK6?4fk7L_UI=rv+L)==msE?3yJBC zd;*I@{9*GZtY7E`(E;6$l3<(d>j=O_PiyAjS0}$iocm0=n=W4$fPfhQS(&E z^qVCiE}O}jwRKYez)+oG<@#-9hr?s0(0)`&B|qF!|K!4?{BYOilU`)@B@l;?qwr?m7dIl+z_VF)iYw}VPK-qVda_U^ZrmG8H)T3WBRRXBnOXfyPKzDJ|F zQWWd3Ihx#ibc(&8r$NQC~RK&I}#T`s66zrms@lx2F zHX<@$xjshzDr>`w1Q0^)V{HA-T5Syo2DKrT*hm9StZ%_17K=mKh%6}Y!C^VU)mk0TTO?Z zpUkO`>^Lo%k(E-RY{=5`gVt}+2eoB{PCy=G<4gFH&+3Lafm+17IT5;GI!oXN}e%JIc zI-fWhm2t0DAFSh#qf{_>qD1uR=IH=+TKqzEU6<|pv%g7M-DGm>>!yfq5a&#IH%e^h z^b!Ys{@byW<*$C|c)nUJ^>XI7Fr`ufxg*7zw~zzbozpVWS3Wm4c8VJ&)UHtx+TcXG zGjIRfiuMMWyq1708Ak5@>%`B$Ua}1qdpWp0orpdibI?P_j{PLs?>yn$NsygN5JX%C z+}?ZfMa2}l?fYT~Nk9rU^7x~NocgM`yz>@fzOvmmvOb^pFXQXb0Y&7RS}o%h*Lmke zddI(=zhc|~%_RO+Wa{M~%iP-NWxhibep@83nQJfO8b}H{V1|Hai2DkkdPdX4i4^$`IY37Z^Kxo9tUY!P$Ph*p^Vot)d@xj z{!_l1fQ)XkSVDCzD}3m{UWyW3S-1GR)uMv!w#JD}_uJBP54V)mpCmV7_?uUJ++o60 ztovk=M0DQKisFr?M7b{u(?~c;m$7**7$lMd(fS|uD|3Ze{ElZR+uf`+3*_b67OcKR z2i7x;POL;CF}bb1q>v<@G?|&75>T1cJQab3f;4IwTC3L1nPr(ngkTG0f&z82f&6}x z>8;d79=O{krdP^a)*7?<0e&zIg$sZ-Pvsu@Jm=kCt4hPC2L}m(C8vlzbNvS0=uNWU zX{k<_bUEK=9KYbI&ncUDn5)&j#tT4CL84pC6%IrYWV2uacf*jTq5b=irKMMT>s94> z_^Q?#WK)@mejT2^F z^qMm&_W5ufwMd~1AUfbPiIeN+v-=hB5Uufh&cNRIi?XWiLq809+qpZ*aGx-#_denn9r+@D6OBQUf+0%uR&`(e8`c}&N{g4UIYZemYi_4a^1Cm- z)bGRaSNpwo^^$1cag|;?gTR&>{t>Hfs16Q+s{9g5{$ z<1k4#zn+gbUzA1939=TM5Vest*cZlsH@ESKqgnY?zbN7h+L=o51w|b? zAX-r4U@unuRB~_VI;vn-GOEmR(Go8l3AD0S8-Lmb3waK>Q@xBvV9Zck1i~7~#zlX9F&TJ1sRgWYFP(>*)s(-EDW)qW zO;JFKW+9pnkB|E{c7Ek`Yd#zkjg%o4lz}LwPew)}#KC7vV$>>3A-xi*qE<@G226UdcSq(Q~@T_437sBJl z5N>|U6nPcFq}sCcp}h0kAO_&u!_+63b5lmN@N)zKr`P9S`wM1| zao>)c#mull`_3sD?*U(^=LW2zrL6Z*Mr67^? zS?VmWu0MZW{JbCH3n-#2vs_MQ2k42}iUxd~`$rYbM$O@Q(DJ<=9H4qy+KF%Zx_c+K zDj`It6P1zf*~ZB?6($(fPjH39eMR7_hij6!M21tjek~M=+}T|52~)%LPh5oMC_4^O zI0SS?6{~-Xr<&t4JW(A%zYEVUE{Z?4{hKxwPaQcqx{|&b=&yVk_&%&1qcFyFIg0g5 zYUCV@sv*1Q>+&-XyhCyX1%`S!a2K8WHKs!>ihpXwIu%GUM1)>$y6`r>4xwDr>++9$ zY-;j5S4hpGg7_$%o!>KESRSpqzq3w7wy`xsC9xx%?A%23VjsjGuW1iI6D!iP5Ha3~ zbmsWl*l?4EyCm3L`War1H@&`hZeCGNok?ruhU_V@GhPE5(lBhd$+pm&d2Cr z7HRy&8dwmPnQi~CYAb;YX>$#hwkct_9c{laA>e%Zmk?r7QfA|F9+CQ~=B`g^eby4; zpB0AqRU_y;^Gi^Ihu4>XbBpTUyGbXu{v?1f90%co*LD}ED}KCN=7GARX3)FKMzPdg zDhK-5?vyOoMI4#juSL^*_BN&n38wrp*=SbY_c~v5njb9(X%Blx#iUB2>I5{G&uQm> z1q1{f*G*9&4W<;6A4Tdk=m9C0(*7z=rj{zrC*l~}xzN3wpFy^Nw&Nr|X$12gdA(!70(Y>eOvl8^Sbrt{BxI&isr=MFbR_4 zRxD0GhbNJ5fN7uIh~`uL>^2iCkDhshO- za9ON2c;y0}W93iwW+Kxpd(_6&Z~yCy^YiV(V64!0m1q_UK-vf=)~EK`^r#inqqlEl zck_uLSIECfvhdVk3_N zb1$iz^TNiGG?=e5$@Pv#d=Tz8K3wP~B;$I6iPgELcmen^Y4_1$67u3J-DVvo|2@qC>jZgY>15Hq&z3Gm9+K0hSq<7%ihArpx?E($DIdO_Omu(* zZ(FJ!qLiAJ~5|`v=?cVU{XuvsNVd8SNa=i3T`Y0)=byb$wWvbHHTAX9|-OK zeaG0ej};*5e(Vf5m|jXdIx0CF({EtQf7Qj!{#h>|+iCzg`=dzV9_;dn2&!iID9;kS z@ohZdls3OO&5~qep2roNx^WJwpK{NqqMfsk>d%N?f>Vm&xC-WD`LL#uxQ5?{LHIWt z!Pc2wVf@k;Y0?JLeOVqOi@BLTv}t6cr0Z~%7VZpCDwUWQ(iMLb&`}bTK6`NgX03PO zODk?qHGt?XdW)1-&Z&9b`<9bTsz_qpIQ^M`a6g2NotS6)Upwdk{4#ZpR*4s1t8a2; z5VFbv_dr=>+*{{GlR}`xfpghur{89Np17kQnxhzp#4fMPaiL5-PA+X3juq>$87dwW z{I*ew;*Czd`*5e-;q7IG_$B1`uOL$U{(QIB`$J8pnDy)INVC0E)YFgF4cDa^-;;z} zazPEmz2eTqli2zcnJ=hajb)J726P&7q`t&1A$c;968taE`&sFU8>>CEgK7mavR5x? zOIOcqlSwTWjOrO{XdAY=9P3>lO!8H#rIu%P-W|)lK%-3qi;_ZbPcQ_IEfp|^w)&$) z_B`C}oj)X@jq@xO%Hn^v!;}V21mk{6{#n#|v^u^trR|kdX?ljGSaL#Z+!B1}4t=p= z!|1h-)DTjdJtwuY!)-GxS8?ul9OTQf?4j6&r${v+2H9@_cQtgGdW`n@B-24k3Iw?K z!~IMq4*~G2{wn8vLK!i;5n)P>>!L%J#$XM``cIX)S{M@27ed*a%gECm**;7AL+c$4 zwk?oD{=|Ak3_CxsyF6JGsP{Pjp4lc*lO=EYNV#H;CSM*LM+V^#VDu^yaIeJexu?1N zDv4aA_2wEz(83lTN?uvh40+RSeBC93lRYW#%%8@dTrn4|X%=pi#QH#D=6^;C&Czm1 zlP!WRO$MT1pjr+@$G8{4;1@M&SEUubR|O4iABdt>LQrM8C9y1nUg2BRP;Nfrekerp z3wf-w*HNgTy_$*1x+r3{hOVw49`H(xmh~zpyXh)%^r^hU;%+F^&^qLu3#Xd319@oI z0IYg7Q2RQ8Y+Q*-?8T3)WoY)D$mZ6IS8DDBM^7OviC^xm{qPj}kd=LP%;0xJ4zA0T zb%*QG@fQ1liyW=pPH$+t!z~Hf*Nv+fhfcFU1;S&$c*j-~LZV1dri`l1`U{8jer14M zb*+w_)^!Iulx%8;PkwyBn}h&5Mn_F9*QiRm99WY*hknLxtmG{jXclUN;Vq`8Y5l$N zWw&|b%tI)RjotYp0I0MHn)>YHg9%9>>*vQPUq4msGV+(IT+-S+dPYA{=AAB9fe$`uSCQ_s^>VX|JqGMiJ4z_ zpe&;^v%2+XX*`f$X+rik$z{8=>Yi8u4-oo#AM{?dna9iNkJzSgfs_G)PC#A7Q?qhF zd8h#CZ)RrA`>%0cL{+F&=%z|E)18QinFC@ASHp?75s?knP)udV6Ggk@^j`jxf*MpB zdt^sC9R6?E02Xrfr)EOj-uaf6mK37ZLDS@@CJ}A2T8jeXkR#OA)_?NRy~t4!v1~Qj zrSGP)yF)nnE}y`4OTxEExX*I&$LZTnfR1@(%*=HO546*dWflW?EGT`BZp-Y-VjplP z=@d14L#iWy;ZK*F;Z~xF$Ys`WY_`&|@tgMr93fnH=lSl$(n`&a**ObhTXQJ^14!t( zMLu?At5W;f$`;j@J$P!MlarJq)K^4*Fu%StutF-*GRJM!p)QaL?fO8+NW|SI4GYFQ z7b?PMo=;N-4LV|0A6zY1Sjgj zk;=c_A3FWh9BIwdUp-9Y|Nc&Xuev#r`|`9;c0#%$PcGQEAt4QJsXiCPO5N$8?XbycF(3>G-iA*IfGjnOX>077QY?OnwCoKD$_xlv}*(w}}R_hET z?Y}&1tRCh=s>2T$Mz@a`873|%fD1n@N31Y?jzid)<(r*%e|I|V3~C33$P2?aXXV{U zgS9|t%t@|(kkdyo8SG?%4UnIOUD&7@TX;ZGjQbyES-@rO?mNY@&q44eJH2C@-#d1p zRrk{Mcq9+;fPWoD$@X1KmEizQyZEVDj-JD~sbmf*bJyL|mN^x@dtW|MTRv0P)d-YP z>ObzXs3bOa8^$kSjl)NUcqU4Y0aFn>Ws6Btt@wLl@XVCr6a@u^s?$zqg7p)*6D9!i zvDt`HcNAdcky^RyX+;LYhrjaM-AS)hobv@wA8Z7W7SP$ zJHT2qFhDRsG6)!rl1Sbueb7{?`>*t7&X+$K{viPNN$^A2=W#nZ@HEC4B|Rc=p1{s0 zbitBl&XAxaP*$7-d}lKPp*3SBG-wD;{~Ue7GcfAlW>gR%{7>hLND(3JrL)a(5PMWe z(_I1&H_`jpJkL0nI&K+vLsq+uY(Hj&gj_5+aspW}^B^i29wA(JEt1S7~3jzd-Ws#_(U2vrfwNkf0`&Y(1Dw992QnSF0qv+s4i>^ECd8=1450ki@$?X(PE`oW;bl>(akdW zG1X&IlB9T}>_tPl{E}uon6EDOf9!te2ve6G!zk;T^YWxxa9v~a;aX-G>7kIkcg zMJN13^t9v}jJ!qlcwDsptgcB>o}*>()74CJPLhE%$J1S`kR=9%WF@ z(7JP}dpTLC=~;xcdst$Ie0UQIcN2LS88eJ`3QEG4PDLCszjH`WQX7Qe=2AB8m(V{x zYS6-7n~y$f8&*Pt9_b>kI%HCz z)P0~dd0%5_RXvb@4Mmk2Y z=VIo%BS*tA6{^s`bL*L{K=RFkX4n*@(bU?aobJ?gT$P|nfCVDd+K)N=6aXfbfB7){ z#l5Rk1P;-S&g@@`_sKsA-W5283jBopV#p~y^5dAC}iExT*(o08yr^9nKw<3W46n_!{aKE*SHi!K*Hy792UNsCh z=Cy%?FGJ`2nbKgp9_PerYmx?=0fipI7v++Y34fQ9n7JkPQ1Y+Z zEMtGlWS-o4Cz$4n-=2PA)z{__yjjHLrVX_4ND_ep^h8A`V^rbt-}vWPL2W`jasAm0 z2$hv^iIu>tFlXxo-p_0R)q0_KxMk8&i1SO9KG7=KWdgjC!4?QhrIT3cB#N2X*oy>n zKO3>-9O)v`McPKj%ZnL7ELf4}2CT`HBmsXIF=>}7Zg~NNFKeeNBUe zr#9AK|EQ0OzJsKoLp~YU@`eh8CQU8Zzc2j#vRx4(Krek3t679jp({e0FaJYY0g+dR zrHF44Vn{J>d8Y54CE%Va)Tf~f4hH!EqaEO^4T7HCRFjJIYF%K=M6)ThFrsM4Nw0%< zfL8%7kC;wuCmTZ+m27YWA%8W?g_A7w4|)_h4)xS*5@DwAaDyle8JdHh|ExX%%EV%Z zGcVa5FMNzvY0zSE2-ng`FvZi;TMa=|;SeZo(KwBUOojQcI;kDc*7}pPpTUbb7e2vZaowBDQIi3@}N-3tIvixD)?LuALJ{*gz?Y^a&=x z{N`20xw2*vW@EP(B8}n9hC7)E=V^`@l1y9H7GiJ`QU-SQ&vyZ5B57f&T?gsvT(0$;sI#Y3e+%tpJJ2|4oFO z?BHZMriZW*K`Sc*0a9xiel-!VN=D$`Hpxim9wdJiSmP*18egSoGc=}eMpGjJ6dd%H z>A*7PmWDoH$BP+~LEt2mjrOl#rr~;cH7Xd7Hug_T1Y#FWAaHrjc?5;WzV-inIXoY6 z)yVbHnk|K4)^7-mWn7kdqrU<2osnW{){CsQ$DxJ$t`M6ed6mr?Vm;RF<{!A#EFi`C=8_qC5T< z9xkQwOmC?H!9xJZNcNsb+#=YI56-}5L>_yp-SE{ZSHc3WNs-k;fWxW}4-b0{LZX1= zbRGSac6Q{~Wq9}fgnMS2u7_PVmkkvMc4d>r)>(5PZhi8lp?mXEF>_o9%+^1^T(n`l zMh1EEt*x%hw61?5%UqPJN4YNFSP5ZAw@FNEPF&1BSdmmhoe%44(;6ZE+UZ+fIP9l`>$3vUi}YgPn#4BhOF;j(0{d|CH8?} zZkp?FEmKRI>A?8!xM^_JgRQ?EdYoY^9%a8xhs#Q>b>Xb6&|UccyFV-rd)yd5uoKO| z51th3Vp6W{y7?05L^@w^{@U0Y>;7s9X?!zhG^Ri2=!F9P803=6zx0h6)r2{ewCGHX zmX!GD#xDHV6@b@dUfFqKG`w4e#Kk^(^LF$FHY!?@-t>F-B6e+mA0>C)w(g;};YL$2 z)0mB0u=B+PcyAL^y^PX%e;cZS&VBc;$7JQ7OJoeSn=%^_#cT$y8MEjg-~T9jysy7` z2fyfgsPmYrD1!``=21^iCI?RR>*`T{(d&c1B+V5&Vito>DP6tp-8J@9-w&YGf>Oh9 zbwY5BR8?_OM|MvVG&FspdF7AV;rzoOkFTs6%ghh}m-RWHfqVD&7X;qU`0&sy#Lf~3 zd|t{;zvIg%m!+jsyh*6V1$XUDhYuKd0$Ez1Gdl~(A^U}G>uzuLDtZ4PEdrtg-TBen z%@f3PJQ#4h9QzytHonr_`2}xOL~*Rxrcrr6-0!E3Ws7(eD5Yybqf;!pGmq&Ual^48 zd%pDotAH-<@~=47(>}w3PyzTd&0OkfkWTJ)Do#~&@;&#NiA9~ZnvxPwZ5U(h#d7^f zVofp~>pUFQOrA7>P~|KhrZk$I?ZmHB$l1i&XTSql4|P6*E{9)&TU(8#w1#Hu0v=vn zwFtt(o36jg{-~+-JS62#YrD2}hi8)3Q+*vmN2)ZT{tMuIGyvD${N%oeb>crmKC5z9 z-^27jhf&>+x2UPF32*#Ne=-c5{TAI1pwCOVtfxPijj#hRX==84-GzGJ8i(#r^*m5O6u+eaRuV_DUGB8`ZnzG`|wL&!f8-)Odb z@OE2cK-?NjZ>BImmKux+dsOK>_~#i2L;%U@gf0Z%%tVF~am&kPP@2Kkrs}D?OWnBz zv}~{bqi#X(yZjRJFA*5ICT`fQ#Qoo>7n#7FJui)~ecI04EJ47vWA!}Ba*G<*->Tv32l)Fa@BU!YtzfNFlrxeMoaZC zVuXEW*!A}#Y-^;`ny+v=iP=JswTq##?|{{4o9DU0y7i*10qR;seNX5cBK6(Wm^K3G zXwy9kUG|r$Iu?v^DrdZtX5B1d&WRD?l0NbYFMta&$!rP85E4kQ$AhY*%nT-ssoqCB zeVvS~_>RTRYZeWpDSwRM)=4b;+)`!bt9^EFrzq&xN$A7iRQjw%@IfiL$ae0T@9Vqd z3N=Jp6M67)RoZzKo#H8$xKDL@wO%GZ#OUi<0|y4PpXyfj0H} z&LLOAqT$)gN})?T*ur|GpO3p=!R)!$iy2!!jkE%u^p{G1Q&La@u5@s{xBCfdXnAhq zthNPtCDu0?9jb}+${80V0Id6y-TK{Rw90=VCM-P1e8ZSKv~38p&0PlEEZ}JZ?5K2< z8d3Sh5Dn|#Vza|F`j-4L!J*N0&~E(a-_*bfKMC?--_|p5F_}$ksC7|UbmvI!+|nm; zcq?9TfDhL#G4FJ=^RV1uto4K(lT^Ud$iGuQ`JF2ED1DkqslWAl zJZw?B?`*=sQd%bNXg+Cy0(}5nvXDLJFJAoiP%&{F(>F0Is$?u`*!BtHFhfk*dZUT= z>AxVVZ{x7F@sdoEcW`y@E}gVSL1!Yb$SL^q7G*x`zT2)+$U>(;Xo#^dZ*a^Xx9;ye!lqSRb<5@uWpOIo5Ox4rB|fA=Qq1tg!{T!Fx!Zj zVuY~Sy~NGkkauU(6QLM9RuYpYKgX7TlSpHCD6e8c0ys<_oJVW_=RA6hf18*mMvMpO zO{Ox`EV0@J%wW&?xAt<7e%Rye!_wV0RT8yuQ0$-a2 z+`U_K%4h?Rg!=VFJm76>MHsX*w`U*}TcXu|vEbP4{7 zqrzNPSHsmq!fVPy*Unz|cI|dpa5Z;#|J82y@I}NM%~AK%-)rCz80>6$gE*RF*n8Uws^{(>1yVYri@|1mv5Ui&4yE1qU?#M`g9V0XTS zGwR^k1wpSYOh95(ry3**9t)+F5~flwMdJ+0UZ)091}^$z!_(5&31rgBV|;yicL_p+ z1cjz)8a&2-Gk3MNj=G0y-*VvL#a1J^0~tztn8w35bG~W3&WaepskT z1^4I4XRv!v8y)=72;9=oGp*mlJh&H&iHzI^WB_6VKlc4WK%i+7Xdw_Nl5=yHAf|i2 zFiA!i9*&8ZpfdBjj4&dg1J>AidD9V4<)_Q?^*SlX_Vol?Y=ktC)xZIz7ubhDyba;N z=`@+Xjd$QQdDbba3gSWiC+!=w=e2c}1;>qyZS)E+%UGDA{>a2ukVfmqzCt|k%;2cQ z^%{(SAO|(JV2wu(oXoA;ErCzh$@2H0$wdpvnm}R7i_PVJ0d(fKw9r0q@rVs*yOm?J zyD2Z`lZmDQ@SRx1&Dm|{cj;y?c21r=8|2FZk}^~y_hi)T7Y3qa@_+!^ZDA^@u9lS2 zJY4@m4G!7$HIYB}kM+-@vPV_g*3UW-PPOI3^|W8&&%f+V6*X@cHLE_PxtU#IqXXs* zQ3C<~nH**!I&j>F3|O9Yn(pfAnk)(y$M|zp$2~Uh$tnpi*Gi2y_aK#o|MI!tP0e+? zh+tYnE8>_LaF3hoZxtA44y}^6xPOd!7g9r+KZVqm5_ie)sxN!xZWnExI9DEOND{u? ztjHkq%|1y0xc1r&x@_&4jFF3uA&Q{5dbF;ozh5P^qby}Gm~G{|Y;?9ip&07wYDs1# z1jr&|Q8OTt8n0I+NQxVC^>JJD@XfyAPKu3<_4__o4BngX+juRE2@xRb6$5q{l-CJ} z|2@ZDVJfe`6|9{I!5~IWq&JD>rX+wo6-|*YE#Q#>OhhRA?ktBcYm??2zPs%S#CjhH z+Z_Lmzpv-Md$g`xmH(&%dZI+mM{3IJsf0J5r4%VN9js9MJn``O8#|_iWH$JZYcz5Z zP1P0h6@$Lv(}MUKe^9e|=QBvfBG^p^%K9^uO&(a$m37h7*|K8uvY7KpV)A9A8OEeF zr;Ns1NG8roT2}Q-v<#(T^SXf=ki8UZxC>wrmb#N+cq z@o6kan?LHvJue^b-|E8K^b{k8I&_=--dr*cCky~`zPxG!EjG%#z0vjIaX}&!?U&vU zFl$+I0usDrgeOo}TTfLR3Q>N#_$QOWi`9J(IkDw z26&e@jjqRFaeYk{DnKX$kq9S!gY}D-t+pA(X_osbodgB zW(AqgTpH(|am)GSgHw^Kq(k)9V*>X;oc19|U=IrLEA2QX>lt+k^uS0zYC5MzWbw%i zpA&cx-Olb2qB^U5D->)o#OM*@&P-P%Hnoevp|-I5t%rrv?q8JiScW z06z4inw7rpuetzK0Es^WtpRoqKCO3n`UyJCitiZzyl9i-W{)~a!1$=xcyoJlk5peB z6A~wiCpNDK8DwgV|HLzO@DSw!g^Q9V|0~_upyqoH~b>%=9Fo=qp$)dE`#s0X9@@~gYMJBR&^*I?$oZf*x>bqf+QFJ)&t3;)Kb zp9j2&l=FV6Iy&h_zA6}0kS46(>VCWfPrk7M6ka(Vj9^BK8-P&)y-l_EwSjWZ%KZ39 zfanuf@v=i4%g`msr~Y(+3JnhfwJUWOfVp-H0r{$0V+2+|0n@AA3V~;*ib{RJZHwIF zaYoggL{|P00yl(%JP;Ft+Mff+#Pgq)xb%_Hm7}b$4P|9E+VOKGG?33HR~(%qdacuH zt7%Jmp8Fj23eGxZ+aR2Vmfho`rr&F@=q0ZL+4qArit3A^p`Hf`iJXtqmSMaa@cOhg zP(6I2MzgLyH7rk&ml-8?(rQ2|iJkz8`LSTn#A{$)Yq-Ouw*UPgH7kkZqDk9bq0%}x z-2B1@(j6A~YgSuRC`ym;^}8>{NvOci(0T&slL{XC6Oubkbn#CdMNG5B_0zhC1It04 zssBlv6xzQ*E9pICdH0*VTX`LX0a^Pnop?L`N{6@(9zK|mutBLIJ#!*Ka4>Z5=_jxs zQ~2K_SiVuD(?0`gd5XSTXpOI9AeU)ih=9AX=jR<^^Lx)!30^L)vqU^}J0nl)!?ub3cTZGB z>}3U5%!mx6voA}MI=U~N+QTV2vpQvWMprMsS8ZR%w&p)Qc-pv&3&b1?$its+(?zB; zp`E_u*DpeUEe64NEZ1*w>FNnyRa!}NIbO^b=o?|?f9>G_RNtNP*O30}b&h>97dX@< zL?VD#guaglRu=ZTI#T+7&~>LqBtcwfA#^*^DqmSF1Gq81mQXhCfHrmS5)N8a|P4IQz=(f9~<7*3~Z57WC{5y5uTh zdA+7&t%8EKDTl)fgxo?-?cacqkM$7nmfufyiX7-Hb39zeE-JyL~>o}$+Ov(eg$v@G#cUh4N} z)n4TkdTi4~am9aYS(8!m-&nTqc=HK$=ibc&$9Gik3hY%L>x=>}@%q(L0>BCW|MD`a z8te3BU-TM(eaQT>0?@rv3*x1av5MIe3Q*0C(ub7!1o7T5rFWOz z1!-l8zSg$6!)R!qY*)l{c-3mdciuqU_Wu(9#7|~igqzfcx)S|jvBq%Z&@%TAc7rj&Q+O$R8AP)vMMS6Hk9Fz13aamb!7#L@`?$bZ2A&YcDR6jH z6b)MJYtRE6$H4q}0g>%5Vfq}7e?SCYNZ<=U{6YR~5I>}^_2j0ilP6?gPYY5ly@koH zi(6NJ?7ho}T^_)uyrP3?4%-Q9;ApW#ABz%iP&BkleF-JbX!BsI-@9i~pwa-S7-97k z>!^nFS}vC%8d%E=!TN)!v{=}2_eC{iY@#qL6Opp%P~{24>evSa5Es|Vc3Ik*G;yAp z#a7bhw&R&rfx+lO*^gJ3mzS-!;eC6UX!M&|+YPHf6U}H6MMHhaDijGQySqOLFn4iyGc{Y3J%k^_VH1?RzTCE?dQemq_4;eYIb0 zhINy>SBw8k_-(yne{%M=e?fVLEQ+Gr6X8}!N&)(e*6GE|Ae^}ep9b*DE&sl|z)q?1 zn?V*uivq}^n^;jsupyFlnjeB5e8W_$=rGxqCi(Uly1F2K9dfTR1Eqpb8pJJT)f;8} zOKBIO#_}n#E{;=OOj(GjRocTG$#{)OEOYB)5+zV9CJWY|i(qsQ7%fSsm7$vmMp^jT z@9cqHM+%L)6Rob0$}cG-kQ`20)lslj@?AJWie~zw4mUjuD=tF*5~bx_UwB;}7m@y` z7#q3?$@1r`L+kaBwQ8`9`$T$LxNUgvP;xwq@uwhqIs`0>s6#Mr;0}{>wd_y;1$u%D(@-l*t%z9hir=^f78ekkYdqi)dVitMT%pA1sCK(gG5PugO${UN6?fSk1pbC#%vU@=91Z`w>nyRs&V z+G+RiPyDiL8FkqHI&nn>&&)%yCV7UK&0xVab9f_RayF;^t-GO;W#iOG}u57EQn8$84o5{Ds`nWQDeBy{&B%6tyMo7DD6%Ih!za(6^W2z%2=-ZG}qyDeX*G zND&{Z#>^OWsj~~8>N$0ObTw}w2dd9aC+5|_8q~1M}jy&3;`f_%Jbfn zy1Gc;9GykTw16VkE}f#p=hHX`8vO*`+q&@RbE;{RnTQq|{_Mzy59YftIcj;>#Qh?5 z1mo7`{v>FCN(<>*UWJ-! z?4dno9ADy>TmCKMJZjpXI3>IaL@V=NV6`3YpCT3ve~w>v$g~4IwBtllqoOr z`0-Efa~1-bNiwi0HS6~WFgblsv#O6C+HKTadzo~XW;eA)NY`+2996-0yn>4w`$I7m zXZqCEe{_brRq*9Q%NFTrrHuhMu`Z5ObH2iwf_OyQ7#v><{hSQ_HIn~I^fwSaa{#J) zhl@Os=u7a8T|N-IDMJR`?GdMcM-cQ2Cs=_`&uQm7W9#Rs`!pJH@(rZupi8h^D^TnAm8WA#Z4)GAfdeU zb})K(nTyl@YQg+*ATg8~ZwIWw)AAVJS_1ENV&^gPFBfQ0v44|e<+h88pSX(+8J>cb zbB5J*-^M8Oi=O$(?GGOcS_xUU&fD)7`UB^T32gKP@r;TAo36~@jl}_$NRl!y zcGL|u;(r%)0QI)U)=kYr_aJKFzJypJ}@GSB-Y9$No)Mpt{$Ky*h%4y3ANR4WmJKOxzsrcHBxlDy;7kP{F zd5&e1w}&GmBZa=8GxwQE7Z8l*@1K0`(=KDHVh(rgV*EKmoLZsnHycqv9*gOt=aP6K zWQw$#Qi4XUu=uIaUYMLJGhS$Pgr!yb#7=xuF#i-ia}?@U#g{{qI2=wzbeSZ>aI?#f z6ArEUlY!v(qG!4uSt9gIh#+3c!`AupZy`m~9BvP7tmV^As=8{2)HTX{BZuo`wZ3X_wtk+k{URbJSwqkB{BNuGG?|x79{( zvpytqPf1jQn~Y2lj)99dC`YID0tvV9;LF*0wr2WD184d*Q~USw_K}J%CAq^+*5 zPWsU3dd{lmzR)~&dPT47C>wVhK0!)pmg;nOtW>AYQZ&l|Aoc~S z_XOe6dMKu!z32RcEIQ#Q(VyxAeVhch?tYOOyPjwr2FmJ`Mlewp=|2fjkX~6#H4Sy0 zp*&VT_^BTk>p`?C7R)CREF(>YrXrM85$QJPT<%+)d5#S$4qmZsZTxq-vq94l8q zXIchc-i0wy;1hisN1Dt*$c1JQLvO^q;nIjLQGLnXxWtj*9dv^(r~!^=1xsUHiOEeI zbqsoFPAu*$Z)_A*66U@YB~q~86R5Klw6vk>7*~Jl=o_;Z62BL{988)4?>@0Pfcd zSKkRh@cQo;M~>|wvEc(TIMfWzMtK;eTB z+U*wj#Fc{9Uu!}GMsfkI3dcLRM-4nMg3bS>3+7Jhyvm5dPhf5qQvo_g>KggupOOPGZ z%I(6d9_#N*qTR1rG`~c#LT)cpz50GoP|5Drz^BtVpW{=2A(s}`9pDXaxND?A7dFSf zD#twSS+726VWVM}3>062O!I{#(OU|J6^=i|RuNtP?JV!yLfOW_`A{GE?tXfS@P?)kYe2AbuLk&i9hS&NUx_%QE5MUd!>G=K_)vezu|hl zFXP+-hM=~FJ-5Hn$2@hRoGy3E;)=)OH<_a-H2XP=X^a41nv5>~ti#qKz z8yctkz=GyKKuYdYBJis_dT%uBWdhLv5k27KNjg%UEWwZGX;?qD*FA3z8$E)~!Vyo- z%+1Zcgg<|P$#u>T%!R_X;YUvDp5KntI7JP|82m%9y!$a`C*aI?V&0vzD8qdc7J0#} zAFFkRqi0MYr{d^p8<}ko2e%71SpuI>LNEZ{(SW4)i;mKa1y^zI)AM|JQlC-IAu@XA7`ZJ2Ko`y;E9gbB_tRm$-?8 zX5GBS&NYvzZTyMn2*yp#^e45ohC?4dRMR*>ud3$SA^woA5VNaP@+LOXlh^`XHW^ka zayAuM%Z!i1C+oYlfI3XbBLWE9Jcf%P6aMCS#xH+2#hULI>h5p{g(6gH7PiXe!n&?qnBTTq+`)B+$Tvb; z9F_2Y!PQ{3=I1_G_;l669zEqRUJ^;VEYU@}7+_g-Uf5Y1^oOx{L2=AjvN$~0p11h? zCiaSPG_1}CP6r;N{-L7ilMy=)Z~LJMwMan7UBFeMVjZ^wc}K>7FOeFdgE`YTbqL*f z&D)K}`N>xVc}NN*nNsl59+DG!J&0oqc?r^dyWtk5{|4 z-)j9wLugDW6yB-JOVCIYHF3&=bGG5rv7uLKF+{*?NQHd#V8#V0DyZn8V zx%1>j*zrdk-#VJ*PDb1X@p3Hf@b7g$s%Vx~6s3aDv$IgzNl)U~A#@8T+j}W@dU`sj zhIZ0}I93=q%+pLqTFbP&fJ>%r;zqf+6<4vJKV^E#jBg-V_Tkz)X>${poWWeTutBi( z^1=GJ1fS>yb88|RuHv>0s~J^sH!N%FD zrf+bIk?5JEdurinq@*037BAwM#lC%yj>(ME5e(_c_Yp^ttX?L|sB!78>3dvaF@pa} z;Tb5WAvP*Zj}soN=ak#Bj?fan4S_>GoVsLtuQ&`H8!O(AXSOtP?7QLel0RqR_-y_$ zSqQ<<2lpa~`Xj0I4AN`rRpTQAi2-C;x|k)euHo5rj-a0Dn_W(jdKj``AzXTR8x<2L z3^JifBBsIIGvu_sXCZtQ@N%{)l2rx=FqLkh6@k&<^8KoVDOU>FQOVe5BO^RIFtfN( zc=xDj|$M$*1~ zk04Gx`yO>EUt8;F&gVI!BP+@89$+>aRK6P+xG#ZnH@r1gK}!MQ^M^e&qa(tNnn|ra z4Jtdx{XNzpg()x1#IHX7`+J?yZ0qKUEI^Pt19@vpx`KM}rwCUwflAwiF=I>ZU>Nx@ z`PU-&e)U(&%ZJC6>kjfhzoHR`BKlvaLH^ean!kphE=+&#pYBa;*V&S`f9ax`0q7@4iQJ)oC@KojL%mN zJA0$^y5TEtnaY|fabtUZJ044RrP!9Bi5mqYRSM5`T?@1FF8t0?jf zu6o##dkH2eTJV51g zzNgvYXkHO|Y1{f*bk;ma|L%-(${emE1G)#o%6phaicoK zsX55XhDQsc*!S>!LxJ~r$S=pru`G7g2WE$>%=kWnrB3=ICz(^0 zY3i#bCK`QhMJSdhade2yrs?%IymYJtRfE)ci&o_!3o@|qKT^T`M&oj?M_~6~jE?wG z%QNI&2W2|Lq>z!WtGs~`WgvDS0|zNHE}J` z)AN8Wl88d4-3F`eFV+vh{Hpa=g&pF0MuZ@SE)%L+%=MqL&!`{SL1reZG+ z{TzAZQGvZms_@cfA3=+t?Q1_4!SS8qWlQ1GdChdF6R-AL^D}UlRo`*j&x@PLQ3Y(&iks+Uh8R zcerEg-m-%)oba)eWp+HK2sAK#t@o{ERw`+h3WumUi9R1Vo9j0E?J9G7$Vo_r7Lg+R z4zUSRbn@*Bxq(pSd#63E-Fp6s)jV*KqFTG)Yl8+NQYU>_zqmu3Vj4tdZp8w~>p%C!%PNAA+w*izTFYsHTB^6Zm}~D=XH3Z&oZ7#+hL(CA;X4{O`#ph; zYpF8W3xK2|=_`l~Og7{vevQyFn_(1WtC0L;kVN6q%7c&vT___u;(go4(4Ks(Bas?p z^a}+_qrUhDuom?pZ9Us;!_CKTlOA)8XS`)OcZm*D7dCal@qOREeVg|L6^;Jd&B3g9 zvl;4{_8?@wg5aZs$xgVM?@yV*gd_G)-1o|dxGk9q_&cj}^UNo9)E2=YFdj6`o)cm# zXB=e4)il%3<~pTs0g|pJjrOf zzlg1m6rN)M(Q)9^o#eR;$I4HV*g|-xG1jr{9f+)5@noW1+m336nKYhhiOEU2Mw!I* z)_#pYMS$a-W$rzEHTOJxxFOI7H^~a2zHy*=(>5R{GIo`~r}m`>tNz#RY>H@S^BqsM zZZ_wg(GrII>x5?dB9#WuEW>t)L3SWcFw*`#J_(fhefzUvCsU4UoQG}PkZ$&){K)OO zgTyKI*}l!&H^2@PH{#`LXp<>qgp1==UnPPf>!nvDodzoR9tT04!tFz7XEgC@STFOR z(pHGuP_-a-2C((W?O4lGknxTGRndWT|Zuta|~`dYi`;$v47IQvBj87Fhs-vY5yfI{WP z9WMwk;Ian2u2Ve9Mt_O4@=(jnyim^!@oCRFHQ`b`DZ}u<&g-}aAo{RC*@y02Nx$?w2?9ChDWZA0%wz5g((A*2f zV=t&JJRGo=mTO~jFt|xi01hkixXN8mnH{pQvURM+|E*w-j6SwKNO23&N%r%;0i2cR z>2|nw4GmKwkoG5oV$s(BjTie0VcEAL9uF6Ac25oe{DD9J7!ZxJui zv8Jn*gG*N^topD8zZUl9>({RZ^8UG_jqTHI#1g^0B;?Ee8tvAtrYjiv0FAhtzE{#N zwVw2KuO0}3EFIAFBbWP`M_R~FHwP$$JPmar*WV&}_nXIPacNu6mamzRudc3?%2VT=NGt%V_u{ed=8@H*JiGhE^m1i^}6`7AMYJyLwYb^6{yp=a6P z4deO%a;o71iXHLt62OIm(#2q7LJ4rl;pGbEEs0a3)aw|T<3&0i8-Mfa2>gGw*1Mn2 z9$vbdlD)|eZ688ajW{6z5h6Yq|K`2{kkuV}+#YQ06aMnx{m#ynw;Vf;C8?rFr-#bn zHiBf<{`8+>!iHO$VWi;KE?KUQqx_<4wpQ0TT=lZSpbx=&@IJ;}2gc86h1SX?iXN9DjJcdkL%@0xlrmfEzg}i5QF0Lc z{RH2)ukRih92znK(CFgjgb^Tsiit0g@BMSXwzk$BPmYw=oH2Girk}p=bi*ksUAfEZ zYM*Ll9}e}@Ok8hm9(<@oaE0pA9#g^fdPC0KCN&aoF9 zG;p9{Go_0KmdOk4H8gW2s^k`YSj@+{^v%|PDA5t&{j#mmn>gGlx_IccCnv}7(^H_j zZwB;*4cJDot{dm`$OtcxqyI)v)j+l+^%Uq}rmrHF%X-!~ez~W92))Ei3h(E<?@xdkMwr4JovI`;(#Q0dhHcB&I$sNm-UgE^3K3F2ov5=!2?b>2 zoJ}utR$Y`()u<(Y)ljqbrR#0XjR)6UNQX}=oswWCd69qFpxr7qxzKDU9_YH3Gh_Oa z2jS6^E@g@Z@z=%6KIn6nu$xzPJaEJ~;R^6`TsA5BNcy^RN#UrLmQNG0x$V&}=d!_- zIN{j0qQ!ayKLL^-1nyu;Vo|g?z#gah;5k-hZq{g;*lo0aFw|ok{<=Tk&rFcA1^-tF z;Jxm-sL5^$AUu+@hcLS91l|Es z4kkkS(YcEHBg`6UDJi~Q8PMa?b4b?_j6IN^i5r{s{l?zQoQ3+*UtYxaYMwg}Sig$p(%9>Cia4 zz`)^jXQN64S^Go*S~zvLuai8um1OR z@mpLc+e}=5;6Hn_HDq)CZFbr#> z{HMl*eW)aP2(q-riEke?K`_c$*EkD? zf{`?A)&2ene?B+;s%%koJGkOAz(n)9=88cwcz4-#y@UZ%H{}Wi#Z1scSbrIBao{$c z$Qv1r(7&aHVEn@pwO5U*m#(gkoWNn_CXTXEqGnylfin?hxU+}R`xrkq_@9JUrs=61 zGqDWPYVF5g3eS*^l{80PWxO*fcqdZ$oo>a%wFA+TorL$$S1I0NmTnoy-1xk$8fqNo zd|I>olqn9S%J2TYa6&oeGHq_QuXW-#s`Fn;q)w@H0GahLM5S>L5}mjC_(}4aHf*RN zQs`?D+a4#pJ>RE`nm$VU<*>Qt0w7la$!Nr6t;$clbRCSP zpvatwOFZ4KV@Ew;`b}F40H_M3Wz^dD=kzzFmFL(}jeny6ROp$_jQB7*O0V%Y>@-i0 zD#N~R`i(Thl6C`1QX7)qGHO3HqFdHRqVUAdUwUuST~TLTJ2tR@!##x$|x5-x=W2DKXLw*`?C1U>15)@eg7N2|aA`lLp%70#EORf5!qO~N zE*w^doypM=R_^e8Gia!4z~NpKp*qjhbktRiCHiTV9x?1Qc!4&Wdy>oroUg_lFO^pO zivhJRuKo^21FZODi#5-$VRvf1fT_Zp%>02ySk)G#?CoU6&3vjLMm3K-EM z%5x8lTPSHa_}f{yH1@$FW)=1gc@jH;NKU3df~&0x*tFdsF*Z@OsE`)c)VZaaHKuHB zYJ$mOWrgmW@GdM*HD+{-B(8vhU^Xu;uSmk!$ha$Z=G%0%Jcxkc?qfy*)_w)ok!pC; z@y-U#j=sc|bXrVPWQtr`o8L^RMH9#&h@0@geG}`<1rg1hlAX`x)Bgm4y3n9|ckuj^ zR}`jcoYLWct1|a91`Tnmu)7K%O0!Z4XBTwS2yQWk0HVXkV>t8D4EL!3W&8|+VL$o) zg~Uy9ufwso6+7J7XUt75D_n2l_?mgMPU_vP1=j*VtR@sQ)gE+pObvVJ&o4NBltzc{ z0!haHefy%o(Ea8HB{s3IuTK;4RbsTDE4m$fs7KX%mp z;;opbN5vJE`@uuKh*LfY2A(cnQO0{Ciq3Eba}MFfPp_+>_Q-IE1&=9cGss(@m$ zlC$7VupCTW$%W%rqEZZLoQqkrDS{E{938XAt5lqwm_0BcszLDmtYso)HBqJ`W4lz5 zf9O(OCuQHN7#d(_ly}S z^{Abe57n65e%SToFnZGPGQuuSsG(J=0kV|EAhY$7ipt+u(*AS)P&Bb9+`$+oZ6>%p zm5d1IHnE}Q+mueAu2%25O__HgPJQO$L)V?2v{+FsiH4&3%!EsH^f?d@z+h~jixq8d z@Ag7}OM#+79i}Gz@jQYdDcwEn+>a?6O!$=`90I}*JU>zuU%RXH>^(ITO-zoJnj_%gO-2vSOq!YY zp;%df@G2ttD&f8TWeN51B?5Mw@IUxgr;1r)|Lk3vlX*~IQL9NBAPl6DqCNz}AV;Ti zu|R~9N6(;;E0SHs%)cPFq0!dfK8dSolOb@RxlNkeWk1Rgc$X+ap2XWnjeetoAR;Mv zJ#49%vxDY(Kme>)%H|uMix{3X8MWI={)QpL;(Pb;*_rS7G@n!yzeCvePr_6g& zXYtIxj}UwqdWdM+@!;AtdP;Sx1(KOBgbPf^yjCox5=1aIVDfklhyC=c- z6Fs#G>|qP6i5vjcLJBA_83V;M>Rd`-!ktKqc?FA?ld0=#lxTlDd-Q_+RDwsC;X{KeGWlRb22y8OGL^hAz#S0-Yd*u z_aye@!$Tea#k!>?M7<852w%%E*1R2`-L?r75;NKTkO+V4L&J64GyVy0z{z09Ud+N* ztjgF+w{&&jbCgtiZf5c#=X%(?GzO$BHBh%`AUb9IQXB?7N?pObj;17;v2TAk_{%E_ zYt=Gv(N+tpRIZBplKv`F8qSYBzZ{q6Q2k3TUqP9?bf!2Bm~6w7QRuxD=ZEH6)kt^S zbYyh8WA@S)ke6p10+xlh9?Qypd2dPeN^Q@`%tnODYu8$z?0&yx3u>M z2}u1U|H-|>WuN@4->#-18!r$5aOzeDztQo@I$rb6GWKkjd0u$X9v?ljogv0_ zxCAO>ysZWrXv#)CsbFC)c)4^swTf7_&X=2=!Y7Xw4FWKR6Ubry|Lz9_nzF}WK(H2h z0{@d{rS@`Z-GU8sFwP?agsU`n5**J&JU`=+KVLTmHdq}gCYWO(M6e`26+7-*5@#L| zIFA;y3?kS?TE)@q0Ytt>stF;<0l2k>-p8ms;=RBx?@JWLE~^-^QvMSj05}cYiQaQ+ zJO!K|3YIoAAPeXR0fL+FWq||$Ao6>mWH(01KkRLPUra78l$6*Xt1J~I{--!-$4%D1 zX%E4(_my+67!^@%HM#RG0md3t0Q36r=rXJY9_+FYeJH0||Cd4H#RP%zxA*lSFTzFZ z!{%UH0zx@VO3Vo&Vvt20ki#{>dX9h)sx>HgyGUMjw`5Z2hHau8;|2K7Koqol+1@$F z)wsr%$$^{#VX~N@XONquSuc&fuEpu>uK)neNPMnd!~P(!P$<%e@8UTu_u<@ARnz5& z=sOwLf9mNu@c;ZviP-A-bsr{xec-lMFgo`k_pn++#Q(4MX~3@`a>MM;lLMGQIVd4x zxS3C^YKPnLRa0Of$?sF!|0ls@tJ%kCPLk3W-abrp{@Au#j|J14wMwZDZ<9MKltlJ~ zg2c#=GQglifraOzROU)OBj$R{2!tK6c0*I!ogvk+B2KUyX5=~w>C26U$D_nT+65n= zRn32<#wt$j5!1_*Lh6d}iB>iAyIocz`XA%ScQ*p2f@t4(BIoY)D$-<{BS88E3jdFz zw}VH~4bu`RvXST2QooctDUQ?nnJEA8AWl?chAI@5B`?1D^eaL&)wYm!+K2gnCI`J~ z+iM`Ut1sEMghm30FJcO5XMA3pgd-H)hx#UcS%WhJ4M1~uu8DgS>!r4x-0+`&QIMzk zGRpaUl(o;}A$F)d_5?Q+T*Q0gvxpmWqS-3Sw(a4l2Az-E4+xqnhrUMW+xTq!>1*vZ z4c=OpRlR4}{-%Z^L&b^Q0RVl0%r3`ZXyC#*8?I@!O)n0?dU}I-jP}aYV@$hLa!(OOz)-C^n`1FDdbHDnh~({N)zi-FrPoT}nYYTO_0-G<MdQ zsvkjjw(Y$#Quae2+xc35@`s!#DfZ7j!^ExO2|0o@5pvD9NA)}YWXd}?if==OQj7z? zn3}V8ekEzA*VEYM5=_#;lfU1LAh05PlU>~~-|LCbVY6v+T~j+W$3$#+16rr%pCclR zr%d;HIC)x1G;0lvLz_UcvitT?I(YxldHFEXPf*lC7?nCQd(4<@c>Eouf!kH{NcwhI z-vK@0d0hA3R=S{HzrqUrz1Eb7DnOPChwIW}Bg5p0Le&=Z!SlqN2)CZ$NFF``AM8ku zj=li^2q_-bfsl>6LB;W^h4z4d=CHPQ#WcLXltp~h@q5Ac;=x43Dv`z<((OFY$0v9f z*8yqm*A-atpX2dQ{g0Lkoez9_$2|tsGg1E`^#KG>^3=bivuRz`viQeOvmynnSQQbR znz>#5-U!{E-f`{yP-E|aLT>$-Sd|YlpO1MFFa0U}5W=yX`q5@(V>+XNbhEeYZ|%mg zLaMTm8RDuCWj*lPj6QsIX`iNI42O^3J^B0jrNn6Z(AJ*)6Zt@&_=f;2jT}xMTtf_M zM9~D6mj~p_pB@=M;iF7CbS2rD_?`?4jze@mI`z)@6bOn&P>@s(&7TPIQm+R3@hZ4V ziZBE>AU7b}(Pp2IR-6uPC0oVGOp*K5U96dT(>fRkNHNCN3t zhJ6vQ-SE_E0{6PYwA@pSQ?1j9vUYyw-%+U)300QCIN$;E)jE#Ft$sza9ku%*QwR=+`{YeAv zHQ^gJbs)O4zM}#gmlEO3!-6^{kTdBNXe`hK3B3&0o2@>^_G2j5v@B-P=Psa_W3dA% zzac`d?r0Xl)~aG1HcYVVT+zV)0W*AF_@Y|c|0|k)?t?t+jzjA}6I|uh{p)%SmyMrI z(b6g5nYQWB%s4_Xdt(=#?bht4NEL+!!#b?H86ST_BZ!nf9J(?X4#8f>Y%Z*aulKV=c5pkBBr- z!`6@q+Dka(M*o+;!&DasDEunOlNt0&jJ1(zwiZlO;rfe#AeViH01>yfL++4ag6DkO z)k*W1(ychV=ecp3_S~7BpU&SePsR;R=49Q+a~Ba)GW;Ee4r#yfy~k`~0Dsp@d^;oJ z^*FVJvr;z!k|V0%ft&CDro|Hd77)$3$cFryN{4UaiMd!jOcPUMc$>#GCHPYOX$Vf ztMpwc5wcHL1P-e|<7z#_h`o(Qp68!L`MoA9n)7X_?Qd_mZ!HdEzcgBw6Oi+axa8p9nO(E?e>R-KPD&Cv@eEjcsh0gy zvpo#*{MaCz4TU!W*1uGF1MM$1PCx&;s}DGM$qrt)EfBQBVr-!om^feOwsg(2>4cD6 z_=7L4_n4fr>kc>Gq51#uQL6&z81<8cNJ`(fjZEC$fel;{!N|42ItsaRRpQh+9x^i5 zq?hHlZ@4)8*!$J&3eJkuX1A^z9TXovEgGPNkb-z`TExI8P3W;s6uY~%4m1QqxVEa- z&x6rBKzr)bZO&w$Gyu|GW2PZS)K!h(|6L+#IS#i^ccS*Dy;7`LzZpAn>)9u^&0Ztb zsxJ`VWtf%iSqXvVZ_C}B&9$W%=sgRJQ2sWZvBeHm&MDp2gC}{Es|tE?+JdWDz^=EN zo(8~5`Gn`0-}R9ttpunPsGt~@9@KOIORaJavX;XHiMQSG&MhC!y><9PA;?HS`Z^^4|#iPYxNiJYd=K<}4U5#j&QiI>N{Lq{kV` zJ@h~5_h~eU01-h+VVt%gM!Kwa8W#ZM0TzI2J17KlWA)04U< z9afvn)uC@r+Q77*2DbgiHndHa810j<-Tr-|^7qHsmWoahhdNiTZaHwk8>Hg0Uo-aO z*a`za9b*6_0UBVd-NeN7XaEb!egjwGdN|uTSOJict_@%pC{a$RKsn=1IHsys&As?Fh@z4-n%W8#c2?>Cs{0$WtzmXAEGrZ?9; zVZ2YdpBj4ilg<;&rx3ABq}OdVHaJ^!l1Eb#KYov3ipv=8eyxJ& zJNg`}F>^G+#kyM^Mva*ZkOfe{VW@O&JhVFC!|pa{`iWh^S1V{7i*j9PUckk3cdKti-@A)gR?bjej-{WwrclCl8%n}Tw7=}9^-2UE zsfpJtq0NQ&r&iH7OX>a0+Fy9b@(A0E_C7z(BOHgHMLMlQHw(V!uY&p=)C>5Sprr=5 zw_?U;Q=Jtu(W9Y^Y+EyLu@DX>Eu_^b`D9|b5}92s8q_G#W&}OC%a}!?spTc+1y~jH zFZba3Qi2w=e4qEcIFMy8S91Xb6i4#uAxdwjPDQ6Z!~O(aT$Y+`Ojg}`x7|NVg?=k} zzo?bZX^Z|!7n0jAhAx$$w@DBP*qoTio=pL<7Z8X{e)3+b+g4;vr@=wE6FIZ8yCi`b z`Xo+wTbQsOe&ks&g4UCZ^l0j|T4y`f(rP!BG1s`Tn8N4ryIn?$-4lJl2e+%$ z!Aj&Q;nzniez=fI>9VTROsf8wD;~S&S4(4~@jCjO%gaw=7_0)UhAGD|xHLK_2eapS zv@NW5i0nkHZC{JgNK_wyxsCz6SF(Qg#oYRBS?gog`kR)9#yE|6s2tM=%|p_Fx^=%M z#Ko8uSjNMoC4psWbFyThHp%c&SSS;YBv^PWyPDf ziYP51s^z3UdH91CO;E^rzQVm5>zzJc9n2-#s%4&|vt=oDg{bIz^iq62xmcum4@b)n)W%=0 zW`tF}Uw^?T#SU^Ad6UsM8s%}qr~ZiwWdNzIL|C}=sS$RFsZ$M`o}0*{=&7gaK`Yk0 zwQvIIUq?=L#E5n1ISCL0MA7@mTECaoIs(Ee+E7ZJab`~Bv(ZRg=J3VxBwhj#CZd9uQ9MkGiX5C47PtIyP5+fCCHLddSaT>P zN{euJ1|knxxBkc#oCpvPCvm|jEF02^guiiTBF3TARaZ1Nz&f)_(a3qwrSY~nsiwiH zGJSO9_jBO(es-PX zLsk^P4aIW-{-+ZR1^Dc+9J956hlDbhsg?}qUljL*cM=>U(r?<^%f$oD0i$gga-vem z)#$ff_Z};;U>m1~+B3uJ&PGii|D5CWX5R3#SHT;F@bvkig)A*pEp*Tq73d?H)hKJ! zk4`2GCnN#t)A|kSL>lp^=c2QWJD#KdEN^Ks={N4BVy(!km5BC`U-_)563FlB9>sY+aKMc_dmy+BZ zvmb~>y-{XI4_3jv49B^rPu6(~lwW#mPq2^z5l|R$y~!t)>l@L}_B+?`$bO`l)U~Sl zUwV;pHDWkJX-=aup9DaEFiME!k#?FypTa<87*w3k$mr@i3v}jWLGG%%=^Co?nnd z`R>~7^Zr5EPns&EF(7)(ZhCE=)EAfz$J0y(tZ?|DkaS=EH=juu7?n>x@&3R-xe6e= zA5sb!`!lBWjjc==OTfx#1QtJMPOo=t!qNUTc2T_1EPQO1YWr*d%hP+XXzTa1!fgDx zLp+8U!T`nBxu$%X6M?t2|Jsu)1dY8JQQoG5R{kE%)w9@DXU&&*b1jCxFJj6$6y#Uz zUIy-#xQ#;yk=4mMJW9TJOH4Jgng91`fjL-y~G}7*J2aM8MQgE5X?ZlOExjoe#|V5g=ev z&n2BwExQcD#b}_1V(R4Y^UwAO@hqv0q2!Cq z?|WalE>Lwp_&3xp#Aw>P5R%#w`4D~dq~W8)<6~<18NybDGKo`J^4{~VUcC|4$8hh4 zU+;H3o!D`C!{{�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 aR|@81&YkMh0UxafS)H~+RheD7`+oqBUmuMC diff --git a/docs/images/nf-core-funcscan_logo_light.png b/docs/images/nf-core-funcscan_logo_light.png index 7461540a905d0c45f87e7f52d6118a64d3ffd31e..10c5788ea535a783019398a896fe4065bde9f87d 100644 GIT binary patch delta 23528 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 delta 23556 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 D(dr2l diff --git a/docs/output.md b/docs/output.md index d5f4b8fc..0930a256 100644 --- a/docs/output.md +++ b/docs/output.md @@ -12,21 +12,10 @@ 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: -- [FastQC](#fastqc) - Raw read QC- [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline +- [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution -### FastQC - -

-Output files - -- `fastqc/` - - `*_fastqc.html`: FastQC report containing quality metrics. - - `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. - -
- -[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/).### MultiQC +### MultiQC
Output files diff --git a/docs/usage.md b/docs/usage.md index f1d3f4b5..eabfa48d 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -57,7 +57,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 nf-core/funcscan --input ./samplesheet.csv --outdir ./results --genome GRCh37 -profile docker +nextflow run nf-core/funcscan --input ./samplesheet.csv --outdir ./results -profile docker ``` This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. @@ -89,7 +89,6 @@ with: ```yaml title="params.yaml" input: './samplesheet.csv' outdir: './results/' -genome: 'GRCh37' <...> ``` diff --git a/main.nf b/main.nf index 0dc68a48..8b3b29b4 100644 --- a/main.nf +++ b/main.nf @@ -18,19 +18,6 @@ include { FUNCSCAN } from './workflows/funcscan' include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_funcscan_pipeline' include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_funcscan_pipeline' -include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_funcscan_pipeline' - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - GENOME PARAMETER VALUES -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -// TODO nf-core: Remove this line if you don't need a FASTA file -// This is an example of how to use getGenomeAttribute() to fetch parameters -// from igenomes.config using `--genome` -params.fasta = getGenomeAttribute('fasta') - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ NAMED WORKFLOWS FOR PIPELINE diff --git a/modules.json b/modules.json index 46bda8fd..c224a5c8 100644 --- a/modules.json +++ b/modules.json @@ -5,11 +5,6 @@ "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { - "fastqc": { - "branch": "master", - "git_sha": "dc94b6ee04a05ddb9f7ae050712ff30a13149164", - "installed_by": ["modules"] - }, "multiqc": { "branch": "master", "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml deleted file mode 100644 index 691d4c76..00000000 --- a/modules/nf-core/fastqc/environment.yml +++ /dev/null @@ -1,5 +0,0 @@ -channels: - - conda-forge - - bioconda -dependencies: - - bioconda::fastqc=0.12.1 diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf deleted file mode 100644 index 752c3a10..00000000 --- a/modules/nf-core/fastqc/main.nf +++ /dev/null @@ -1,64 +0,0 @@ -process FASTQC { - tag "$meta.id" - label 'process_medium' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/fastqc:0.12.1--hdfd78af_0' : - 'biocontainers/fastqc:0.12.1--hdfd78af_0' }" - - input: - tuple val(meta), path(reads) - - output: - tuple val(meta), path("*.html"), emit: html - tuple val(meta), path("*.zip") , emit: zip - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - // Make list of old name and new name pairs to use for renaming in the bash while loop - def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[ reads, "${prefix}.${reads.extension}" ]] : reads.withIndex().collect { entry, index -> [ entry, "${prefix}_${index + 1}.${entry.extension}" ] } - def rename_to = old_new_pairs*.join(' ').join(' ') - def renamed_files = old_new_pairs.collect{ _old_name, new_name -> new_name }.join(' ') - - // The total amount of allocated RAM by FastQC is equal to the number of threads defined (--threads) time the amount of RAM defined (--memory) - // https://github.com/s-andrews/FastQC/blob/1faeea0412093224d7f6a07f777fad60a5650795/fastqc#L211-L222 - // Dividing the task.memory by task.cpu allows to stick to requested amount of RAM in the label - def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') / task.cpus - // FastQC memory value allowed range (100 - 10000) - def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb) - - """ - printf "%s %s\\n" $rename_to | while read old_name new_name; do - [ -f "\${new_name}" ] || ln -s \$old_name \$new_name - done - - fastqc \\ - $args \\ - --threads $task.cpus \\ - --memory $fastqc_memory \\ - $renamed_files - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' ) - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.html - touch ${prefix}.zip - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml deleted file mode 100644 index 2b2e62b8..00000000 --- a/modules/nf-core/fastqc/meta.yml +++ /dev/null @@ -1,67 +0,0 @@ -name: fastqc -description: Run FastQC on sequenced reads -keywords: - - quality control - - qc - - adapters - - fastq -tools: - - fastqc: - description: | - FastQC gives general quality metrics about your reads. - It provides information about the quality score distribution - across your reads, the per base sequence content (%A/C/G/T). - - You get information about adapter contamination and other - overrepresented sequences. - homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ - documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ - licence: ["GPL-2.0-only"] - identifier: biotools:fastqc -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. -output: - - html: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - "*.html": - type: file - description: FastQC report - pattern: "*_{fastqc.html}" - - zip: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - "*.zip": - type: file - description: FastQC report archive - pattern: "*_{fastqc.zip}" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@drpatelh" - - "@grst" - - "@ewels" - - "@FelixKrueger" -maintainers: - - "@drpatelh" - - "@grst" - - "@ewels" - - "@FelixKrueger" diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test deleted file mode 100644 index e9d79a07..00000000 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ /dev/null @@ -1,309 +0,0 @@ -nextflow_process { - - name "Test Process FASTQC" - script "../main.nf" - process "FASTQC" - - tag "modules" - tag "modules_nfcore" - tag "fastqc" - - test("sarscov2 single-end [fastq]") { - - when { - process { - """ - input[0] = Channel.of([ - [ id: 'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. - // looks like this:
Mon 2 Oct 2023
test.gz
- // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } - ) - } - } - - test("sarscov2 paired-end [fastq]") { - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } - ) - } - } - - test("sarscov2 interleaved [fastq]") { - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } - ) - } - } - - test("sarscov2 paired-end [bam]") { - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } - ) - } - } - - test("sarscov2 multiple [fastq]") { - - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, - { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, - { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][2]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][3]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } - ) - } - } - - test("sarscov2 custom_prefix") { - - when { - process { - """ - input[0] = Channel.of([ - [ id:'mysample', single_end:true ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - { assert snapshot(process.out.versions).match() } - ) - } - } - - test("sarscov2 single-end [fastq] - stub") { - - options "-stub" - when { - process { - """ - input[0] = Channel.of([ - [ id: 'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("sarscov2 paired-end [fastq] - stub") { - - options "-stub" - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("sarscov2 interleaved [fastq] - stub") { - - options "-stub" - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("sarscov2 paired-end [bam] - stub") { - - options "-stub" - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("sarscov2 multiple [fastq] - stub") { - - options "-stub" - when { - process { - """ - input[0] = Channel.of([ - [id: 'test', single_end: false], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("sarscov2 custom_prefix - stub") { - - options "-stub" - when { - process { - """ - input[0] = Channel.of([ - [ id:'mysample', single_end:true ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) - ]) - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } -} diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap deleted file mode 100644 index d5db3092..00000000 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ /dev/null @@ -1,392 +0,0 @@ -{ - "sarscov2 custom_prefix": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:02:16.374038" - }, - "sarscov2 single-end [fastq] - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": true - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "test", - "single_end": true - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "test", - "single_end": true - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:02:24.993809" - }, - "sarscov2 custom_prefix - stub": { - "content": [ - { - "0": [ - [ - { - "id": "mysample", - "single_end": true - }, - "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "mysample", - "single_end": true - }, - "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "mysample", - "single_end": true - }, - "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "mysample", - "single_end": true - }, - "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:03:10.93942" - }, - "sarscov2 interleaved [fastq]": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:01:42.355718" - }, - "sarscov2 paired-end [bam]": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:01:53.276274" - }, - "sarscov2 multiple [fastq]": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:02:05.527626" - }, - "sarscov2 paired-end [fastq]": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:01:31.188871" - }, - "sarscov2 paired-end [fastq] - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:02:34.273566" - }, - "sarscov2 multiple [fastq] - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:03:02.304411" - }, - "sarscov2 single-end [fastq]": { - "content": [ - [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:01:19.095607" - }, - "sarscov2 interleaved [fastq] - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:02:44.640184" - }, - "sarscov2 paired-end [bam] - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "html": [ - [ - { - "id": "test", - "single_end": false - }, - "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ], - "zip": [ - [ - { - "id": "test", - "single_end": false - }, - "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-22T11:02:53.550742" - } -} \ No newline at end of file diff --git a/modules/nf-core/fastqc/tests/tags.yml b/modules/nf-core/fastqc/tests/tags.yml deleted file mode 100644 index 7834294b..00000000 --- a/modules/nf-core/fastqc/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -fastqc: - - modules/nf-core/fastqc/** diff --git a/nextflow.config b/nextflow.config index 2a19c61e..d5431d0d 100644 --- a/nextflow.config +++ b/nextflow.config @@ -13,11 +13,6 @@ params { // Input options input = null - // References - genome = null - igenomes_base = 's3://ngi-igenomes/igenomes/' - igenomes_ignore = false - // MultiQC options multiqc_config = null multiqc_title = null @@ -180,8 +175,7 @@ podman.registry = 'quay.io' singularity.registry = 'quay.io' charliecloud.registry = 'quay.io' -// Load igenomes.config if required -includeConfig !params.igenomes_ignore ? 'conf/igenomes.config' : 'conf/igenomes_ignored.config' + // Export these variables to prevent local Python/R libraries from conflicting with those in the container // The JULIA depot path has been adjusted to a fixed path `/usr/local/share/julia` that needs to be used for packages in the container. @@ -273,15 +267,15 @@ manifest { homePage = 'https://github.com/nf-core/funcscan' description = """Pipeline for screening for functional components of assembled contigs""" mainScript = 'main.nf' - defaultBranch = 'main' + defaultBranch = 'master' nextflowVersion = '!>=24.04.2' - version = '2.0.0' + version = '2.1.0dev' doi = '' } // 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 { @@ -307,7 +301,7 @@ validation { https://doi.org/10.1038/s41587-020-0439-x * Software dependencies - https://github.com/nf-core/funcscan/blob/main/CITATIONS.md + https://github.com/nf-core/funcscan/blob/master/CITATIONS.md """ } summary { diff --git a/nextflow_schema.json b/nextflow_schema.json index 00d6af6d..9c6147a1 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/nf-core/funcscan/main/nextflow_schema.json", + "$id": "https://raw.githubusercontent.com/nf-core/funcscan/master/nextflow_schema.json", "title": "nf-core/funcscan pipeline parameters", "description": "Pipeline for screening for functional components of assembled contigs", "type": "object", @@ -43,45 +43,6 @@ } } }, - "reference_genome_options": { - "title": "Reference genome options", - "type": "object", - "fa_icon": "fas fa-dna", - "description": "Reference genome related files and options required for the workflow.", - "properties": { - "genome": { - "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." - }, - "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. 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.", - "fa_icon": "far fa-file-code" - }, - "igenomes_ignore": { - "type": "boolean", - "description": "Do not load the iGenomes reference config.", - "fa_icon": "fas fa-ban", - "hidden": true, - "help_text": "Do not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config`." - }, - "igenomes_base": { - "type": "string", - "format": "directory-path", - "description": "The base path to the igenomes reference files", - "fa_icon": "fas fa-ban", - "hidden": true, - "default": "s3://ngi-igenomes/igenomes/" - } - } - }, "institutional_config_options": { "title": "Institutional config options", "type": "object", @@ -232,9 +193,6 @@ { "$ref": "#/$defs/input_output_options" }, - { - "$ref": "#/$defs/reference_genome_options" - }, { "$ref": "#/$defs/institutional_config_options" }, diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 3f67007a..f4632c8d 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -21,9 +21,9 @@ { "@id": "./", "@type": "Dataset", - "creativeWorkStatus": "Stable", - "datePublished": "2024-12-20T16:01:20+00:00", - "description": "

\n \n \n \"nf-core/funcscan\"\n \n

[![GitHub Actions CI Status](https://github.com/nf-core/funcscan/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/funcscan/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/funcscan/results)[![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/nf-core/funcscan)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23funcscan-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/funcscan)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/funcscan** is a bioinformatics pipeline that ...\n\n\n\n\n1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/))2. 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 nf-core/funcscan \\\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\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/funcscan/usage) and the [parameter documentation](https://nf-co.re/funcscan/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/funcscan/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/funcscan/output).\n\n## Credits\n\nnf-core/funcscan was originally written by Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James A. Fellows Yates.\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\nFor further information or help, don't hesitate to get in touch on the [Slack `#funcscan` channel](https://nfcore.slack.com/channels/funcscan) (you can join with [this invite](https://nf-co.re/join/slack)).\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\nYou can cite the `nf-core` publication as follows:\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", + "creativeWorkStatus": "InProgress", + "datePublished": "2025-01-20T14:35:16+00:00", + "description": "

\n \n \n \"nf-core/funcscan\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/funcscan/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/funcscan/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/funcscan/results)[![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/nf-core/funcscan)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23funcscan-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/funcscan)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/funcscan** 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 nf-core/funcscan \\\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\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/funcscan/usage) and the [parameter documentation](https://nf-co.re/funcscan/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/funcscan/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/funcscan/output).\n\n## Credits\n\nnf-core/funcscan was originally written by Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James A. Fellows Yates.\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\nFor further information or help, don't hesitate to get in touch on the [Slack `#funcscan` channel](https://nfcore.slack.com/channels/funcscan) (you can join with [this invite](https://nf-co.re/join/slack)).\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\nYou can cite the `nf-core` publication as follows:\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" @@ -99,7 +99,7 @@ }, "mentions": [ { - "@id": "#4c661451-7e3e-44e5-9c60-1163324cf072" + "@id": "#4514b8c3-12c1-4b62-b7e2-f20642a72a3c" } ], "name": "nf-core/funcscan" @@ -121,18 +121,14 @@ }, { "@id": "main.nf", - "@type": [ - "File", - "SoftwareSourceCode", - "ComputationalWorkflow" - ], + "@type": ["File", "SoftwareSourceCode", "ComputationalWorkflow"], "creator": [ { "@id": "#jfy133@gmail.com" } ], "dateCreated": "", - "dateModified": "2024-12-20T17:01:20Z", + "dateModified": "2025-01-20T14:35:16Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -153,25 +149,16 @@ "screening", "secondary-metabolites" ], - "license": [ - "MIT" - ], - "name": [ - "nf-core/funcscan" - ], + "license": ["MIT"], + "name": ["nf-core/funcscan"], "programmingLanguage": { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow" }, "sdPublisher": { "@id": "https://nf-co.re/" }, - "url": [ - "https://github.com/nf-core/funcscan", - "https://nf-co.re/funcscan/2.0.0/" - ], - "version": [ - "2.0.0" - ] + "url": ["https://github.com/nf-core/funcscan", "https://nf-co.re/funcscan/dev/"], + "version": ["2.1.0dev"] }, { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow", @@ -186,11 +173,11 @@ "version": "!>=24.04.2" }, { - "@id": "#4c661451-7e3e-44e5-9c60-1163324cf072", + "@id": "#4514b8c3-12c1-4b62-b7e2-f20642a72a3c", "@type": "TestSuite", "instance": [ { - "@id": "#77e97a37-fd48-4a1a-9bdd-53ed807cb1e2" + "@id": "#b7433dac-5a58-4403-b6c9-8a371379c502" } ], "mainEntity": { @@ -199,7 +186,7 @@ "name": "Test suite for nf-core/funcscan" }, { - "@id": "#77e97a37-fd48-4a1a-9bdd-53ed807cb1e2", + "@id": "#b7433dac-5a58-4403-b6c9-8a371379c502", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/funcscan", "resource": "repos/nf-core/funcscan/actions/workflows/ci.yml", @@ -334,4 +321,4 @@ "name": "James Fellows Yates" } ] -} \ No newline at end of file +} diff --git a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf index 0d5d68a6..3625f764 100644 --- a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf @@ -63,11 +63,6 @@ workflow PIPELINE_INITIALISATION { nextflow_cli_args ) - // - // Custom validation for pipeline parameters - // - validateInputParameters() - // // Create channel from input file provided through params.input // @@ -150,12 +145,6 @@ workflow PIPELINE_COMPLETION { FUNCTIONS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -// -// Check and validate pipeline parameters -// -def validateInputParameters() { - genomeExistsError() -} // // Validate channels from input samplesheet @@ -172,31 +161,6 @@ def validateInputSamplesheet(input) { return [ metas[0], fastqs ] } // -// Get attribute from genome config file e.g. fasta -// -def getGenomeAttribute(attribute) { - if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { - if (params.genomes[ params.genome ].containsKey(attribute)) { - return params.genomes[ params.genome ][ attribute ] - } - } - return null -} - -// -// Exit pipeline if incorrect --genome key provided -// -def genomeExistsError() { - if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { - def error_string = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + - " Genome '${params.genome}' not found in any config files provided to the pipeline.\n" + - " Currently, the available genome keys are:\n" + - " ${params.genomes.keySet().join(", ")}\n" + - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" - error(error_string) - } -} -// // Generate methods description for MultiQC // def toolCitationText() { @@ -205,7 +169,6 @@ def toolCitationText() { // Uncomment function in methodsDescriptionText to render in MultiQC report def citation_text = [ "Tools used in the workflow included:", - "FastQC (Andrews 2010),", "MultiQC (Ewels et al. 2016)", "." ].join(' ').trim() @@ -218,7 +181,6 @@ def toolBibliographyText() { // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "
  • Author (2023) Pub name, Journal, DOI
  • " : "", // Uncomment function in methodsDescriptionText to render in MultiQC report def reference_text = [ - "
  • Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/).
  • ", "
  • Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354
  • " ].join(' ').trim() diff --git a/workflows/funcscan.nf b/workflows/funcscan.nf index fafc69bf..4fed6200 100644 --- a/workflows/funcscan.nf +++ b/workflows/funcscan.nf @@ -3,7 +3,6 @@ IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { FASTQC } from '../modules/nf-core/fastqc/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' include { paramsSummaryMap } from 'plugin/nf-schema' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' @@ -24,14 +23,6 @@ workflow FUNCSCAN { ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() - // - // MODULE: Run FastQC - // - FASTQC ( - ch_samplesheet - ) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}) - ch_versions = ch_versions.mix(FASTQC.out.versions.first()) // // Collate and save software versions From e4d5b32cd28d5d87fd1c43d97ff7f6368ec1fa7e Mon Sep 17 00:00:00 2001 From: jasmezz Date: Tue, 21 Jan 2025 09:09:34 +0100 Subject: [PATCH 100/175] Update all MMseqs modules to v17, update changelog --- CHANGELOG.md | 3 +- modules.json | 8 ++-- .../nf-core/mmseqs/createdb/environment.yml | 2 +- modules/nf-core/mmseqs/createdb/main.nf | 4 +- .../mmseqs/createdb/tests/main.nf.test.snap | 12 ++--- .../nf-core/mmseqs/createtsv/environment.yml | 2 +- modules/nf-core/mmseqs/createtsv/main.nf | 4 +- .../mmseqs/createtsv/tests/main.nf.test.snap | 44 ++++++++++++------- .../nf-core/mmseqs/databases/environment.yml | 2 +- modules/nf-core/mmseqs/databases/main.nf | 4 +- .../mmseqs/databases/tests/main.nf.test.snap | 6 +-- .../nf-core/mmseqs/taxonomy/environment.yml | 2 +- modules/nf-core/mmseqs/taxonomy/main.nf | 4 +- .../mmseqs/taxonomy/tests/main.nf.test.snap | 14 +++--- 14 files changed, 62 insertions(+), 49 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1bbc110..c6c5f750 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#421](https://github.com/nf-core/funcscan/pull/421) Updated to nf-core template 3.0.2. (by @jfy133) - [#427](https://github.com/nf-core/funcscan/pull/427) AMPcombi now can use multiple other databases for classifications. (by @darcy220606) - [#429](https://github.com/nf-core/funcscan/pull/429) Updated to nf-core template 3.1.0. (by @jfy133 and @jasmezz) +- [#431](https://github.com/nf-core/funcscan/pull/431) Updated all MMseqs modules to version 17, added `--taxa_classification_mmseqs_compressed` parameter. (by @jasmezz) ### `Fixed` @@ -22,7 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | --------- | ---------------- | ----------- | | AMPcombi | 0.2.2 | 2.0.1 | | Macrel | 1.2.0 | 1.4.0 | -| MMseqs2 | 15.6f452 | 16.747c6 | +| MMseqs2 | 15.6f452 | 17.b804f | | MultiQC | 1.24.0 | 1.26 | | Pyrodigal | 3.3.0 | 3.6.3 | diff --git a/modules.json b/modules.json index 7a3cd777..68f7114a 100644 --- a/modules.json +++ b/modules.json @@ -147,22 +147,22 @@ }, "mmseqs/createdb": { "branch": "master", - "git_sha": "83ba95cd93c6a8cc5e2d9226083c01aea5e80d2a", + "git_sha": "2dc4c0474a77f5f8709eb970d890ad102e92af6f", "installed_by": ["modules"] }, "mmseqs/createtsv": { "branch": "master", - "git_sha": "0306f1e9cc93049a210f32b52da3b180192aa003", + "git_sha": "2dc4c0474a77f5f8709eb970d890ad102e92af6f", "installed_by": ["modules"] }, "mmseqs/databases": { "branch": "master", - "git_sha": "83ba95cd93c6a8cc5e2d9226083c01aea5e80d2a", + "git_sha": "2dc4c0474a77f5f8709eb970d890ad102e92af6f", "installed_by": ["modules"] }, "mmseqs/taxonomy": { "branch": "master", - "git_sha": "0306f1e9cc93049a210f32b52da3b180192aa003", + "git_sha": "2dc4c0474a77f5f8709eb970d890ad102e92af6f", "installed_by": ["modules"] }, "multiqc": { diff --git a/modules/nf-core/mmseqs/createdb/environment.yml b/modules/nf-core/mmseqs/createdb/environment.yml index 235ad03a..d3561349 100644 --- a/modules/nf-core/mmseqs/createdb/environment.yml +++ b/modules/nf-core/mmseqs/createdb/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=16.747c6 + - bioconda::mmseqs2=17.b804f diff --git a/modules/nf-core/mmseqs/createdb/main.nf b/modules/nf-core/mmseqs/createdb/main.nf index ef113068..6f8d5b15 100644 --- a/modules/nf-core/mmseqs/createdb/main.nf +++ b/modules/nf-core/mmseqs/createdb/main.nf @@ -4,8 +4,8 @@ process MMSEQS_CREATEDB { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:17.b804f--hd6d6fdc_1': + 'biocontainers/mmseqs2:17.b804f--hd6d6fdc_1' }" input: tuple val(meta), path(sequence) diff --git a/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap b/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap index ececa7a4..9eee149b 100644 --- a/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/createdb/tests/main.nf.test.snap @@ -20,14 +20,14 @@ ] ], [ - "versions.yml:md5,d30a1af41e7f3f5b67afdec412fa693f" + "versions.yml:md5,c62b08152082097334109fe08ec6333a" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "24.10.3" }, - "timestamp": "2024-12-15T19:30:25.339409238" + "timestamp": "2025-01-20T14:11:57.883871" }, "Should build an mmseqs db from a zipped amino acid sequence file": { "content": [ @@ -49,13 +49,13 @@ ] ], [ - "versions.yml:md5,d30a1af41e7f3f5b67afdec412fa693f" + "versions.yml:md5,c62b08152082097334109fe08ec6333a" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "24.10.3" }, - "timestamp": "2024-12-15T19:30:34.93361715" + "timestamp": "2025-01-20T14:12:10.986433" } } \ No newline at end of file diff --git a/modules/nf-core/mmseqs/createtsv/environment.yml b/modules/nf-core/mmseqs/createtsv/environment.yml index 235ad03a..d3561349 100644 --- a/modules/nf-core/mmseqs/createtsv/environment.yml +++ b/modules/nf-core/mmseqs/createtsv/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=16.747c6 + - bioconda::mmseqs2=17.b804f diff --git a/modules/nf-core/mmseqs/createtsv/main.nf b/modules/nf-core/mmseqs/createtsv/main.nf index b41b5c54..3ab0159a 100644 --- a/modules/nf-core/mmseqs/createtsv/main.nf +++ b/modules/nf-core/mmseqs/createtsv/main.nf @@ -5,8 +5,8 @@ process MMSEQS_CREATETSV { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:17.b804f--hd6d6fdc_1': + 'biocontainers/mmseqs2:17.b804f--hd6d6fdc_1' }" input: tuple val(meta), path(db_result) diff --git a/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap b/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap index 8279c81e..a70f839f 100644 --- a/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/createtsv/tests/main.nf.test.snap @@ -12,7 +12,7 @@ ] ], "1": [ - "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" + "versions.yml:md5,ce808eb9a57e201a48afec56168f9e77" ], "tsv": [ [ @@ -24,15 +24,15 @@ ] ], "versions": [ - "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" + "versions.yml:md5,ce808eb9a57e201a48afec56168f9e77" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "24.10.3" }, - "timestamp": "2024-12-05T10:50:48.386202112" + "timestamp": "2025-01-20T17:29:15.220926" }, "mmseqs/createtsv - sarscov2 - cluster - stub": { "content": [ @@ -47,7 +47,7 @@ ] ], "1": [ - "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" + "versions.yml:md5,ce808eb9a57e201a48afec56168f9e77" ], "tsv": [ [ @@ -59,30 +59,42 @@ ] ], "versions": [ - "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" + "versions.yml:md5,ce808eb9a57e201a48afec56168f9e77" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "24.10.3" }, - "timestamp": "2024-12-05T10:50:56.33475153" + "timestamp": "2025-01-20T17:29:32.089204" }, "mmseqs/createtsv - bacteroides_fragilis - taxonomy": { "content": [ { "0": [ - + [ + { + "id": "test_query", + "single_end": false + }, + "test_query.tsv:md5,9179f5c85b8b87a4dc998c9d17840161" + ] ], "1": [ - + "versions.yml:md5,ce808eb9a57e201a48afec56168f9e77" ], "tsv": [ - + [ + { + "id": "test_query", + "single_end": false + }, + "test_query.tsv:md5,9179f5c85b8b87a4dc998c9d17840161" + ] ], "versions": [ - + "versions.yml:md5,ce808eb9a57e201a48afec56168f9e77" ] } ], @@ -90,7 +102,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.3" }, - "timestamp": "2025-01-16T14:29:41.214561285" + "timestamp": "2025-01-20T17:28:41.472818" }, "mmseqs/createtsv - sarscov2 - cluster": { "content": [ @@ -105,7 +117,7 @@ ] ], "1": [ - "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" + "versions.yml:md5,ce808eb9a57e201a48afec56168f9e77" ], "tsv": [ [ @@ -117,7 +129,7 @@ ] ], "versions": [ - "versions.yml:md5,34bac3809a7eaf833a944be6888f83a7" + "versions.yml:md5,ce808eb9a57e201a48afec56168f9e77" ] } ], @@ -125,6 +137,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.3" }, - "timestamp": "2025-01-15T11:17:04.119521629" + "timestamp": "2025-01-20T17:28:58.633976" } } \ No newline at end of file diff --git a/modules/nf-core/mmseqs/databases/environment.yml b/modules/nf-core/mmseqs/databases/environment.yml index 235ad03a..d3561349 100644 --- a/modules/nf-core/mmseqs/databases/environment.yml +++ b/modules/nf-core/mmseqs/databases/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=16.747c6 + - bioconda::mmseqs2=17.b804f diff --git a/modules/nf-core/mmseqs/databases/main.nf b/modules/nf-core/mmseqs/databases/main.nf index 8f94eac5..51d54ab7 100644 --- a/modules/nf-core/mmseqs/databases/main.nf +++ b/modules/nf-core/mmseqs/databases/main.nf @@ -4,8 +4,8 @@ process MMSEQS_DATABASES { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:17.b804f--hd6d6fdc_1': + 'biocontainers/mmseqs2:17.b804f--hd6d6fdc_1' }" input: val database diff --git a/modules/nf-core/mmseqs/databases/tests/main.nf.test.snap b/modules/nf-core/mmseqs/databases/tests/main.nf.test.snap index b3d0b9f7..2805e1c0 100644 --- a/modules/nf-core/mmseqs/databases/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/databases/tests/main.nf.test.snap @@ -15,14 +15,14 @@ "database_taxonomy" ], [ - "versions.yml:md5,e236ec16fdc9f054d0a660d02e680255" + "versions.yml:md5,387bbb2d1d6bac273e8158743af4c856" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "24.10.3" }, - "timestamp": "2024-12-05T14:33:16.697954954" + "timestamp": "2025-01-20T15:32:42.284982" }, "test-mmseqs-databases-stub": { "content": [ diff --git a/modules/nf-core/mmseqs/taxonomy/environment.yml b/modules/nf-core/mmseqs/taxonomy/environment.yml index c5b78bc7..69afa609 100644 --- a/modules/nf-core/mmseqs/taxonomy/environment.yml +++ b/modules/nf-core/mmseqs/taxonomy/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::mmseqs2=16.747c6" + - bioconda::mmseqs2=17.b804f diff --git a/modules/nf-core/mmseqs/taxonomy/main.nf b/modules/nf-core/mmseqs/taxonomy/main.nf index bb0caf23..d73bf03f 100644 --- a/modules/nf-core/mmseqs/taxonomy/main.nf +++ b/modules/nf-core/mmseqs/taxonomy/main.nf @@ -4,8 +4,8 @@ process MMSEQS_TAXONOMY { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:16.747c6--pl5321h6a68c12_0': - 'biocontainers/mmseqs2:16.747c6--pl5321h6a68c12_0' }" + 'https://depot.galaxyproject.org/singularity/mmseqs2:17.b804f--hd6d6fdc_1': + 'biocontainers/mmseqs2:17.b804f--hd6d6fdc_1' }" input: tuple val(meta), path(db_query) diff --git a/modules/nf-core/mmseqs/taxonomy/tests/main.nf.test.snap b/modules/nf-core/mmseqs/taxonomy/tests/main.nf.test.snap index 8a21ce4f..4402c731 100644 --- a/modules/nf-core/mmseqs/taxonomy/tests/main.nf.test.snap +++ b/modules/nf-core/mmseqs/taxonomy/tests/main.nf.test.snap @@ -8,14 +8,14 @@ "test_query.index" ], [ - "versions.yml:md5,a8f24dca956a1c84099ff129f826c63f" + "versions.yml:md5,d86f3223ff4a4d664228707b581dca8a" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.3" }, - "timestamp": "2024-08-09T10:11:53.632751" + "timestamp": "2025-01-20T16:28:40.091017" }, "mmseqs/taxonomy - bacteroides_fragilis - genome_nt - stub": { "content": [ @@ -59,7 +59,7 @@ ] ], "1": [ - "versions.yml:md5,019af282b55a28b89c5376b4e7a70fe4" + "versions.yml:md5,d86f3223ff4a4d664228707b581dca8a" ], "db_taxonomy": [ [ @@ -100,7 +100,7 @@ ] ], "versions": [ - "versions.yml:md5,019af282b55a28b89c5376b4e7a70fe4" + "versions.yml:md5,d86f3223ff4a4d664228707b581dca8a" ] } ], @@ -108,6 +108,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.3" }, - "timestamp": "2025-01-16T12:52:06.466899117" + "timestamp": "2025-01-20T16:48:57.634552" } } \ No newline at end of file From 639ee4911fb9e2c6c63b3511d1d1732a8c1fc7d5 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Tue, 21 Jan 2025 09:12:59 +0100 Subject: [PATCH 101/175] Change mmseqs `searchtype` default value back to 2 --- nextflow.config | 2 +- nextflow_schema.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow.config b/nextflow.config index ac10a1cb..85914230 100644 --- a/nextflow.config +++ b/nextflow.config @@ -45,7 +45,7 @@ params { taxa_classification_mmseqs_db_savetmp = false taxa_classification_mmseqs_taxonomy_savetmp = false - taxa_classification_mmseqs_taxonomy_searchtype = 3 + taxa_classification_mmseqs_taxonomy_searchtype = 2 taxa_classification_mmseqs_taxonomy_lcaranks = 'kingdom,phylum,class,order,family,genus,species' taxa_classification_mmseqs_taxonomy_taxlineage = 1 taxa_classification_mmseqs_taxonomy_sensitivity = 5.0 diff --git a/nextflow_schema.json b/nextflow_schema.json index b7a65129..b5fea956 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -140,7 +140,7 @@ }, "taxa_classification_mmseqs_taxonomy_searchtype": { "type": "integer", - "default": 3, + "default": 2, "help_text": "Specify the type of alignment to be carried out between the query database and the reference MMseqs2 database. This can be set to '0' for automatic detection, '1' for amino acid alignment, '2' for translating the inputs and running the alignment on the translated sequences, '3' nucleotide based alignment and '4' for the translated nucleotide sequences alignment. More details can be found in the [documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - mmseqs taxonomy: `--search-type`", "description": "Specify the alignment type between database and query.", "fa_icon": "fas fa-align-center" From 271c1cf1d2c7aeddf9395ac8a4a05599bacd5550 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Tue, 21 Jan 2025 12:22:18 +0100 Subject: [PATCH 102/175] Update seqkit --- CHANGELOG.md | 1 + modules.json | 2 +- modules/nf-core/seqkit/seq/environment.yml | 2 +- modules/nf-core/seqkit/seq/main.nf | 4 +- .../seqkit/seq/tests/main.nf.test.snap | 40 +++++++++---------- 5 files changed, 25 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cffc5f1a..9984afad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | MMseqs2 | 15.6f452 | 17.b804f | | MultiQC | 1.24.0 | 1.26 | | Pyrodigal | 3.3.0 | 3.6.3 | +| seqkit | 2.8.1 | 2.9.0 | ### `Deprecated` diff --git a/modules.json b/modules.json index 68f7114a..2ed71484 100644 --- a/modules.json +++ b/modules.json @@ -197,7 +197,7 @@ }, "seqkit/seq": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "60645c2b45e56579de0a0c89416805cae44c1f46", "installed_by": ["modules"] }, "tabix/bgzip": { diff --git a/modules/nf-core/seqkit/seq/environment.yml b/modules/nf-core/seqkit/seq/environment.yml index 4f8058a9..160a67c0 100644 --- a/modules/nf-core/seqkit/seq/environment.yml +++ b/modules/nf-core/seqkit/seq/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::seqkit=2.8.1" + - "bioconda::seqkit=2.9.0" diff --git a/modules/nf-core/seqkit/seq/main.nf b/modules/nf-core/seqkit/seq/main.nf index d7d38fc8..9d76da21 100644 --- a/modules/nf-core/seqkit/seq/main.nf +++ b/modules/nf-core/seqkit/seq/main.nf @@ -5,8 +5,8 @@ process SEQKIT_SEQ { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/seqkit:2.8.1--h9ee0642_0': - 'biocontainers/seqkit:2.8.1--h9ee0642_0' }" + 'https://depot.galaxyproject.org/singularity/seqkit:2.9.0--h9ee0642_0': + 'biocontainers/seqkit:2.9.0--h9ee0642_0' }" input: tuple val(meta), path(fastx) diff --git a/modules/nf-core/seqkit/seq/tests/main.nf.test.snap b/modules/nf-core/seqkit/seq/tests/main.nf.test.snap index e6910966..68171935 100644 --- a/modules/nf-core/seqkit/seq/tests/main.nf.test.snap +++ b/modules/nf-core/seqkit/seq/tests/main.nf.test.snap @@ -11,7 +11,7 @@ ] ], "1": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + "versions.yml:md5,eeb475e557ef671d4b58e11f82d2448e" ], "fastx": [ [ @@ -22,15 +22,15 @@ ] ], "versions": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + "versions.yml:md5,eeb475e557ef671d4b58e11f82d2448e" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.3" }, - "timestamp": "2024-05-08T08:52:18.220051903" + "timestamp": "2025-01-15T15:13:34.513457" }, "sarscov2-test_1_fastq_gz": { "content": [ @@ -44,7 +44,7 @@ ] ], "1": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + "versions.yml:md5,eeb475e557ef671d4b58e11f82d2448e" ], "fastx": [ [ @@ -55,15 +55,15 @@ ] ], "versions": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + "versions.yml:md5,eeb475e557ef671d4b58e11f82d2448e" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.3" }, - "timestamp": "2024-05-08T08:51:55.607826581" + "timestamp": "2025-01-15T15:13:27.316329" }, "sarscov2-genome_fasta": { "content": [ @@ -77,7 +77,7 @@ ] ], "1": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + "versions.yml:md5,eeb475e557ef671d4b58e11f82d2448e" ], "fastx": [ [ @@ -88,15 +88,15 @@ ] ], "versions": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + "versions.yml:md5,eeb475e557ef671d4b58e11f82d2448e" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.3" }, - "timestamp": "2024-05-08T08:51:27.717072933" + "timestamp": "2025-01-15T15:13:18.463038" }, "sarscov2-genome_fasta_gz": { "content": [ @@ -110,7 +110,7 @@ ] ], "1": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + "versions.yml:md5,eeb475e557ef671d4b58e11f82d2448e" ], "fastx": [ [ @@ -121,14 +121,14 @@ ] ], "versions": [ - "versions.yml:md5,34894c4efa5e10a923e78975a3d260dd" + "versions.yml:md5,eeb475e557ef671d4b58e11f82d2448e" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.3" }, - "timestamp": "2024-05-08T08:51:37.917560104" + "timestamp": "2025-01-15T15:13:22.960973" } } \ No newline at end of file From a381623b85911955a62498353af1e5e129335e84 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Tue, 21 Jan 2025 13:29:24 +0100 Subject: [PATCH 103/175] Update pyrodigal module --- modules/nf-core/prokka/environment.yml | 1 + modules/nf-core/prokka/main.nf | 57 ++- modules/nf-core/prokka/tests/main.nf.test | 65 ++++ .../nf-core/prokka/tests/main.nf.test.snap | 326 ++++++++++++++++++ 4 files changed, 436 insertions(+), 13 deletions(-) diff --git a/modules/nf-core/prokka/environment.yml b/modules/nf-core/prokka/environment.yml index 7c9753fc..1d1a019f 100644 --- a/modules/nf-core/prokka/environment.yml +++ b/modules/nf-core/prokka/environment.yml @@ -3,3 +3,4 @@ channels: - bioconda dependencies: - bioconda::prokka=1.14.6 + - conda-forge::openjdk=8.0.412 diff --git a/modules/nf-core/prokka/main.nf b/modules/nf-core/prokka/main.nf index adfda037..bf5e64fc 100644 --- a/modules/nf-core/prokka/main.nf +++ b/modules/nf-core/prokka/main.nf @@ -1,11 +1,11 @@ process PROKKA { - tag "$meta.id" + tag "${meta.id}" label 'process_low' conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/prokka:1.14.6--pl5321hdfd78af_4' : - 'biocontainers/prokka:1.14.6--pl5321hdfd78af_4' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/3a/3af46b047c8fe84112adeaecf300878217c629b97f111f923ecf327656ddd141/data' : + 'community.wave.seqera.io/library/prokka_openjdk:10546cadeef11472' }" input: tuple val(meta), path(fasta) @@ -31,18 +31,49 @@ process PROKKA { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def proteins_opt = proteins ? "--proteins ${proteins[0]}" : "" - def prodigal_tf = prodigal_tf ? "--prodigaltf ${prodigal_tf[0]}" : "" + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def input = fasta.toString() - ~/\.gz$/ + def decompress = fasta.getExtension() == "gz" ? "gunzip -c ${fasta} > ${input}" : "" + def cleanup = fasta.getExtension() == "gz" ? "rm ${input}" : "" + def proteins_opt = proteins ? "--proteins ${proteins}" : "" + def prodigal_tf_in = prodigal_tf ? "--prodigaltf ${prodigal_tf}" : "" """ + ${decompress} + prokka \\ - $args \\ - --cpus $task.cpus \\ - --prefix $prefix \\ - $proteins_opt \\ - $prodigal_tf \\ - $fasta + ${args} \\ + --cpus ${task.cpus} \\ + --prefix ${prefix} \\ + ${proteins_opt} \\ + ${prodigal_tf_in} \\ + ${input} + + ${cleanup} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + prokka: \$(echo \$(prokka --version 2>&1) | sed 's/^.*prokka //') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir ${prefix} + touch ${prefix}/${prefix}.gff + touch ${prefix}/${prefix}.gbk + touch ${prefix}/${prefix}.fna + touch ${prefix}/${prefix}.faa + touch ${prefix}/${prefix}.ffn + touch ${prefix}/${prefix}.sqn + touch ${prefix}/${prefix}.fsa + touch ${prefix}/${prefix}.tbl + touch ${prefix}/${prefix}.err + touch ${prefix}/${prefix}.log + touch ${prefix}/${prefix}.txt + touch ${prefix}/${prefix}.tsv + touch ${prefix}/${prefix}.gff cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/prokka/tests/main.nf.test b/modules/nf-core/prokka/tests/main.nf.test index dca19bba..68150b33 100644 --- a/modules/nf-core/prokka/tests/main.nf.test +++ b/modules/nf-core/prokka/tests/main.nf.test @@ -47,4 +47,69 @@ nextflow_process { } + test("Prokka - sarscov2 - genome.fasta.gz") { + + when { + process { + """ + input[0] = Channel.fromList([ + tuple([ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true)) + ]) + input[1] = [] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.gbk.get(0).get(1)).exists() }, + { assert path(process.out.log.get(0).get(1)).exists() }, + { assert path(process.out.sqn.get(0).get(1)).exists() }, + { assert snapshot( + process.out.gff, + process.out.fna, + process.out.faa, + process.out.ffn, + process.out.fsa, + process.out.tbl, + process.out.err, + process.out.txt, + process.out.tsv, + process.out.versions + ).match() + } + ) + } + + } + + test("Prokka - sarscov2 - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.fromList([ + tuple([ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true)) + ]) + input[1] = [] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + } diff --git a/modules/nf-core/prokka/tests/main.nf.test.snap b/modules/nf-core/prokka/tests/main.nf.test.snap index 874c989d..35713a8f 100644 --- a/modules/nf-core/prokka/tests/main.nf.test.snap +++ b/modules/nf-core/prokka/tests/main.nf.test.snap @@ -91,5 +91,331 @@ "nextflow": "24.04.3" }, "timestamp": "2024-07-30T12:34:20.447734" + }, + "Prokka - sarscov2 - genome.fasta.gz": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.gff:md5,5dbfb8fcf2db020564c16045976a0933" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fna:md5,787307f29a263e5657cc276ebbf7e2b3" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.faa:md5,a4ceda83262b3c222a6b1f508fb9e24b" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.ffn:md5,80f474b5367b7ea5ed23791935f65e34" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fsa:md5,71bbefcb7f12046bcd3263f58cfd5404" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.tbl:md5,d8f816a066ced94b62d9618b13fb8add" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.err:md5,b3daedc646fddd422824e2b3e5e9229d" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.txt:md5,b40e485ffc8eaf1feacf8d79d9751a33" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,da7c720c3018c5081d6a70b517b7d450" + ] + ], + [ + "versions.yml:md5,e83a22fe02167e290d90853b45650db9" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.3" + }, + "timestamp": "2024-12-19T09:48:05.110188714" + }, + "Prokka - sarscov2 - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gbk:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": false + }, + "test.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + "versions.yml:md5,e83a22fe02167e290d90853b45650db9" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fna:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.faa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ffn:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sqn:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fsa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tbl:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + "test.err:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "err": [ + [ + { + "id": "test", + "single_end": false + }, + "test.err:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "faa": [ + [ + { + "id": "test", + "single_end": false + }, + "test.faa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "ffn": [ + [ + { + "id": "test", + "single_end": false + }, + "test.ffn:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fna": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fna:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fsa": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fsa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gbk": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gbk:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gff": [ + [ + { + "id": "test", + "single_end": false + }, + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sqn": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sqn:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbl": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tbl:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tsv": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "txt": [ + [ + { + "id": "test", + "single_end": false + }, + "test.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e83a22fe02167e290d90853b45650db9" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.3" + }, + "timestamp": "2025-01-06T10:51:57.362187225" } } \ No newline at end of file From f769c47ca7bdfd41fd6f15b98b7a41b4e76991be Mon Sep 17 00:00:00 2001 From: jasmezz Date: Tue, 21 Jan 2025 13:34:14 +0100 Subject: [PATCH 104/175] Update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9984afad..aebf177d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#427](https://github.com/nf-core/funcscan/pull/427) AMPcombi now can use multiple other databases for classifications. (by @darcy220606) - [#429](https://github.com/nf-core/funcscan/pull/429) Updated to nf-core template 3.1.0. (by @jfy133 and @jasmezz) - [#433](https://github.com/nf-core/funcscan/pull/433) Updated to nf-core template 3.1.1. (by @jfy133) -- [#431](https://github.com/nf-core/funcscan/pull/431) Updated all MMseqs modules to version 17, added `--taxa_classification_mmseqs_compressed` parameter. (by @jasmezz) +- [#431](https://github.com/nf-core/funcscan/pull/431) Updated AMPcombi, Macrel, all MMseqs2 modules, MultiQC, Pyrodigal, and seqkit, added `--taxa_classification_mmseqs_compressed` parameter. (by @jasmezz) ### `Fixed` From ca69eac821d3edf011349455222cfa4708d40033 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Wed, 22 Jan 2025 11:31:10 +0100 Subject: [PATCH 105/175] Fix nf-test --- tests/test_prokka.nf.test.snap | 2 +- tests/test_taxonomy_prokka.nf.test | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_prokka.nf.test.snap b/tests/test_prokka.nf.test.snap index 1ac682b3..27e713c6 100644 --- a/tests/test_prokka.nf.test.snap +++ b/tests/test_prokka.nf.test.snap @@ -47,7 +47,7 @@ "deeparg_tsv_ARG": { "content": [ "sample_1.align.daa.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", - "sample_2.align.daa.tsv:md5,06648de08caca0b7f42eab9576615226", + "sample_2.align.daa.tsv:md5,7802fb45d7343e492d3677fec67e6d0c", "sample_1.mapping.ARG:md5,0e049e99eab4c55666062df21707d5b9", "sample_2.mapping.ARG:md5,0e049e99eab4c55666062df21707d5b9" ], diff --git a/tests/test_taxonomy_prokka.nf.test b/tests/test_taxonomy_prokka.nf.test index 64c67b4a..d1b86fdd 100644 --- a/tests/test_taxonomy_prokka.nf.test +++ b/tests/test_taxonomy_prokka.nf.test @@ -55,7 +55,7 @@ nextflow_pipeline { // AMPcombi { assert snapshot ( - file("$outputDir/reports/ampcombi2/sample_2/sample_2_ampcombi.tsv").text.contains("PROKKA_00109"), + file("$outputDir/reports/ampcombi2/sample_2/sample_2_ampcombi.tsv").text.contains("PROKKA_00119"), ).match("ampcombi") }, { assert new File("$outputDir/reports/ampcombi2/ampcombi_complete_summary_taxonomy.tsv.gz").exists() }, From 6012d16c55395c45ba812f76dee5685d7225220f Mon Sep 17 00:00:00 2001 From: jasmezz Date: Wed, 22 Jan 2025 12:11:24 +0100 Subject: [PATCH 106/175] Re-add `trace_report_suffix` param in schema --- nextflow_schema.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/nextflow_schema.json b/nextflow_schema.json index b5fea956..c19b4ae2 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1539,6 +1539,12 @@ "description": "Base URL or local path to location of pipeline test dataset files", "default": "https://raw.githubusercontent.com/nf-core/test-datasets/", "hidden": true + }, + "trace_report_suffix": { + "type": "string", + "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 } } } From da5931c0a9c70cb329cb9885771f07ac94cd90a0 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 22 Jan 2025 13:12:57 +0100 Subject: [PATCH 107/175] Apply suggestions from code review --- CHANGELOG.md | 2 +- subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 839e82d7..a58ef830 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#429](https://github.com/nf-core/funcscan/pull/429) Updated to nf-core template 3.1.0. (by @jfy133 and @jasmezz) - [#433](https://github.com/nf-core/funcscan/pull/433) Updated to nf-core template 3.1.1. (by @jfy133) - [#431](https://github.com/nf-core/funcscan/pull/431) Updated AMPcombi, Macrel, all MMseqs2 modules, MultiQC, Pyrodigal, and seqkit, added `--taxa_classification_mmseqs_compressed` parameter. (by @jasmezz) -- [#438](https://github.com/nf-core/funcscan/pull/433) Updated to nf-core template 3.1.8. (by @jfy133) +- [#438](https://github.com/nf-core/funcscan/pull/438) Updated to nf-core template 3.1.8. (by @jfy133) ### `Fixed` diff --git a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf index 0bb38a6a..88ae8512 100644 --- a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf @@ -62,6 +62,11 @@ workflow PIPELINE_INITIALISATION { nextflow_cli_args ) + // + // Custom validation for pipeline parameters + // + validateInputParameters() + // // Create channel from input file provided through params.input // From da6700ea00da70de00280b8c453884282264bc93 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 22 Jan 2025 13:13:23 +0100 Subject: [PATCH 108/175] Apply suggestions from code review --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a58ef830..ad432ed3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#429](https://github.com/nf-core/funcscan/pull/429) Updated to nf-core template 3.1.0. (by @jfy133 and @jasmezz) - [#433](https://github.com/nf-core/funcscan/pull/433) Updated to nf-core template 3.1.1. (by @jfy133) - [#431](https://github.com/nf-core/funcscan/pull/431) Updated AMPcombi, Macrel, all MMseqs2 modules, MultiQC, Pyrodigal, and seqkit, added `--taxa_classification_mmseqs_compressed` parameter. (by @jasmezz) -- [#438](https://github.com/nf-core/funcscan/pull/438) Updated to nf-core template 3.1.8. (by @jfy133) +- [#438](https://github.com/nf-core/funcscan/pull/438) Updated to nf-core template 3.1.1. (by @jfy133) ### `Fixed` From 49b3502952d9a4286bf6c3d3f8fdfded1d9f92ae Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 22 Jan 2025 13:13:50 +0100 Subject: [PATCH 109/175] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad432ed3..4d53a95e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#429](https://github.com/nf-core/funcscan/pull/429) Updated to nf-core template 3.1.0. (by @jfy133 and @jasmezz) - [#433](https://github.com/nf-core/funcscan/pull/433) Updated to nf-core template 3.1.1. (by @jfy133) - [#431](https://github.com/nf-core/funcscan/pull/431) Updated AMPcombi, Macrel, all MMseqs2 modules, MultiQC, Pyrodigal, and seqkit, added `--taxa_classification_mmseqs_compressed` parameter. (by @jasmezz) -- [#438](https://github.com/nf-core/funcscan/pull/438) Updated to nf-core template 3.1.1. (by @jfy133) +- [#438](https://github.com/nf-core/funcscan/pull/438) Updated to nf-core template 3.1.2. (by @jfy133) ### `Fixed` From 4c3dd3a80d43ac89da592f99a68b30626e866998 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 22 Jan 2025 13:14:35 +0100 Subject: [PATCH 110/175] Update usage.md --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 6c3b7bb5..c100f81c 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -29,8 +29,8 @@ When switched on, all tools of the given workflow will be run by default. If you **Example:** You want to run AMP and ARG screening but you don't need the DeepARG tool of the ARG workflow and the Macrel tool of the AMP workflow. Your command would be: +```bash nextflow run nf-core/funcscan --input samplesheet.csv --outdir -profile docker --run_arg_screening --arg_skip_deeparg --run_amp_screening --amg_skip_macrel - ``` Note that the pipeline will create the following files in your working directory: From 4c6ba6e7d0c3d5b01e0d137a67193047a1be6ea8 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 22 Jan 2025 13:15:05 +0100 Subject: [PATCH 111/175] Apply suggestions from code review --- subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf index 88ae8512..bfce1c70 100644 --- a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf @@ -66,7 +66,6 @@ workflow PIPELINE_INITIALISATION { // Custom validation for pipeline parameters // validateInputParameters() - // // Create channel from input file provided through params.input // From 523bcbce4ea58104f708f1edf7aabcd943679c34 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Wed, 22 Jan 2025 13:50:04 +0100 Subject: [PATCH 112/175] Fix linting --- .nf-core.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nf-core.yml b/.nf-core.yml index 99fb25dc..09eed1a7 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -13,4 +13,4 @@ template: skip_features: - igenomes - fastqc - version: 2.1.0dev \ No newline at end of file + version: 2.1.0dev From 4442bd9dee17059cc5f0764f1504839c9630f423 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Sat, 25 Jan 2025 17:57:12 +0100 Subject: [PATCH 113/175] Update bakta, add new param --- CHANGELOG.md | 2 ++ conf/modules.config | 1 + modules.json | 4 ++-- modules/nf-core/bakta/bakta/environment.yml | 2 +- modules/nf-core/bakta/bakta/main.nf | 4 ++-- .../bakta/bakta/tests/main.nf.test.snap | 18 +++++++++--------- .../bakta/baktadbdownload/environment.yml | 2 +- modules/nf-core/bakta/baktadbdownload/main.nf | 4 ++-- .../baktadbdownload/tests/main.nf.test.snap | 16 ++++++++-------- nextflow.config | 1 + nextflow_schema.json | 6 ++++++ 11 files changed, 35 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aebf177d..174c2188 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#429](https://github.com/nf-core/funcscan/pull/429) Updated to nf-core template 3.1.0. (by @jfy133 and @jasmezz) - [#433](https://github.com/nf-core/funcscan/pull/433) Updated to nf-core template 3.1.1. (by @jfy133) - [#431](https://github.com/nf-core/funcscan/pull/431) Updated AMPcombi, Macrel, all MMseqs2 modules, MultiQC, Pyrodigal, and seqkit, added `--taxa_classification_mmseqs_compressed` parameter. (by @jasmezz) +- [#440](https://github.com/nf-core/funcscan/pull/440) Updated Bakta and introduced new parameter `--annotation_bakta_hmms`. (by @jasmezz) ### `Fixed` @@ -25,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | Tool | Previous version | New version | | --------- | ---------------- | ----------- | | AMPcombi | 0.2.2 | 2.0.1 | +| Bakta | 1.9.3 | 1.10.4 | | Macrel | 1.2.0 | 1.4.0 | | MMseqs2 | 15.6f452 | 17.b804f | | MultiQC | 1.24.0 | 1.26 | diff --git a/conf/modules.config b/conf/modules.config index adb8869c..5684b042 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -168,6 +168,7 @@ process { params.annotation_bakta_gap ? '' : '--skip-gap', params.annotation_bakta_ori ? '' : '--skip-ori', params.annotation_bakta_activate_plot ? '' : '--skip-plot', + params.annotation_bakta_hmms ? '--hmms ${params.annotation_bakta_hmms}' : '', ].join(' ').trim() } diff --git a/modules.json b/modules.json index 2ed71484..670523c7 100644 --- a/modules.json +++ b/modules.json @@ -62,12 +62,12 @@ }, "bakta/bakta": { "branch": "master", - "git_sha": "0e9cb409c32d3ec4f0d3804588e4778971c09b7e", + "git_sha": "4f0998ebd8f65961cfef0b810f008be3bc477132", "installed_by": ["modules"] }, "bakta/baktadbdownload": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "4f0998ebd8f65961cfef0b810f008be3bc477132", "installed_by": ["modules"] }, "deeparg/downloaddata": { diff --git a/modules/nf-core/bakta/bakta/environment.yml b/modules/nf-core/bakta/bakta/environment.yml index b3c302f0..a2d0ff72 100644 --- a/modules/nf-core/bakta/bakta/environment.yml +++ b/modules/nf-core/bakta/bakta/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::bakta=1.9.3 + - bioconda::bakta=1.10.4 diff --git a/modules/nf-core/bakta/bakta/main.nf b/modules/nf-core/bakta/bakta/main.nf index 9a32c3da..4d192e45 100644 --- a/modules/nf-core/bakta/bakta/main.nf +++ b/modules/nf-core/bakta/bakta/main.nf @@ -4,8 +4,8 @@ process BAKTA_BAKTA { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bakta:1.9.3--pyhdfd78af_0' : - 'biocontainers/bakta:1.9.3--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/bakta:1.10.4--pyhdfd78af_0' : + 'biocontainers/bakta:1.10.4--pyhdfd78af_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/bakta/bakta/tests/main.nf.test.snap b/modules/nf-core/bakta/bakta/tests/main.nf.test.snap index 40e30c36..cee06343 100644 --- a/modules/nf-core/bakta/bakta/tests/main.nf.test.snap +++ b/modules/nf-core/bakta/bakta/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "versions": { "content": [ [ - "versions.yml:md5,f8b70ceb2a328c25a190699384e6152d" + "versions.yml:md5,c40bd66294f6eb4520f194325ef24f24" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-03-14T09:11:06.657602394" + "timestamp": "2025-01-25T11:59:09.981137" }, "Bakta - stub": { "content": [ @@ -31,7 +31,7 @@ ] ], "10": [ - "versions.yml:md5,f8b70ceb2a328c25a190699384e6152d" + "versions.yml:md5,c40bd66294f6eb4520f194325ef24f24" ], "2": [ [ @@ -178,14 +178,14 @@ ] ], "versions": [ - "versions.yml:md5,f8b70ceb2a328c25a190699384e6152d" + "versions.yml:md5,c40bd66294f6eb4520f194325ef24f24" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-03-14T09:11:15.532858932" + "timestamp": "2025-01-25T11:09:05.864545" } } \ No newline at end of file diff --git a/modules/nf-core/bakta/baktadbdownload/environment.yml b/modules/nf-core/bakta/baktadbdownload/environment.yml index b3c302f0..83a06976 100644 --- a/modules/nf-core/bakta/baktadbdownload/environment.yml +++ b/modules/nf-core/bakta/baktadbdownload/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::bakta=1.9.3 + - bioconda::bakta=1.10.4 \ No newline at end of file diff --git a/modules/nf-core/bakta/baktadbdownload/main.nf b/modules/nf-core/bakta/baktadbdownload/main.nf index e512d77d..cc2f445e 100644 --- a/modules/nf-core/bakta/baktadbdownload/main.nf +++ b/modules/nf-core/bakta/baktadbdownload/main.nf @@ -3,8 +3,8 @@ process BAKTA_BAKTADBDOWNLOAD { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bakta:1.9.3--pyhdfd78af_0' : - 'biocontainers/bakta:1.9.3--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/bakta:1.10.4--pyhdfd78af_0' : + 'biocontainers/bakta:1.10.4--pyhdfd78af_0' }" output: path "db*" , emit: db diff --git a/modules/nf-core/bakta/baktadbdownload/tests/main.nf.test.snap b/modules/nf-core/bakta/baktadbdownload/tests/main.nf.test.snap index b1c82267..ef6aabe7 100644 --- a/modules/nf-core/bakta/baktadbdownload/tests/main.nf.test.snap +++ b/modules/nf-core/bakta/baktadbdownload/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "Bakta database download": { "content": [ [ - "versions.yml:md5,df9b091b08a41b7d5eef95727b7eac29" + "versions.yml:md5,29d6ec77dc88492b2c53141e6541c289" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-03-19T11:34:41.812416438" + "timestamp": "2025-01-25T12:30:51.853371" }, "Bakta database download - stub": { "content": [ @@ -17,13 +17,13 @@ [ ], - "versions.yml:md5,df9b091b08a41b7d5eef95727b7eac29" + "versions.yml:md5,29d6ec77dc88492b2c53141e6541c289" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-03-19T11:35:01.082923401" + "timestamp": "2025-01-25T12:31:08.390845" } } \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 85914230..a79954d9 100644 --- a/nextflow.config +++ b/nextflow.config @@ -88,6 +88,7 @@ params { annotation_bakta_gap = false annotation_bakta_ori = false annotation_bakta_activate_plot = false + annotation_bakta_hmms = null annotation_prokka_singlemode = false annotation_prokka_rawproduct = false diff --git a/nextflow_schema.json b/nextflow_schema.json index c19b4ae2..46323109 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -352,6 +352,12 @@ "fa_icon": "fas fa-chart-pie", "description": "Activate generation of circular genome plots.", "help_text": "Activate this flag to generate genome plots (might be memory-intensive).\n\n> Modifies tool parameter(s):\n> - BAKTA: `--skip-plot`" + }, + "annotation_bakta_hmms": { + "type": "string", + "description": "Supply a path of an HMM file of trusted hidden markov models in HMMER format for CDS annotation", + "help_text": "Bakta accepts user-provided trusted HMMs via `--hmms` in HMMER's text format. If set, Bakta will adhere to the *trusted cutoff* specified in the HMM header. In addition, a max. evalue threshold of 1e-6 is applied. For more info please refer to the BAKTA [documentation](https://github.com/oschwengers/bakta).\n\n> Modifies tool parameter(s):\n> - BAKTA: `--hmms`", + "fa_icon": "fa-regular fa-square-check" } }, "fa_icon": "fas fa-file-signature" From 24ccc009196083a520ef5b17319221152e0445df Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Mon, 27 Jan 2025 14:46:13 +0000 Subject: [PATCH 114/175] Template update for nf-core/tools version 3.2.0 --- .github/workflows/linting_comment.yml | 2 +- .github/workflows/release-announcements.yml | 33 ------------------- .nf-core.yml | 2 +- .pre-commit-config.yaml | 2 +- docs/output.md | 4 ++- modules.json | 2 +- 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 | 16 ++++----- ro-crate-metadata.json | 12 +++---- 11 files changed, 36 insertions(+), 67 deletions(-) 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/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml index 450b1d5e..76a9e67e 100644 --- a/.github/workflows/release-announcements.yml +++ b/.github/workflows/release-announcements.yml @@ -27,39 +27,6 @@ jobs: ${{ steps.get_topics.outputs.topics }} #nfcore #openscience #nextflow #bioinformatics - send-tweet: - runs-on: ubuntu-latest - - steps: - - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 - with: - python-version: "3.10" - - name: Install dependencies - run: pip install tweepy==4.14.0 - - name: Send tweet - shell: python - run: | - import os - import tweepy - - client = tweepy.Client( - access_token=os.getenv("TWITTER_ACCESS_TOKEN"), - access_token_secret=os.getenv("TWITTER_ACCESS_TOKEN_SECRET"), - consumer_key=os.getenv("TWITTER_CONSUMER_KEY"), - consumer_secret=os.getenv("TWITTER_CONSUMER_SECRET"), - ) - tweet = os.getenv("TWEET") - client.create_tweet(text=tweet) - env: - TWEET: | - Pipeline release! ${{ github.repository }} v${{ github.event.release.tag_name }} - ${{ github.event.release.name }}! - - Please see the changelog: ${{ github.event.release.html_url }} - TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }} - TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }} - TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }} - TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }} - bsky-post: runs-on: ubuntu-latest steps: diff --git a/.nf-core.yml b/.nf-core.yml index 801c4134..d1668107 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,6 +1,6 @@ lint: actions_ci: false -nf_core_version: 3.1.2 +nf_core_version: 3.2.0 repository_type: pipeline template: author: Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James 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/docs/output.md b/docs/output.md index 0930a256..bafd62a4 100644 --- a/docs/output.md +++ b/docs/output.md @@ -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/modules.json b/modules.json index c224a5c8..e47da02c 100644 --- a/modules.json +++ b/modules.json @@ -7,7 +7,7 @@ "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 d5431d0d..69421f80 100644 --- a/nextflow.config +++ b/nextflow.config @@ -189,14 +189,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 diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index f4632c8d..1aa38241 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,7 +22,7 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "InProgress", - "datePublished": "2025-01-20T14:35:16+00:00", + "datePublished": "2025-01-27T14:45:55+00:00", "description": "

    \n \n \n \"nf-core/funcscan\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/funcscan/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/funcscan/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/funcscan/results)[![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/nf-core/funcscan)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23funcscan-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/funcscan)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/funcscan** 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 nf-core/funcscan \\\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\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/funcscan/usage) and the [parameter documentation](https://nf-co.re/funcscan/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/funcscan/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/funcscan/output).\n\n## Credits\n\nnf-core/funcscan was originally written by Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James A. Fellows Yates.\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\nFor further information or help, don't hesitate to get in touch on the [Slack `#funcscan` channel](https://nfcore.slack.com/channels/funcscan) (you can join with [this invite](https://nf-co.re/join/slack)).\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\nYou can cite the `nf-core` publication as follows:\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": [ { @@ -99,7 +99,7 @@ }, "mentions": [ { - "@id": "#4514b8c3-12c1-4b62-b7e2-f20642a72a3c" + "@id": "#a63ff768-a32a-4ee1-8ba3-fafeb18a6793" } ], "name": "nf-core/funcscan" @@ -128,7 +128,7 @@ } ], "dateCreated": "", - "dateModified": "2025-01-20T14:35:16Z", + "dateModified": "2025-01-27T14:45:55Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -173,11 +173,11 @@ "version": "!>=24.04.2" }, { - "@id": "#4514b8c3-12c1-4b62-b7e2-f20642a72a3c", + "@id": "#a63ff768-a32a-4ee1-8ba3-fafeb18a6793", "@type": "TestSuite", "instance": [ { - "@id": "#b7433dac-5a58-4403-b6c9-8a371379c502" + "@id": "#f399a53f-20fc-47ed-b389-7e76797884bb" } ], "mainEntity": { @@ -186,7 +186,7 @@ "name": "Test suite for nf-core/funcscan" }, { - "@id": "#b7433dac-5a58-4403-b6c9-8a371379c502", + "@id": "#f399a53f-20fc-47ed-b389-7e76797884bb", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/funcscan", "resource": "repos/nf-core/funcscan/actions/workflows/ci.yml", From 1bbdc4c56cebf15121327414f961b4f2e41bf73b Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Tue, 28 Jan 2025 11:30:19 +0100 Subject: [PATCH 115/175] Add missing checkIfExists optoins --- subworkflows/local/annotation.nf | 119 +++++---- subworkflows/local/arg.nf | 252 +++++++++--------- subworkflows/local/bgc.nf | 178 +++++++------ subworkflows/local/taxa_class.nf | 45 ++-- .../utils_nfcore_funcscan_pipeline/main.nf | 24 +- workflows/funcscan.nf | 10 +- 6 files changed, 317 insertions(+), 311 deletions(-) diff --git a/subworkflows/local/annotation.nf b/subworkflows/local/annotation.nf index c1c8e332..a59fe561 100644 --- a/subworkflows/local/annotation.nf +++ b/subworkflows/local/annotation.nf @@ -19,72 +19,75 @@ workflow ANNOTATION { fasta // tuple val(meta), path(contigs) main: - ch_versions = Channel.empty() + ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() - if ( params.annotation_tool == "pyrodigal" || ( params.annotation_tool == "prodigal" && params.run_bgc_screening == true && ( !params.bgc_skip_antismash || !params.bgc_skip_deepbgc || !params.bgc_skip_gecco ) ) || ( params.annotation_tool == "prodigal" && params.run_amp_screening == true ) ) { // Need to use Pyrodigal for most BGC tools and AMPcombi because Prodigal GBK annotation format is incompatible with them. + if (params.annotation_tool == "pyrodigal" || (params.annotation_tool == "prodigal" && params.run_bgc_screening == true && (!params.bgc_skip_antismash || !params.bgc_skip_deepbgc || !params.bgc_skip_gecco)) || (params.annotation_tool == "prodigal" && params.run_amp_screening == true)) { + // Need to use Pyrodigal for most BGC tools and AMPcombi because Prodigal GBK annotation format is incompatible with them. - if ( params.annotation_tool == "prodigal" && params.run_bgc_screening == true && ( !params.bgc_skip_antismash || !params.bgc_skip_deepbgc || !params.bgc_skip_gecco ) ) { - log.warn("[nf-core/funcscan] Switching annotation tool to: Pyrodigal. This is because Prodigal annotations (in GBK format) are incompatible with antiSMASH, DeepBGC, and GECCO. If you specifically wish to run Prodigal instead, please skip antiSMASH, DeepBGC, and GECCO or provide a pre-annotated GBK file in the samplesheet.") - } else if ( params.annotation_tool == "prodigal" && params.run_amp_screening == true ) { - log.warn("[nf-core/funcscan] Switching annotation tool to: Pyrodigal. This is because Prodigal annotations (in GBK format) are incompatible with AMPcombi. If you specifically wish to run Prodigal instead, please skip AMP workflow or provide a pre-annotated GBK file in the samplesheet.") - } - - PYRODIGAL ( fasta, "gbk" ) - GUNZIP_PYRODIGAL_FAA ( PYRODIGAL.out.faa ) - GUNZIP_PYRODIGAL_FNA ( PYRODIGAL.out.fna) - GUNZIP_PYRODIGAL_GBK ( PYRODIGAL.out.annotations ) - ch_versions = ch_versions.mix(PYRODIGAL.out.versions) - ch_versions = ch_versions.mix(GUNZIP_PYRODIGAL_FAA.out.versions) - ch_versions = ch_versions.mix(GUNZIP_PYRODIGAL_FNA.out.versions) - ch_versions = ch_versions.mix(GUNZIP_PYRODIGAL_GBK.out.versions) - ch_annotation_faa = GUNZIP_PYRODIGAL_FAA.out.gunzip - ch_annotation_fna = GUNZIP_PYRODIGAL_FNA.out.gunzip - ch_annotation_gbk = GUNZIP_PYRODIGAL_GBK.out.gunzip - - } else if ( params.annotation_tool == "prodigal" ) { - - PRODIGAL ( fasta, "gbk" ) - GUNZIP_PRODIGAL_FAA ( PRODIGAL.out.amino_acid_fasta ) - GUNZIP_PRODIGAL_FNA ( PRODIGAL.out.nucleotide_fasta) - GUNZIP_PRODIGAL_GBK ( PRODIGAL.out.gene_annotations ) - ch_versions = ch_versions.mix(PRODIGAL.out.versions) - ch_versions = ch_versions.mix(GUNZIP_PRODIGAL_FAA.out.versions) - ch_versions = ch_versions.mix(GUNZIP_PRODIGAL_FNA.out.versions) - ch_versions = ch_versions.mix(GUNZIP_PRODIGAL_GBK.out.versions) - ch_annotation_faa = GUNZIP_PRODIGAL_FAA.out.gunzip - ch_annotation_fna = GUNZIP_PRODIGAL_FNA.out.gunzip - ch_annotation_gbk = GUNZIP_PRODIGAL_GBK.out.gunzip - - } else if ( params.annotation_tool == "prokka" ) { + if (params.annotation_tool == "prodigal" && params.run_bgc_screening == true && (!params.bgc_skip_antismash || !params.bgc_skip_deepbgc || !params.bgc_skip_gecco)) { + log.warn("[nf-core/funcscan] Switching annotation tool to: Pyrodigal. This is because Prodigal annotations (in GBK format) are incompatible with antiSMASH, DeepBGC, and GECCO. If you specifically wish to run Prodigal instead, please skip antiSMASH, DeepBGC, and GECCO or provide a pre-annotated GBK file in the samplesheet.") + } + else if (params.annotation_tool == "prodigal" && params.run_amp_screening == true) { + log.warn("[nf-core/funcscan] Switching annotation tool to: Pyrodigal. This is because Prodigal annotations (in GBK format) are incompatible with AMPcombi. If you specifically wish to run Prodigal instead, please skip AMP workflow or provide a pre-annotated GBK file in the samplesheet.") + } - PROKKA ( fasta, [], [] ) - ch_versions = ch_versions.mix(PROKKA.out.versions) - ch_multiqc_files = PROKKA.out.txt.collect{it[1]}.ifEmpty([]) - ch_annotation_faa = PROKKA.out.faa - ch_annotation_fna = PROKKA.out.fna - ch_annotation_gbk = PROKKA.out.gbk + PYRODIGAL(fasta, "gbk") + GUNZIP_PYRODIGAL_FAA(PYRODIGAL.out.faa) + GUNZIP_PYRODIGAL_FNA(PYRODIGAL.out.fna) + GUNZIP_PYRODIGAL_GBK(PYRODIGAL.out.annotations) + ch_versions = ch_versions.mix(PYRODIGAL.out.versions) + ch_versions = ch_versions.mix(GUNZIP_PYRODIGAL_FAA.out.versions) + ch_versions = ch_versions.mix(GUNZIP_PYRODIGAL_FNA.out.versions) + ch_versions = ch_versions.mix(GUNZIP_PYRODIGAL_GBK.out.versions) + ch_annotation_faa = GUNZIP_PYRODIGAL_FAA.out.gunzip + ch_annotation_fna = GUNZIP_PYRODIGAL_FNA.out.gunzip + ch_annotation_gbk = GUNZIP_PYRODIGAL_GBK.out.gunzip + } + else if (params.annotation_tool == "prodigal") { - } else if ( params.annotation_tool == "bakta" ) { + PRODIGAL(fasta, "gbk") + GUNZIP_PRODIGAL_FAA(PRODIGAL.out.amino_acid_fasta) + GUNZIP_PRODIGAL_FNA(PRODIGAL.out.nucleotide_fasta) + GUNZIP_PRODIGAL_GBK(PRODIGAL.out.gene_annotations) + ch_versions = ch_versions.mix(PRODIGAL.out.versions) + ch_versions = ch_versions.mix(GUNZIP_PRODIGAL_FAA.out.versions) + ch_versions = ch_versions.mix(GUNZIP_PRODIGAL_FNA.out.versions) + ch_versions = ch_versions.mix(GUNZIP_PRODIGAL_GBK.out.versions) + ch_annotation_faa = GUNZIP_PRODIGAL_FAA.out.gunzip + ch_annotation_fna = GUNZIP_PRODIGAL_FNA.out.gunzip + ch_annotation_gbk = GUNZIP_PRODIGAL_GBK.out.gunzip + } + else if (params.annotation_tool == "prokka") { - // BAKTA prepare download - if ( params.annotation_bakta_db ) { - ch_bakta_db = Channel - .fromPath( params.annotation_bakta_db ) - .first() - } else { - BAKTA_BAKTADBDOWNLOAD ( ) - ch_versions = ch_versions.mix( BAKTA_BAKTADBDOWNLOAD.out.versions ) - ch_bakta_db = ( BAKTA_BAKTADBDOWNLOAD.out.db ) - } + PROKKA(fasta, [], []) + ch_versions = ch_versions.mix(PROKKA.out.versions) + ch_multiqc_files = PROKKA.out.txt.collect { it[1] }.ifEmpty([]) + ch_annotation_faa = PROKKA.out.faa + ch_annotation_fna = PROKKA.out.fna + ch_annotation_gbk = PROKKA.out.gbk + } + else if (params.annotation_tool == "bakta") { - BAKTA_BAKTA ( fasta, ch_bakta_db, [], [] ) - ch_versions = ch_versions.mix(BAKTA_BAKTA.out.versions) - ch_multiqc_files = BAKTA_BAKTA.out.txt.collect{it[1]}.ifEmpty([]) - ch_annotation_faa = BAKTA_BAKTA.out.faa - ch_annotation_fna = BAKTA_BAKTA.out.fna - ch_annotation_gbk = BAKTA_BAKTA.out.gbff + // BAKTA prepare download + if (params.annotation_bakta_db) { + ch_bakta_db = Channel + .fromPath(params.annotation_bakta_db, checkIfExists: true) + .first() } + else { + BAKTA_BAKTADBDOWNLOAD() + ch_versions = ch_versions.mix(BAKTA_BAKTADBDOWNLOAD.out.versions) + ch_bakta_db = BAKTA_BAKTADBDOWNLOAD.out.db + } + + BAKTA_BAKTA(fasta, ch_bakta_db, [], []) + ch_versions = ch_versions.mix(BAKTA_BAKTA.out.versions) + ch_multiqc_files = BAKTA_BAKTA.out.txt.collect { it[1] }.ifEmpty([]) + ch_annotation_faa = BAKTA_BAKTA.out.faa + ch_annotation_fna = BAKTA_BAKTA.out.fna + ch_annotation_gbk = BAKTA_BAKTA.out.gbff + } emit: versions = ch_versions diff --git a/subworkflows/local/arg.nf b/subworkflows/local/arg.nf index af618c5c..182f9648 100644 --- a/subworkflows/local/arg.nf +++ b/subworkflows/local/arg.nf @@ -2,26 +2,26 @@ Run ARG screening tools */ -include { ABRICATE_RUN } from '../../modules/nf-core/abricate/run/main' -include { AMRFINDERPLUS_UPDATE } from '../../modules/nf-core/amrfinderplus/update/main' -include { AMRFINDERPLUS_RUN } from '../../modules/nf-core/amrfinderplus/run/main' -include { DEEPARG_DOWNLOADDATA } from '../../modules/nf-core/deeparg/downloaddata/main' -include { DEEPARG_PREDICT } from '../../modules/nf-core/deeparg/predict/main' -include { FARGENE } from '../../modules/nf-core/fargene/main' -include { RGI_CARDANNOTATION } from '../../modules/nf-core/rgi/cardannotation/main' -include { RGI_MAIN } from '../../modules/nf-core/rgi/main/main' -include { UNTAR as UNTAR_CARD } from '../../modules/nf-core/untar/main' -include { TABIX_BGZIP as ARG_TABIX_BGZIP } from '../../modules/nf-core/tabix/bgzip/main' -include { MERGE_TAXONOMY_HAMRONIZATION } from '../../modules/local/merge_taxonomy_hamronization' -include { HAMRONIZATION_RGI } from '../../modules/nf-core/hamronization/rgi/main' -include { HAMRONIZATION_FARGENE } from '../../modules/nf-core/hamronization/fargene/main' -include { HAMRONIZATION_SUMMARIZE } from '../../modules/nf-core/hamronization/summarize/main' -include { HAMRONIZATION_ABRICATE } from '../../modules/nf-core/hamronization/abricate/main' -include { HAMRONIZATION_DEEPARG } from '../../modules/nf-core/hamronization/deeparg/main' -include { HAMRONIZATION_AMRFINDERPLUS } from '../../modules/nf-core/hamronization/amrfinderplus/main' -include { ARGNORM as ARGNORM_DEEPARG } from '../../modules/nf-core/argnorm/main' -include { ARGNORM as ARGNORM_ABRICATE } from '../../modules/nf-core/argnorm/main' -include { ARGNORM as ARGNORM_AMRFINDERPLUS } from '../../modules/nf-core/argnorm/main' +include { ABRICATE_RUN } from '../../modules/nf-core/abricate/run/main' +include { AMRFINDERPLUS_UPDATE } from '../../modules/nf-core/amrfinderplus/update/main' +include { AMRFINDERPLUS_RUN } from '../../modules/nf-core/amrfinderplus/run/main' +include { DEEPARG_DOWNLOADDATA } from '../../modules/nf-core/deeparg/downloaddata/main' +include { DEEPARG_PREDICT } from '../../modules/nf-core/deeparg/predict/main' +include { FARGENE } from '../../modules/nf-core/fargene/main' +include { RGI_CARDANNOTATION } from '../../modules/nf-core/rgi/cardannotation/main' +include { RGI_MAIN } from '../../modules/nf-core/rgi/main/main' +include { UNTAR as UNTAR_CARD } from '../../modules/nf-core/untar/main' +include { TABIX_BGZIP as ARG_TABIX_BGZIP } from '../../modules/nf-core/tabix/bgzip/main' +include { MERGE_TAXONOMY_HAMRONIZATION } from '../../modules/local/merge_taxonomy_hamronization' +include { HAMRONIZATION_RGI } from '../../modules/nf-core/hamronization/rgi/main' +include { HAMRONIZATION_FARGENE } from '../../modules/nf-core/hamronization/fargene/main' +include { HAMRONIZATION_SUMMARIZE } from '../../modules/nf-core/hamronization/summarize/main' +include { HAMRONIZATION_ABRICATE } from '../../modules/nf-core/hamronization/abricate/main' +include { HAMRONIZATION_DEEPARG } from '../../modules/nf-core/hamronization/deeparg/main' +include { HAMRONIZATION_AMRFINDERPLUS } from '../../modules/nf-core/hamronization/amrfinderplus/main' +include { ARGNORM as ARGNORM_DEEPARG } from '../../modules/nf-core/argnorm/main' +include { ARGNORM as ARGNORM_ABRICATE } from '../../modules/nf-core/argnorm/main' +include { ARGNORM as ARGNORM_AMRFINDERPLUS } from '../../modules/nf-core/argnorm/main' workflow ARG { take: @@ -36,181 +36,179 @@ workflow ARG { ch_input_to_hamronization_summarize = Channel.empty() // AMRfinderplus run - // Prepare channel for database - if ( !params.arg_skip_amrfinderplus && params.arg_amrfinderplus_db ) { + // Prepare channel for database + if (!params.arg_skip_amrfinderplus && params.arg_amrfinderplus_db) { ch_amrfinderplus_db = Channel - .fromPath( params.arg_amrfinderplus_db ) + .fromPath(params.arg_amrfinderplus_db, checkIfExists: true) .first() - } else if ( !params.arg_skip_amrfinderplus && !params.arg_amrfinderplus_db ) { - AMRFINDERPLUS_UPDATE( ) - ch_versions = ch_versions.mix( AMRFINDERPLUS_UPDATE.out.versions ) + } + else if (!params.arg_skip_amrfinderplus && !params.arg_amrfinderplus_db) { + AMRFINDERPLUS_UPDATE() + ch_versions = ch_versions.mix(AMRFINDERPLUS_UPDATE.out.versions) ch_amrfinderplus_db = AMRFINDERPLUS_UPDATE.out.db } - if ( !params.arg_skip_amrfinderplus ) { - AMRFINDERPLUS_RUN ( fastas, ch_amrfinderplus_db ) - ch_versions = ch_versions.mix( AMRFINDERPLUS_RUN.out.versions ) - - // Reporting - HAMRONIZATION_AMRFINDERPLUS ( AMRFINDERPLUS_RUN.out.report, 'tsv', AMRFINDERPLUS_RUN.out.tool_version, AMRFINDERPLUS_RUN.out.db_version ) - ch_versions = ch_versions.mix( HAMRONIZATION_AMRFINDERPLUS.out.versions ) - ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix( HAMRONIZATION_AMRFINDERPLUS.out.tsv ) + if (!params.arg_skip_amrfinderplus) { + AMRFINDERPLUS_RUN(fastas, ch_amrfinderplus_db) + ch_versions = ch_versions.mix(AMRFINDERPLUS_RUN.out.versions) - if ( !params.arg_skip_argnorm ) { - ch_input_to_argnorm_amrfinderplus = HAMRONIZATION_AMRFINDERPLUS.out.tsv.filter{ meta, file -> !file.isEmpty() } - ARGNORM_AMRFINDERPLUS ( ch_input_to_argnorm_amrfinderplus, 'amrfinderplus', 'ncbi' ) - ch_versions = ch_versions.mix( ARGNORM_AMRFINDERPLUS.out.versions ) + // Reporting + HAMRONIZATION_AMRFINDERPLUS(AMRFINDERPLUS_RUN.out.report, 'tsv', AMRFINDERPLUS_RUN.out.tool_version, AMRFINDERPLUS_RUN.out.db_version) + ch_versions = ch_versions.mix(HAMRONIZATION_AMRFINDERPLUS.out.versions) + ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix(HAMRONIZATION_AMRFINDERPLUS.out.tsv) + + if (!params.arg_skip_argnorm) { + ch_input_to_argnorm_amrfinderplus = HAMRONIZATION_AMRFINDERPLUS.out.tsv.filter { meta, file -> !file.isEmpty() } + ARGNORM_AMRFINDERPLUS(ch_input_to_argnorm_amrfinderplus, 'amrfinderplus', 'ncbi') + ch_versions = ch_versions.mix(ARGNORM_AMRFINDERPLUS.out.versions) } } // fARGene run - if ( !params.arg_skip_fargene ) { - ch_fargene_classes = Channel.fromList( params.arg_fargene_hmmmodel.tokenize(',') ) + if (!params.arg_skip_fargene) { + ch_fargene_classes = Channel.fromList(params.arg_fargene_hmmmodel.tokenize(',')) ch_fargene_input = fastas - .combine( ch_fargene_classes ) - .map { - meta, fastas, hmm_class -> - def meta_new = meta.clone() - meta_new['hmm_class'] = hmm_class - [ meta_new, fastas, hmm_class ] - } - .multiMap { - fastas: [ it[0], it[1] ] - hmmclass: it[2] - } - - FARGENE ( ch_fargene_input.fastas, ch_fargene_input.hmmclass ) - ch_versions = ch_versions.mix( FARGENE.out.versions ) + .combine(ch_fargene_classes) + .map { meta, fastas, hmm_class -> + def meta_new = meta.clone() + meta_new['hmm_class'] = hmm_class + [meta_new, fastas, hmm_class] + } + .multiMap { + fastas: [it[0], it[1]] + hmmclass: it[2] + } + + FARGENE(ch_fargene_input.fastas, ch_fargene_input.hmmclass) + ch_versions = ch_versions.mix(FARGENE.out.versions) // Reporting // Note: currently hardcoding versions, has to be updated with every fARGene-update - HAMRONIZATION_FARGENE( FARGENE.out.hmm_genes.transpose(), 'tsv', '0.1', '0.1' ) - ch_versions = ch_versions.mix( HAMRONIZATION_FARGENE.out.versions ) - ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix( HAMRONIZATION_FARGENE.out.tsv ) + HAMRONIZATION_FARGENE(FARGENE.out.hmm_genes.transpose(), 'tsv', '0.1', '0.1') + ch_versions = ch_versions.mix(HAMRONIZATION_FARGENE.out.versions) + ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix(HAMRONIZATION_FARGENE.out.tsv) } // RGI run - if ( !params.arg_skip_rgi ) { + if (!params.arg_skip_rgi) { - if ( !params.arg_rgi_db ) { + if (!params.arg_rgi_db) { // Download and untar CARD - UNTAR_CARD ( [ [], file('https://card.mcmaster.ca/latest/data', checkIfExists: true) ] ) - ch_versions = ch_versions.mix( UNTAR_CARD.out.versions ) - rgi_db = UNTAR_CARD.out.untar.map{ it[1] } - RGI_CARDANNOTATION ( rgi_db ) + UNTAR_CARD([[], file('https://card.mcmaster.ca/latest/data', checkIfExists: true)]) + ch_versions = ch_versions.mix(UNTAR_CARD.out.versions) + rgi_db = UNTAR_CARD.out.untar.map { it[1] } + RGI_CARDANNOTATION(rgi_db) card = RGI_CARDANNOTATION.out.db - ch_versions = ch_versions.mix( RGI_CARDANNOTATION.out.versions ) - - } else { + ch_versions = ch_versions.mix(RGI_CARDANNOTATION.out.versions) + } + else { // Use user-supplied database - rgi_db = params.arg_rgi_db - if (! rgi_db.contains("card_database_processed") ) { - RGI_CARDANNOTATION ( rgi_db ) + rgi_db = file(params.arg_rgi_db, checkIfExists: true) + if (!rgi_db.contains("card_database_processed")) { + RGI_CARDANNOTATION(rgi_db) card = RGI_CARDANNOTATION.out.db - ch_versions = ch_versions.mix( RGI_CARDANNOTATION.out.versions ) - } else { + ch_versions = ch_versions.mix(RGI_CARDANNOTATION.out.versions) + } + else { card = rgi_db } - } - RGI_MAIN ( fastas, card, [] ) - ch_versions = ch_versions.mix( RGI_MAIN.out.versions ) + RGI_MAIN(fastas, card, []) + ch_versions = ch_versions.mix(RGI_MAIN.out.versions) // Reporting - HAMRONIZATION_RGI ( RGI_MAIN.out.tsv, 'tsv', RGI_MAIN.out.tool_version, RGI_MAIN.out.db_version ) - ch_versions = ch_versions.mix( HAMRONIZATION_RGI.out.versions ) - ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix( HAMRONIZATION_RGI.out.tsv ) + HAMRONIZATION_RGI(RGI_MAIN.out.tsv, 'tsv', RGI_MAIN.out.tool_version, RGI_MAIN.out.db_version) + ch_versions = ch_versions.mix(HAMRONIZATION_RGI.out.versions) + ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix(HAMRONIZATION_RGI.out.tsv) } // DeepARG prepare download - if ( !params.arg_skip_deeparg && params.arg_deeparg_db ) { + if (!params.arg_skip_deeparg && params.arg_deeparg_db) { ch_deeparg_db = Channel - .fromPath( params.arg_deeparg_db ) + .fromPath(params.arg_deeparg_db, checkIfExists: true) .first() - } else if ( !params.arg_skip_deeparg && !params.arg_deeparg_db ) { - DEEPARG_DOWNLOADDATA( ) - ch_versions = ch_versions.mix( DEEPARG_DOWNLOADDATA.out.versions ) + } + else if (!params.arg_skip_deeparg && !params.arg_deeparg_db) { + DEEPARG_DOWNLOADDATA() + ch_versions = ch_versions.mix(DEEPARG_DOWNLOADDATA.out.versions) ch_deeparg_db = DEEPARG_DOWNLOADDATA.out.db } // DeepARG run - if ( !params.arg_skip_deeparg ) { + if (!params.arg_skip_deeparg) { annotations - .map { - it -> - def meta = it[0] - def anno = it[1] - def model = params.arg_deeparg_model + .map { it -> + def meta = it[0] + def anno = it[1] + def model = params.arg_deeparg_model - [ meta, anno, model ] - } - .set { ch_input_for_deeparg } + [meta, anno, model] + } + .set { ch_input_for_deeparg } - DEEPARG_PREDICT ( ch_input_for_deeparg, ch_deeparg_db ) - ch_versions = ch_versions.mix( DEEPARG_PREDICT.out.versions ) + DEEPARG_PREDICT(ch_input_for_deeparg, ch_deeparg_db) + ch_versions = ch_versions.mix(DEEPARG_PREDICT.out.versions) // Reporting // Note: currently hardcoding versions as unreported by DeepARG // Make sure to update on version bump. - ch_input_to_hamronization_deeparg = DEEPARG_PREDICT.out.arg.mix( DEEPARG_PREDICT.out.potential_arg ) - HAMRONIZATION_DEEPARG ( ch_input_to_hamronization_deeparg, 'tsv', '1.0.4', params.arg_deeparg_db_version ) - ch_versions = ch_versions.mix( HAMRONIZATION_DEEPARG.out.versions ) - ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix( HAMRONIZATION_DEEPARG.out.tsv ) - - if ( !params.arg_skip_argnorm ) { - ch_input_to_argnorm_deeparg = HAMRONIZATION_DEEPARG.out.tsv.filter{ meta, file -> !file.isEmpty() } - ARGNORM_DEEPARG ( ch_input_to_argnorm_deeparg, 'deeparg', 'deeparg' ) - ch_versions = ch_versions.mix( ARGNORM_DEEPARG.out.versions ) + ch_input_to_hamronization_deeparg = DEEPARG_PREDICT.out.arg.mix(DEEPARG_PREDICT.out.potential_arg) + HAMRONIZATION_DEEPARG(ch_input_to_hamronization_deeparg, 'tsv', '1.0.4', params.arg_deeparg_db_version) + ch_versions = ch_versions.mix(HAMRONIZATION_DEEPARG.out.versions) + ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix(HAMRONIZATION_DEEPARG.out.tsv) + + if (!params.arg_skip_argnorm) { + ch_input_to_argnorm_deeparg = HAMRONIZATION_DEEPARG.out.tsv.filter { meta, file -> !file.isEmpty() } + ARGNORM_DEEPARG(ch_input_to_argnorm_deeparg, 'deeparg', 'deeparg') + ch_versions = ch_versions.mix(ARGNORM_DEEPARG.out.versions) } } // ABRicate run - if ( !params.arg_skip_abricate ) { + if (!params.arg_skip_abricate) { abricate_dbdir = params.arg_abricate_db ? file(params.arg_abricate_db, checkIfExists: true) : [] - ABRICATE_RUN ( fastas, abricate_dbdir ) - ch_versions = ch_versions.mix( ABRICATE_RUN.out.versions ) - - HAMRONIZATION_ABRICATE ( ABRICATE_RUN.out.report, 'tsv', '1.0.1', '2021-Mar-27' ) - ch_versions = ch_versions.mix( HAMRONIZATION_ABRICATE.out.versions ) - ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix( HAMRONIZATION_ABRICATE.out.tsv ) - - if ( ( params.arg_abricate_db_id == 'ncbi' || - params.arg_abricate_db_id == 'resfinder' || - params.arg_abricate_db_id == 'argannot' || - params.arg_abricate_db_id == 'megares') && !params.arg_skip_argnorm ) { - ch_input_to_argnorm_abricate = HAMRONIZATION_ABRICATE.out.tsv.filter{ meta, file -> !file.isEmpty() } - ARGNORM_ABRICATE ( ch_input_to_argnorm_abricate, 'abricate', params.arg_abricate_db_id ) - ch_versions = ch_versions.mix( ARGNORM_ABRICATE.out.versions ) + ABRICATE_RUN(fastas, abricate_dbdir) + ch_versions = ch_versions.mix(ABRICATE_RUN.out.versions) + + HAMRONIZATION_ABRICATE(ABRICATE_RUN.out.report, 'tsv', '1.0.1', '2021-Mar-27') + ch_versions = ch_versions.mix(HAMRONIZATION_ABRICATE.out.versions) + ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix(HAMRONIZATION_ABRICATE.out.tsv) + + if ((params.arg_abricate_db_id == 'ncbi' || params.arg_abricate_db_id == 'resfinder' || params.arg_abricate_db_id == 'argannot' || params.arg_abricate_db_id == 'megares') && !params.arg_skip_argnorm) { + ch_input_to_argnorm_abricate = HAMRONIZATION_ABRICATE.out.tsv.filter { meta, file -> !file.isEmpty() } + ARGNORM_ABRICATE(ch_input_to_argnorm_abricate, 'abricate', params.arg_abricate_db_id) + ch_versions = ch_versions.mix(ARGNORM_ABRICATE.out.versions) } } ch_input_to_hamronization_summarize - .map{ + .map { it[1] } .collect() .set { ch_input_for_hamronization_summarize } - HAMRONIZATION_SUMMARIZE( ch_input_for_hamronization_summarize, params.arg_hamronization_summarizeformat ) - ch_versions = ch_versions.mix( HAMRONIZATION_SUMMARIZE.out.versions ) + HAMRONIZATION_SUMMARIZE(ch_input_for_hamronization_summarize, params.arg_hamronization_summarizeformat) + ch_versions = ch_versions.mix(HAMRONIZATION_SUMMARIZE.out.versions) // MERGE_TAXONOMY - if ( params.run_taxa_classification ) { + if (params.run_taxa_classification) { - ch_mmseqs_taxonomy_list = tsvs.map{ it[1] }.collect() - MERGE_TAXONOMY_HAMRONIZATION( HAMRONIZATION_SUMMARIZE.out.tsv, ch_mmseqs_taxonomy_list ) - ch_versions = ch_versions.mix( MERGE_TAXONOMY_HAMRONIZATION.out.versions ) + ch_mmseqs_taxonomy_list = tsvs.map { it[1] }.collect() + MERGE_TAXONOMY_HAMRONIZATION(HAMRONIZATION_SUMMARIZE.out.tsv, ch_mmseqs_taxonomy_list) + ch_versions = ch_versions.mix(MERGE_TAXONOMY_HAMRONIZATION.out.versions) - ch_tabix_input = Channel.of( [ 'id':'hamronization_combined_report' ] ) + ch_tabix_input = Channel + .of(['id': 'hamronization_combined_report']) .combine(MERGE_TAXONOMY_HAMRONIZATION.out.tsv) - ARG_TABIX_BGZIP( ch_tabix_input ) - ch_versions = ch_versions.mix( ARG_TABIX_BGZIP.out.versions ) + ARG_TABIX_BGZIP(ch_tabix_input) + ch_versions = ch_versions.mix(ARG_TABIX_BGZIP.out.versions) } emit: diff --git a/subworkflows/local/bgc.nf b/subworkflows/local/bgc.nf index 0130205d..25b21daa 100644 --- a/subworkflows/local/bgc.nf +++ b/subworkflows/local/bgc.nf @@ -16,7 +16,6 @@ include { TABIX_BGZIP as BGC_TABIX_BGZIP } from '../../modules/nf-core include { MERGE_TAXONOMY_COMBGC } from '../../modules/local/merge_taxonomy_combgc' workflow BGC { - take: fastas // tuple val(meta), path(PREPPED_INPUT.out.fna) faas // tuple val(meta), path(.out.faa) @@ -24,7 +23,7 @@ workflow BGC { tsvs // tuple val(meta), path(MMSEQS_CREATETSV.out.tsv) main: - ch_versions = Channel.empty() + ch_versions = Channel.empty() ch_bgcresults_for_combgc = Channel.empty() // When adding new tool that requires FAA, make sure to update conditions @@ -33,168 +32,173 @@ workflow BGC { ch_faa_for_bgc_hmmsearch = faas // ANTISMASH - if ( !params.bgc_skip_antismash ) { + if (!params.bgc_skip_antismash) { // Check whether user supplies database and/or antismash directory. If not, obtain them via the module antismashlite/antismashlitedownloaddatabases. // Important for future maintenance: For CI tests, only the "else" option below is used. Both options should be tested locally whenever the antiSMASH module gets updated. - if ( params.bgc_antismash_db && params.bgc_antismash_installdir ) { + if (params.bgc_antismash_db && params.bgc_antismash_installdir) { ch_antismash_databases = Channel - .fromPath( params.bgc_antismash_db ) + .fromPath(params.bgc_antismash_db, checkIfExists: true) .first() ch_antismash_directory = Channel - .fromPath( params.bgc_antismash_installdir ) + .fromPath(params.bgc_antismash_installdir, checkIfExists: true) .first() - - } else if ( params.bgc_antismash_db && ( session.config.conda && session.config.conda.enabled ) ) { + } + else if (params.bgc_antismash_db && (session.config.conda && session.config.conda.enabled)) { ch_antismash_databases = Channel - .fromPath( params.bgc_antismash_db ) + .fromPath(params.bgc_antismash_db, checkIfExists: true) .first() ch_antismash_directory = [] - - } else { + } + else { // May need to update on each new version of antismash-lite due to changes to scripts inside these tars ch_css_for_antismash = "https://github.com/nf-core/test-datasets/raw/724737e23a53085129cd5e015acafbf7067822ca/data/delete_me/antismash/css.tar.gz" ch_detection_for_antismash = "https://github.com/nf-core/test-datasets/raw/c3174c50bf654e477bf329dbaf72acc8345f9b7a/data/delete_me/antismash/detection.tar.gz" ch_modules_for_antismash = "https://github.com/nf-core/test-datasets/raw/c3174c50bf654e477bf329dbaf72acc8345f9b7a/data/delete_me/antismash/modules.tar.gz" - UNTAR_CSS ( [ [], ch_css_for_antismash ] ) - ch_versions = ch_versions.mix( UNTAR_CSS.out.versions ) + UNTAR_CSS([[], ch_css_for_antismash]) + ch_versions = ch_versions.mix(UNTAR_CSS.out.versions) - UNTAR_DETECTION ( [ [], ch_detection_for_antismash ] ) - ch_versions = ch_versions.mix( UNTAR_DETECTION.out.versions ) + UNTAR_DETECTION([[], ch_detection_for_antismash]) + ch_versions = ch_versions.mix(UNTAR_DETECTION.out.versions) - UNTAR_MODULES ( [ [], ch_modules_for_antismash ] ) - ch_versions = ch_versions.mix( UNTAR_MODULES.out.versions ) + UNTAR_MODULES([[], ch_modules_for_antismash]) + ch_versions = ch_versions.mix(UNTAR_MODULES.out.versions) - ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES ( UNTAR_CSS.out.untar.map{ it[1] }, UNTAR_DETECTION.out.untar.map{ it[1] }, UNTAR_MODULES.out.untar.map{ it[1] } ) - ch_versions = ch_versions.mix( ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES.out.versions ) + ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES(UNTAR_CSS.out.untar.map { it[1] }, UNTAR_DETECTION.out.untar.map { it[1] }, UNTAR_MODULES.out.untar.map { it[1] }) + ch_versions = ch_versions.mix(ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES.out.versions) ch_antismash_databases = ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES.out.database ch_antismash_directory = ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES.out.antismash_dir } - ANTISMASH_ANTISMASHLITE ( gbks, ch_antismash_databases, ch_antismash_directory, [] ) + ANTISMASH_ANTISMASHLITE(gbks, ch_antismash_databases, ch_antismash_directory, []) - ch_versions = ch_versions.mix( ANTISMASH_ANTISMASHLITE.out.versions ) + ch_versions = ch_versions.mix(ANTISMASH_ANTISMASHLITE.out.versions) ch_antismashresults = ANTISMASH_ANTISMASHLITE.out.knownclusterblast_dir - .mix( ANTISMASH_ANTISMASHLITE.out.gbk_input ) - .groupTuple() - .map{ - meta, files -> - [ meta, files.flatten() ] - } + .mix(ANTISMASH_ANTISMASHLITE.out.gbk_input) + .groupTuple() + .map { meta, files -> + [meta, files.flatten()] + } // Filter out samples with no BGC hits ch_antismashresults_for_combgc = ch_antismashresults .join(fastas, remainder: false) .join(ANTISMASH_ANTISMASHLITE.out.gbk_results, remainder: false) - .map { - meta, gbk_input, fasta, gbk_results -> - [ meta, gbk_input ] + .map { meta, gbk_input, fasta, gbk_results -> + [meta, gbk_input] } - ch_bgcresults_for_combgc = ch_bgcresults_for_combgc.mix( ch_antismashresults_for_combgc ) + ch_bgcresults_for_combgc = ch_bgcresults_for_combgc.mix(ch_antismashresults_for_combgc) } // DEEPBGC - if ( !params.bgc_skip_deepbgc ) { - if ( params.bgc_deepbgc_db ) { + if (!params.bgc_skip_deepbgc) { + if (params.bgc_deepbgc_db) { ch_deepbgc_database = Channel - .fromPath( params.bgc_deepbgc_db ) + .fromPath(params.bgc_deepbgc_db, checkIfExists: true) .first() - } else { + } + else { DEEPBGC_DOWNLOAD() ch_deepbgc_database = DEEPBGC_DOWNLOAD.out.db - ch_versions = ch_versions.mix( DEEPBGC_DOWNLOAD.out.versions ) + ch_versions = ch_versions.mix(DEEPBGC_DOWNLOAD.out.versions) } - DEEPBGC_PIPELINE ( gbks, ch_deepbgc_database ) - ch_versions = ch_versions.mix( DEEPBGC_PIPELINE.out.versions ) - ch_bgcresults_for_combgc = ch_bgcresults_for_combgc.mix( DEEPBGC_PIPELINE.out.bgc_tsv ) + DEEPBGC_PIPELINE(gbks, ch_deepbgc_database) + ch_versions = ch_versions.mix(DEEPBGC_PIPELINE.out.versions) + ch_bgcresults_for_combgc = ch_bgcresults_for_combgc.mix(DEEPBGC_PIPELINE.out.bgc_tsv) } // GECCO - if ( !params.bgc_skip_gecco ) { - ch_gecco_input = gbks.groupTuple() - .multiMap { - fastas: [ it[0], it[1], [] ] - } - - GECCO_RUN ( ch_gecco_input, [] ) - ch_versions = ch_versions.mix( GECCO_RUN.out.versions ) + if (!params.bgc_skip_gecco) { + ch_gecco_input = gbks + .groupTuple() + .multiMap { + fastas: [it[0], it[1], []] + } + + GECCO_RUN(ch_gecco_input, []) + ch_versions = ch_versions.mix(GECCO_RUN.out.versions) ch_geccoresults_for_combgc = GECCO_RUN.out.gbk - .mix( GECCO_RUN.out.clusters ) + .mix(GECCO_RUN.out.clusters) .groupTuple() - .map{ - meta, files -> - [ meta, files.flatten() ] + .map { meta, files -> + [meta, files.flatten()] } - ch_bgcresults_for_combgc = ch_bgcresults_for_combgc.mix( ch_geccoresults_for_combgc ) + ch_bgcresults_for_combgc = ch_bgcresults_for_combgc.mix(ch_geccoresults_for_combgc) } // HMMSEARCH - if ( params.bgc_run_hmmsearch ) { - if ( params.bgc_hmmsearch_models ) { ch_bgc_hmm_models = Channel.fromPath( params.bgc_hmmsearch_models, checkIfExists: true ) } else { error('[nf-core/funcscan] error: hmm model files not found for --bgc_hmmsearch_models! Please check input.') } + if (params.bgc_run_hmmsearch) { + if (params.bgc_hmmsearch_models) { + ch_bgc_hmm_models = Channel.fromPath(params.bgc_hmmsearch_models, checkIfExists: true) + } + else { + error('[nf-core/funcscan] error: hmm model files not found for --bgc_hmmsearch_models! Please check input.') + } - ch_bgc_hmm_models_meta = ch_bgc_hmm_models - .map { - file -> - def meta = [:] - meta['id'] = file.extension == 'gz' ? file.name - '.hmm.gz' : file.name - '.hmm' + ch_bgc_hmm_models_meta = ch_bgc_hmm_models.map { file -> + def meta = [:] + meta['id'] = file.extension == 'gz' ? file.name - '.hmm.gz' : file.name - '.hmm' - [ meta, file ] - } + [meta, file] + } - ch_in_for_bgc_hmmsearch = ch_faa_for_bgc_hmmsearch.combine(ch_bgc_hmm_models_meta) - .map { - meta_faa, faa, meta_hmm, hmm -> - def meta_new = [:] - meta_new['id'] = meta_faa['id'] - meta_new['hmm_id'] = meta_hmm['id'] - [ meta_new, hmm, faa, params.bgc_hmmsearch_savealignments, params.bgc_hmmsearch_savetargets, params.bgc_hmmsearch_savedomains ] + ch_in_for_bgc_hmmsearch = ch_faa_for_bgc_hmmsearch + .combine(ch_bgc_hmm_models_meta) + .map { meta_faa, faa, meta_hmm, hmm -> + def meta_new = [:] + meta_new['id'] = meta_faa['id'] + meta_new['hmm_id'] = meta_hmm['id'] + [meta_new, hmm, faa, params.bgc_hmmsearch_savealignments, params.bgc_hmmsearch_savetargets, params.bgc_hmmsearch_savedomains] } - BGC_HMMER_HMMSEARCH ( ch_in_for_bgc_hmmsearch ) - ch_versions = ch_versions.mix( BGC_HMMER_HMMSEARCH.out.versions ) + BGC_HMMER_HMMSEARCH(ch_in_for_bgc_hmmsearch) + ch_versions = ch_versions.mix(BGC_HMMER_HMMSEARCH.out.versions) } // COMBGC ch_bgcresults_for_combgc .join(fastas, remainder: true) - .filter { - meta, bgcfile, fasta -> - if ( !bgcfile ) { log.warn("[nf-core/funcscan] BGC workflow: No hits found by BGC tools; comBGC summary tool will not be run for sample: ${meta.id}") } - return [meta, bgcfile, fasta] + .filter { meta, bgcfile, fasta -> + if (!bgcfile) { + log.warn("[nf-core/funcscan] BGC workflow: No hits found by BGC tools; comBGC summary tool will not be run for sample: ${meta.id}") + } + return [meta, bgcfile, fasta] } - COMBGC ( ch_bgcresults_for_combgc ) - ch_versions = ch_versions.mix( COMBGC.out.versions ) + COMBGC(ch_bgcresults_for_combgc) + ch_versions = ch_versions.mix(COMBGC.out.versions) // COMBGC concatenation - if ( !params.run_taxa_classification ) { - ch_combgc_summaries = COMBGC.out.tsv.map{ it[1] }.collectFile( name: 'combgc_complete_summary.tsv', storeDir: "${params.outdir}/reports/combgc", keepHeader:true ) - } else { - ch_combgc_summaries = COMBGC.out.tsv.map{ it[1] }.collectFile( name: 'combgc_complete_summary.tsv', keepHeader:true ) + if (!params.run_taxa_classification) { + ch_combgc_summaries = COMBGC.out.tsv.map { it[1] }.collectFile(name: 'combgc_complete_summary.tsv', storeDir: "${params.outdir}/reports/combgc", keepHeader: true) + } + else { + ch_combgc_summaries = COMBGC.out.tsv.map { it[1] }.collectFile(name: 'combgc_complete_summary.tsv', keepHeader: true) } // MERGE_TAXONOMY - if ( params.run_taxa_classification ) { + if (params.run_taxa_classification) { - ch_mmseqs_taxonomy_list = tsvs.map{ it[1] }.collect() - MERGE_TAXONOMY_COMBGC( ch_combgc_summaries, ch_mmseqs_taxonomy_list ) - ch_versions = ch_versions.mix( MERGE_TAXONOMY_COMBGC.out.versions ) + ch_mmseqs_taxonomy_list = tsvs.map { it[1] }.collect() + MERGE_TAXONOMY_COMBGC(ch_combgc_summaries, ch_mmseqs_taxonomy_list) + ch_versions = ch_versions.mix(MERGE_TAXONOMY_COMBGC.out.versions) - ch_tabix_input = Channel.of( [ 'id':'combgc_complete_summary_taxonomy' ] ) + ch_tabix_input = Channel + .of(['id': 'combgc_complete_summary_taxonomy']) .combine(MERGE_TAXONOMY_COMBGC.out.tsv) - BGC_TABIX_BGZIP( ch_tabix_input ) - ch_versions = ch_versions.mix( BGC_TABIX_BGZIP.out.versions ) + BGC_TABIX_BGZIP(ch_tabix_input) + ch_versions = ch_versions.mix(BGC_TABIX_BGZIP.out.versions) } emit: diff --git a/subworkflows/local/taxa_class.nf b/subworkflows/local/taxa_class.nf index d76e1dff..0bf67312 100644 --- a/subworkflows/local/taxa_class.nf +++ b/subworkflows/local/taxa_class.nf @@ -12,47 +12,48 @@ workflow TAXA_CLASS { contigs // tuple val(meta), path(contigs) main: - ch_versions = Channel.empty() - ch_mmseqs_db = Channel.empty() - ch_taxonomy_querydb = Channel.empty() + ch_versions = Channel.empty() + ch_mmseqs_db = Channel.empty() + ch_taxonomy_querydb = Channel.empty() ch_taxonomy_querydb_taxdb = Channel.empty() - ch_taxonomy_tsv = Channel.empty() + ch_taxonomy_tsv = Channel.empty() - if ( params.taxa_classification_tool == 'mmseqs2') { + if (params.taxa_classification_tool == 'mmseqs2') { // Download the ref db if not supplied by user // MMSEQS_DATABASE - if ( params.taxa_classification_mmseqs_db != null ) { + if (params.taxa_classification_mmseqs_db != null) { ch_mmseqs_db = Channel - .fromPath( params.taxa_classification_mmseqs_db ) + .fromPath(params.taxa_classification_mmseqs_db, checkIfExists: true) .first() - } else { - MMSEQS_DATABASES ( params.taxa_classification_mmseqs_db_id ) - ch_versions = ch_versions.mix( MMSEQS_DATABASES.out.versions ) - ch_mmseqs_db = ( MMSEQS_DATABASES.out.database ) + } + else { + MMSEQS_DATABASES(params.taxa_classification_mmseqs_db_id) + ch_versions = ch_versions.mix(MMSEQS_DATABASES.out.versions) + ch_mmseqs_db = MMSEQS_DATABASES.out.database } // Create db for query contigs, assign taxonomy and convert to table format // MMSEQS_CREATEDB - MMSEQS_CREATEDB ( contigs ) - ch_versions = ch_versions.mix( MMSEQS_CREATEDB.out.versions ) + MMSEQS_CREATEDB(contigs) + ch_versions = ch_versions.mix(MMSEQS_CREATEDB.out.versions) // MMSEQS_TAXONOMY - MMSEQS_TAXONOMY ( MMSEQS_CREATEDB.out.db, ch_mmseqs_db ) - ch_versions = ch_versions.mix( MMSEQS_TAXONOMY.out.versions ) + MMSEQS_TAXONOMY(MMSEQS_CREATEDB.out.db, ch_mmseqs_db) + ch_versions = ch_versions.mix(MMSEQS_TAXONOMY.out.versions) ch_taxonomy_querydb_taxdb = MMSEQS_TAXONOMY.out.db_taxonomy // Join together to ensure in sync ch_taxonomy_input_for_createtsv = MMSEQS_CREATEDB.out.db - .join(MMSEQS_TAXONOMY.out.db_taxonomy) - .multiMap { meta, db, db_taxonomy -> - db: [ meta,db ] - taxdb: [ meta, db_taxonomy ] - } + .join(MMSEQS_TAXONOMY.out.db_taxonomy) + .multiMap { meta, db, db_taxonomy -> + db: [meta, db] + taxdb: [meta, db_taxonomy] + } // MMSEQS_CREATETSV - MMSEQS_CREATETSV ( ch_taxonomy_input_for_createtsv.taxdb, [[:],[]], ch_taxonomy_input_for_createtsv.db ) - ch_versions = ch_versions.mix( MMSEQS_CREATETSV.out.versions ) + MMSEQS_CREATETSV(ch_taxonomy_input_for_createtsv.taxdb, [[:], []], ch_taxonomy_input_for_createtsv.db) + ch_versions = ch_versions.mix(MMSEQS_CREATETSV.out.versions) ch_taxonomy_tsv = MMSEQS_CREATETSV.out.tsv } diff --git a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf index bfce1c70..27dce6cb 100644 --- a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf @@ -43,7 +43,7 @@ workflow PIPELINE_INITIALISATION { version, true, outdir, - workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1 + workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1, ) // @@ -52,7 +52,7 @@ workflow PIPELINE_INITIALISATION { UTILS_NFSCHEMA_PLUGIN( workflow, validate_params, - null + null, ) // @@ -183,7 +183,7 @@ def toolCitationText() { params.annotation_tool == 'prodigal' ? "Prodigal (Hyatt et al. 2010)." : "", params.annotation_tool == 'pyrodigal' ? "Pyrodigal (Larralde 2022)." : "", params.annotation_tool == 'bakta' ? "BAKTA (Schwengers et al. 2021)." : "", - params.annotation_tool == 'prokka' ? "PROKKA (Seemann 2014)." : "" + params.annotation_tool == 'prokka' ? "PROKKA (Seemann 2014)." : "", ].join(' ').trim() def amp_text = [ @@ -192,7 +192,7 @@ def toolCitationText() { !params.amp_skip_macrel ? "Macrel (Santos-Júnior et al. 2020)," : "", !params.amp_skip_ampir ? "ampir (Fingerhut et al. 2021)," : "", params.amp_run_hmmsearch ? "HMMER (Eddy 2011)," : "", - ". The output from the antimicrobial peptide screening tools were standardised and summarised with AMPcombi (Ibrahim and Perelo 2023)." + ". The output from the antimicrobial peptide screening tools were standardised and summarised with AMPcombi (Ibrahim and Perelo 2023).", ].join(' ').trim().replaceAll(', .', ".") def arg_text = [ @@ -203,7 +203,7 @@ def toolCitationText() { !params.arg_skip_deeparg ? "deepARG (Arango-Argoty 2018)," : "", !params.arg_skip_abricate ? "ABRicate (Seemann 2020)," : "", !params.arg_skip_argnorm ? ". The outputs from ARG screening tools were normalized to the antibiotic resistance ontology using argNorm (Perovic et al. 2024)," : "", - ". The output from the antimicrobial resistance gene screening tools were standardised and summarised with hAMRonization (Maguire et al. 2023)." + ". The output from the antimicrobial resistance gene screening tools were standardised and summarised with hAMRonization (Maguire et al. 2023).", ].join(' ').trim().replaceAll(', +.', ".") def bgc_text = [ @@ -212,7 +212,7 @@ def toolCitationText() { !params.bgc_skip_deepbgc ? "deepBGC (Hannigan et al. 2019)," : "", !params.bgc_skip_gecco ? "GECCO (Carroll et al. 2021)," : "", params.bgc_run_hmmsearch ? "HMMER (Eddy 2011)," : "", - ". The output from the biosynthetic gene cluster screening tools were standardised and summarised with comBGC (Frangenberg et al. 2023)." + ". The output from the biosynthetic gene cluster screening tools were standardised and summarised with comBGC (Frangenberg et al. 2023).", ].join(' ').replaceAll(', +.', ".").trim() def postprocessing_text = "Run statistics were reported using MultiQC (Ewels et al. 2016)." @@ -223,7 +223,7 @@ def toolCitationText() { params.run_amp_screening ? amp_text : "", params.run_arg_screening ? arg_text : "", params.run_bgc_screening ? bgc_text : "", - postprocessing_text + postprocessing_text, ].join(' ').trim() return citation_text @@ -238,14 +238,14 @@ def toolBibliographyText() { params.annotation_tool == 'prodigal' ? '
  • Hyatt, D., Chen, G. L., Locascio, P. F., Land, M. L., Larimer, F. W., & Hauser, L. J. (2010). Prodigal: prokaryotic gene recognition and translation initiation site identification. BMC bioinformatics, 11, 119. DOI: 10.1186/1471-2105-11-119
  • ' : "", params.annotation_tool == 'pyrodigal' ? '
  • Larralde, M. (2022). Pyrodigal: Python bindings and interface to Prodigal, an efficient method for gene prediction in prokaryotes. Journal of Open Source Software, 7(72), 4296. DOI: 10.21105/joss.04296
  • ' : "", params.annotation_tool == 'bakta' ? '
  • Schwengers, O., Jelonek, L., Dieckmann, M. A., Beyvers, S., Blom, J., & Goesmann, A. (2021). Bakta: rapid and standardized annotation of bacterial genomes via alignment-free sequence identification. Microbial Genomics, 7(11). DOI: 10.1099/mgen.0.000685
  • ' : "", - params.annotation_tool == 'prokka' ? '
  • Seemann, T. (2014). Prokka: rapid prokaryotic genome annotation. Bioinformatics (Oxford, England), 30(14), 2068–2069. DOI: 10.1093/bioinformatics/btu153
  • ' : "" + params.annotation_tool == 'prokka' ? '
  • Seemann, T. (2014). Prokka: rapid prokaryotic genome annotation. Bioinformatics (Oxford, England), 30(14), 2068–2069. DOI: 10.1093/bioinformatics/btu153
  • ' : "", ].join(' ').trim() def amp_text = [ !params.amp_skip_amplify ? '
  • Li, C., Sutherland, D., Hammond, S. A., Yang, C., Taho, F., Bergman, L., Houston, S., Warren, R. L., Wong, T., Hoang, L., Cameron, C. E., Helbing, C. C., & Birol, I. (2022). AMPlify: attentive deep learning model for discovery of novel antimicrobial peptides effective against WHO priority pathogens. BMC genomics, 23(1), 77. DOI: 10.1186/s12864-022-08310-4
  • ' : "", !params.amp_skip_macrel ? '
  • Santos-Júnior, C. D., Pan, S., Zhao, X. M., & Coelho, L. P. (2020). Macrel: antimicrobial peptide screening in genomes and metagenomes. PeerJ, 8, e10555. DOI: 10.7717/peerj.10555
  • ' : "", !params.amp_skip_ampir ? '
  • Fingerhut, L., Miller, D. J., Strugnell, J. M., Daly, N. L., & Cooke, I. R. (2021). ampir: an R package for fast genome-wide prediction of antimicrobial peptides. Bioinformatics (Oxford, England), 36(21), 5262–5263. DOI: 10.1093/bioinformatics/btaa653
  • ' : "", - '
  • Ibrahim, A. & Perelo, L. (2023). Darcy220606/AMPcombi. DOI: 10.5281/zenodo.7639121
  • ' + '
  • Ibrahim, A. & Perelo, L. (2023). Darcy220606/AMPcombi. DOI: 10.5281/zenodo.7639121
  • ', ].join(' ').trim().replaceAll(', .', ".") def arg_text = [ @@ -255,7 +255,7 @@ def toolBibliographyText() { !params.arg_skip_deeparg ? '
  • Arango-Argoty, G., Garner, E., Pruden, A., Heath, L. S., Vikesland, P., & Zhang, L. (2018). DeepARG: a deep learning approach for predicting antibiotic resistance genes from metagenomic data. Microbiome, 6(1), 23. DOI: 10.1186/s40168-018-0401-z' : "", !params.arg_skip_abricate ? '
  • Seemann, T. (2020). ABRicate. Github https://github.com/tseemann/abricate.
  • ' : "", !params.arg_skip_argnorm ? '
  • Perovic, S. U., Ramji, V., Chong, H., Duan, Y., Maguire, F., Coelho, L. P. (2024). argNorm. DOI: .
  • ' : "", - '
  • Public Health Alliance for Genomic Epidemiology (pha4ge). (2022). Parse multiple Antimicrobial Resistance Analysis Reports into a common data structure. Github. Retrieved October 5, 2022, from https://github.com/pha4ge/hAMRonization
  • ' + '
  • Public Health Alliance for Genomic Epidemiology (pha4ge). (2022). Parse multiple Antimicrobial Resistance Analysis Reports into a common data structure. Github. Retrieved October 5, 2022, from https://github.com/pha4ge/hAMRonization
  • ', ].join(' ').trim().replaceAll(', +.', ".") @@ -263,7 +263,7 @@ def toolBibliographyText() { !params.bgc_skip_antismash ? '
  • Blin, K., Shaw, S., Kloosterman, A. M., Charlop-Powers, Z., van Wezel, G. P., Medema, M. H., & Weber, T. (2021). antiSMASH 6.0: improving cluster detection and comparison capabilities. Nucleic acids research, 49(W1), W29–W35. DOI:
  • ' : "", !params.bgc_skip_deepbgc ? '
  • Hannigan, G. D., Prihoda, D., Palicka, A., Soukup, J., Klempir, O., Rampula, L., Durcak, J., Wurst, M., Kotowski, J., Chang, D., Wang, R., Piizzi, G., Temesi, G., Hazuda, D. J., Woelk, C. H., & Bitton, D. A. (2019). A deep learning genome-mining strategy for biosynthetic gene cluster prediction. Nucleic acids research, 47(18), e110. DOI: 10.1093/nar/gkz654
  • ' : "", !params.bgc_skip_gecco ? '
  • Carroll, L. M. , Larralde, M., Fleck, J. S., Ponnudurai, R., Milanese, A., Cappio Barazzone, E. & Zeller, G. (2021). Accurate de novo identification of biosynthetic gene clusters with GECCO. bioRxiv DOI: 0.1101/2021.05.03.442509
  • ' : "", - '
  • Frangenberg, J. Fellows Yates, J. A., Ibrahim, A., Perelo, L., & Beber, M. E. (2023). nf-core/funcscan: 1.0.0 - German Rollmops - 2023-02-15. https://doi.org/10.5281/zenodo.7643100
  • ' + '
  • Frangenberg, J. Fellows Yates, J. A., Ibrahim, A., Perelo, L., & Beber, M. E. (2023). nf-core/funcscan: 1.0.0 - German Rollmops - 2023-02-15. https://doi.org/10.5281/zenodo.7643100
  • ', ].join(' ').replaceAll(', +.', ".").trim() def postprocessing_text = '
  • Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. https://doi.org/10.1093/bioinformatics/btw354
  • ' @@ -278,7 +278,7 @@ def toolBibliographyText() { params.run_arg_screening ? arg_text : "", params.run_bgc_screening ? bgc_text : "", hmmsearch_text, - postprocessing_text + postprocessing_text, ].join(' ').trim() return reference_text diff --git a/workflows/funcscan.nf b/workflows/funcscan.nf index 2d6c51fd..e2e625f2 100644 --- a/workflows/funcscan.nf +++ b/workflows/funcscan.nf @@ -4,11 +4,11 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -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_funcscan_pipeline' +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_funcscan_pipeline' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From b3abb694053bd129a003435a95ce1dba421ab7fb Mon Sep 17 00:00:00 2001 From: jasmezz Date: Tue, 28 Jan 2025 12:14:28 +0100 Subject: [PATCH 116/175] Update changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d53a95e..a9be1839 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#433](https://github.com/nf-core/funcscan/pull/433) Updated to nf-core template 3.1.1. (by @jfy133) - [#431](https://github.com/nf-core/funcscan/pull/431) Updated AMPcombi, Macrel, all MMseqs2 modules, MultiQC, Pyrodigal, and seqkit, added `--taxa_classification_mmseqs_compressed` parameter. (by @jasmezz) - [#438](https://github.com/nf-core/funcscan/pull/438) Updated to nf-core template 3.1.2. (by @jfy133) +- [#441](https://github.com/nf-core/funcscan/pull/441) Updated to nf-core template 3.2.0, updated MultiQC. (by @jasmezz and @jfy133) ### `Fixed` @@ -28,7 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | AMPcombi | 0.2.2 | 2.0.1 | | Macrel | 1.2.0 | 1.4.0 | | MMseqs2 | 15.6f452 | 17.b804f | -| MultiQC | 1.24.0 | 1.26 | +| MultiQC | 1.24.0 | 1.27 | | Pyrodigal | 3.3.0 | 3.6.3 | | seqkit | 2.8.1 | 2.9.0 | From b4336e72e22b674f1ecaf3d25312b023dccaad6f Mon Sep 17 00:00:00 2001 From: jasmezz Date: Wed, 29 Jan 2025 11:24:22 +0100 Subject: [PATCH 117/175] Update bakta_taxonomy nf-test files --- tests/test_bakta.nf.test | 2 +- tests/test_bakta.nf.test.snap | 2 +- tests/test_taxonomy_bakta.nf.test | 14 +++++++------- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/test_bakta.nf.test b/tests/test_bakta.nf.test index c040b2ab..1349d8a2 100644 --- a/tests/test_bakta.nf.test +++ b/tests/test_bakta.nf.test @@ -53,7 +53,7 @@ nextflow_pipeline { ).match("macrel") }, // AMPcombi - { assert path("$outputDir/reports/ampcombi2/Ampcombi_summary.tsv").text.contains("KKEJHB_00100") }, + { assert path("$outputDir/reports/ampcombi2/Ampcombi_summary.tsv").text.contains("KDEMFK_0115") }, { assert snapshot( path("$outputDir/reports/ampcombi2/Ampcombi_cluster.log"), path("$outputDir/reports/ampcombi2/Ampcombi_complete.log"), diff --git a/tests/test_bakta.nf.test.snap b/tests/test_bakta.nf.test.snap index 2a81f001..062161d5 100644 --- a/tests/test_bakta.nf.test.snap +++ b/tests/test_bakta.nf.test.snap @@ -47,7 +47,7 @@ "deeparg_tsv_ARG": { "content": [ "sample_1.align.daa.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", - "sample_2.align.daa.tsv:md5,4a86ca69defa4c861fabf236609afe8a", + "sample_2.align.daa.tsv:md5,4557fadca3f90ccb037b59558dddd528", "sample_1.mapping.ARG:md5,0e049e99eab4c55666062df21707d5b9", "sample_2.mapping.ARG:md5,0e049e99eab4c55666062df21707d5b9" ], diff --git a/tests/test_taxonomy_bakta.nf.test b/tests/test_taxonomy_bakta.nf.test index 5f076d29..8e8a14ec 100644 --- a/tests/test_taxonomy_bakta.nf.test +++ b/tests/test_taxonomy_bakta.nf.test @@ -23,16 +23,16 @@ nextflow_pipeline { // ampir { assert snapshot( - file("$outputDir/amp/ampir/sample_1/sample_1.ampir.tsv").text.contains("KKEJHB_00005"), - file("$outputDir/amp/ampir/sample_1/sample_1.ampir.faa").text.contains("KKEJHB_00005"), - file("$outputDir/amp/ampir/sample_2/sample_2.ampir.tsv").text.contains("KDEMFK_00005"), - file("$outputDir/amp/ampir/sample_2/sample_2.ampir.faa").text.contains("KDEMFK_00005") + file("$outputDir/amp/ampir/sample_1/sample_1.ampir.tsv").text.contains("KKEJHB_005"), + file("$outputDir/amp/ampir/sample_1/sample_1.ampir.faa").text.contains("KKEJHB_005"), + file("$outputDir/amp/ampir/sample_2/sample_2.ampir.tsv").text.contains("KDEMFK_0005"), + file("$outputDir/amp/ampir/sample_2/sample_2.ampir.faa").text.contains("KDEMFK_0005") ).match("ampir") }, // AMPlify { assert snapshot( - file("$outputDir/amp/amplify/sample_1/sample_1.amplify.tsv").text.contains("KKEJHB_00005"), - file("$outputDir/amp/amplify/sample_2/sample_2.amplify.tsv").text.contains("KDEMFK_00005") + file("$outputDir/amp/amplify/sample_1/sample_1.amplify.tsv").text.contains("KKEJHB_005"), + file("$outputDir/amp/amplify/sample_2/sample_2.amplify.tsv").text.contains("KDEMFK_0005") ).match("amplify") }, // Macrel @@ -55,7 +55,7 @@ nextflow_pipeline { // AMPcombi { assert snapshot ( - file("$outputDir/reports/ampcombi2/sample_2/sample_2_ampcombi.tsv").text.contains("KDEMFK_00575"), + file("$outputDir/reports/ampcombi2/sample_2/sample_2_ampcombi.tsv").text.contains("KDEMFK_0070"), ).match("ampcombi") }, { assert new File("$outputDir/reports/ampcombi2/ampcombi_complete_summary_taxonomy.tsv.gz").exists() }, From e8bbc3fa29f67bd4a61669aa723c59bb423bd3d9 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Wed, 29 Jan 2025 14:53:26 +0100 Subject: [PATCH 118/175] Fix linting --- modules/nf-core/bakta/baktadbdownload/environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nf-core/bakta/baktadbdownload/environment.yml b/modules/nf-core/bakta/baktadbdownload/environment.yml index 83a06976..a2d0ff72 100644 --- a/modules/nf-core/bakta/baktadbdownload/environment.yml +++ b/modules/nf-core/bakta/baktadbdownload/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::bakta=1.10.4 \ No newline at end of file + - bioconda::bakta=1.10.4 From 9ee2978cb35abc7640c10afd621557a374a38319 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Thu, 30 Jan 2025 17:20:23 +0100 Subject: [PATCH 119/175] Update antismash modules + changelog --- CHANGELOG.md | 1 + modules.json | 4 +- .../nf-core/antismash/antismashlite/main.nf | 82 +++--- .../antismashlite/tests/main.nf.test | 12 +- .../antismashlite/tests/main.nf.test.snap | 260 ++---------------- .../antismashlite/tests/nextflow.config | 5 + .../antismashlitedownloaddatabases/main.nf | 39 ++- .../tests/main.nf.test | 15 +- .../tests/main.nf.test.snap | 53 ++-- .../tests/nextflow.config | 5 + 10 files changed, 132 insertions(+), 344 deletions(-) create mode 100644 modules/nf-core/antismash/antismashlite/tests/nextflow.config create mode 100644 modules/nf-core/antismash/antismashlitedownloaddatabases/tests/nextflow.config diff --git a/CHANGELOG.md b/CHANGELOG.md index a9be1839..7c982f7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#430](https://github.com/nf-core/funcscan/pull/430) Updated `rgi/main` module to fix incorrect variable name. (by @amizeranschi and @jasmezz) - [#435](https://github.com/nf-core/funcscan/pull/435) Fixed dependency errors within taxonomy merging scripts, updated the code and output for all three workflows. Bumped to version 0.1.1. (by @darcy220606) - [#437](https://github.com/nf-core/funcscan/pull/437) Fixed file name error when supplying already preprocessed CARD database for ARG workflow. (by @jasmezz) +- [#446](https://github.com/nf-core/funcscan/pull/446) Updated antiSMASH modules to fix apptainer execution. (by @jasmezz and @jfy133) ### `Dependencies` diff --git a/modules.json b/modules.json index 4f7b9698..c0ee6fc7 100644 --- a/modules.json +++ b/modules.json @@ -47,12 +47,12 @@ }, "antismash/antismashlite": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "3e3be50f2096e4b8fcfadc0318c92f782d6ae969", "installed_by": ["modules"] }, "antismash/antismashlitedownloaddatabases": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "1eb613d008eae2f5dc8368fc940f6a36758deca9", "installed_by": ["modules"] }, "argnorm": { diff --git a/modules/nf-core/antismash/antismashlite/main.nf b/modules/nf-core/antismash/antismashlite/main.nf index 422e7be0..3a521557 100644 --- a/modules/nf-core/antismash/antismashlite/main.nf +++ b/modules/nf-core/antismash/antismashlite/main.nf @@ -1,44 +1,45 @@ process ANTISMASH_ANTISMASHLITE { - tag "$meta.id" + tag "${meta.id}" label 'process_medium' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/antismash-lite:7.1.0--pyhdfd78af_0' : - 'biocontainers/antismash-lite:7.1.0--pyhdfd78af_0' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://depot.galaxyproject.org/singularity/antismash-lite:7.1.0--pyhdfd78af_0' + : 'biocontainers/antismash-lite:7.1.0--pyhdfd78af_0'}" containerOptions { - workflow.containerEngine == 'singularity' ? - "-B $antismash_dir:/usr/local/lib/python3.10/site-packages/antismash" : - workflow.containerEngine == 'docker' ? - "-v \$PWD/$antismash_dir:/usr/local/lib/python3.10/site-packages/antismash" : - '' - } + ['singularity', 'apptainer'].contains(workflow.containerEngine) + ? "-B ${antismash_dir}:/usr/local/lib/python3.10/site-packages/antismash" + : workflow.containerEngine == 'docker' + ? "-v \$PWD/${antismash_dir}:/usr/local/lib/python3.10/site-packages/antismash" + : '' + } input: tuple val(meta), path(sequence_input) - path(databases) - path(antismash_dir) // Optional input: AntiSMASH installation folder. It is not needed for using this module with conda, but required for docker/singularity (see meta.yml). - path(gff) + path databases + path antismash_dir + // Optional input: AntiSMASH installation folder. It is not needed for using this module with conda, but required for docker/singularity (see meta.yml). + path gff output: - tuple val(meta), path("${prefix}/clusterblast/*_c*.txt") , optional: true, emit: clusterblast_file - tuple val(meta), path("${prefix}/{css,images,js}") , emit: html_accessory_files - tuple val(meta), path("${prefix}/knownclusterblast/region*/ctg*.html") , optional: true, emit: knownclusterblast_html - tuple val(meta), path("${prefix}/knownclusterblast/") , optional: true, emit: knownclusterblast_dir - tuple val(meta), path("${prefix}/knownclusterblast/*_c*.txt") , optional: true, emit: knownclusterblast_txt - tuple val(meta), path("${prefix}/svg/clusterblast*.svg") , optional: true, emit: svg_files_clusterblast - tuple val(meta), path("${prefix}/svg/knownclusterblast*.svg") , optional: true, emit: svg_files_knownclusterblast - tuple val(meta), path("${prefix}/*.gbk") , emit: gbk_input - tuple val(meta), path("${prefix}/*.json") , emit: json_results - tuple val(meta), path("${prefix}/*.log") , emit: log - tuple val(meta), path("${prefix}/*.zip") , emit: zip - tuple val(meta), path("${prefix}/*region*.gbk") , optional: true, emit: gbk_results - tuple val(meta), path("${prefix}/clusterblastoutput.txt") , optional: true, emit: clusterblastoutput - tuple val(meta), path("${prefix}/index.html") , emit: html - tuple val(meta), path("${prefix}/knownclusterblastoutput.txt") , optional: true, emit: knownclusterblastoutput - tuple val(meta), path("${prefix}/regions.js") , emit: json_sideloading - path "versions.yml" , emit: versions + tuple val(meta), path("${prefix}/clusterblast/*_c*.txt"), optional: true, emit: clusterblast_file + tuple val(meta), path("${prefix}/{css,images,js}"), emit: html_accessory_files + tuple val(meta), path("${prefix}/knownclusterblast/region*/ctg*.html"), optional: true, emit: knownclusterblast_html + tuple val(meta), path("${prefix}/knownclusterblast/"), optional: true, emit: knownclusterblast_dir + tuple val(meta), path("${prefix}/knownclusterblast/*_c*.txt"), optional: true, emit: knownclusterblast_txt + tuple val(meta), path("${prefix}/svg/clusterblast*.svg"), optional: true, emit: svg_files_clusterblast + tuple val(meta), path("${prefix}/svg/knownclusterblast*.svg"), optional: true, emit: svg_files_knownclusterblast + tuple val(meta), path("${prefix}/*.gbk"), emit: gbk_input + tuple val(meta), path("${prefix}/*.json"), emit: json_results + tuple val(meta), path("${prefix}/*.log"), emit: log + tuple val(meta), path("${prefix}/*.zip"), emit: zip + tuple val(meta), path("${prefix}/*region*.gbk"), optional: true, emit: gbk_results + tuple val(meta), path("${prefix}/clusterblastoutput.txt"), optional: true, emit: clusterblastoutput + tuple val(meta), path("${prefix}/index.html"), emit: html + tuple val(meta), path("${prefix}/knownclusterblastoutput.txt"), optional: true, emit: knownclusterblastoutput + tuple val(meta), path("${prefix}/regions.js"), emit: json_sideloading + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when @@ -53,25 +54,24 @@ process ANTISMASH_ANTISMASHLITE { ## this should be run as a separate module for versioning purposes antismash \\ - $args \\ - $gff_flag \\ - -c $task.cpus \\ - --output-dir $prefix \\ - --output-basename $prefix \\ + ${args} \\ + ${gff_flag} \\ + -c ${task.cpus} \\ + --output-dir ${prefix} \\ + --output-basename ${prefix} \\ --genefinding-tool none \\ - --logfile $prefix/${prefix}.log \\ - --databases $databases \\ - $sequence_input + --logfile ${prefix}/${prefix}.log \\ + --databases ${databases} \\ + ${sequence_input} cat <<-END_VERSIONS > versions.yml "${task.process}": - antismash-lite: \$(echo \$(antismash --version) | sed 's/antiSMASH //') + antismash-lite: \$(echo \$(antismash --version) | sed 's/antiSMASH //;s/-.*//g') END_VERSIONS """ stub: prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" - def VERSION = '7.1.0' // WARN: Version information not provided by tool during stub run. Please update this string when bumping container versions. """ mkdir -p ${prefix}/css mkdir ${prefix}/images @@ -91,7 +91,7 @@ process ANTISMASH_ANTISMASHLITE { cat <<-END_VERSIONS > versions.yml "${task.process}": - antismash-lite: $VERSION + antismash-lite: \$(echo \$(antismash --version) | sed 's/antiSMASH //;s/-.*//g') END_VERSIONS """ } diff --git a/modules/nf-core/antismash/antismashlite/tests/main.nf.test b/modules/nf-core/antismash/antismashlite/tests/main.nf.test index 5ee21d6d..d58fcc4c 100644 --- a/modules/nf-core/antismash/antismashlite/tests/main.nf.test +++ b/modules/nf-core/antismash/antismashlite/tests/main.nf.test @@ -3,6 +3,7 @@ nextflow_process { name "Test Process ANTISMASH_ANTISMASHLITE" script "../main.nf" process "ANTISMASH_ANTISMASHLITE" + config './nextflow.config' tag "modules" tag "modules_nfcore" @@ -96,7 +97,11 @@ nextflow_process { { assert path(process.out.html.get(0).get(1)).text.contains("https://antismash.secondarymetabolites.org/") }, { assert path(process.out.json_sideloading.get(0).get(1)).text.contains("\"seq_id\": \"NZ_CP069563.1\"") }, { assert path(process.out.log.get(0).get(1)).text.contains("antiSMASH status: SUCCESS") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot( + path(process.out.versions[0]).yaml, + file(process.out.versions[0]).name, + ).match("versions") + } ) } } @@ -119,7 +124,10 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + file(process.out.versions[0]).name, + ).match("versions_stub") + } ) } } diff --git a/modules/nf-core/antismash/antismashlite/tests/main.nf.test.snap b/modules/nf-core/antismash/antismashlite/tests/main.nf.test.snap index 618b06f9..7d2febc9 100644 --- a/modules/nf-core/antismash/antismashlite/tests/main.nf.test.snap +++ b/modules/nf-core/antismash/antismashlite/tests/main.nf.test.snap @@ -1,15 +1,28 @@ { + "versions_stub": { + "content": [ + "versions.yml" + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.4" + }, + "timestamp": "2025-01-30T14:55:41.041351955" + }, "versions": { "content": [ - [ - "versions.yml:md5,2a1c54c017741b59c057a05453fc067d" - ] + { + "ANTISMASH_ANTISMASHLITE": { + "antismash-lite": "7.1.0" + } + }, + "versions.yml" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-02-09T17:06:08.439031477" + "timestamp": "2025-01-30T13:48:51.158220245" }, "html_accessory_files": { "content": [ @@ -64,238 +77,9 @@ ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-09T17:06:08.392236617" - }, - "antismashlite - bacteroides_fragilis - genome - stub": { - "content": [ - { - "0": [ - - ], - "1": [ - [ - { - "id": "test" - }, - [ - [ - "bacteria.css:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - "about.svg:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - "antismash.js:md5,d41d8cd98f00b204e9800998ecf8427e", - "jquery.js:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ] - ], - "10": [ - [ - { - "id": "test" - }, - "genome.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "11": [ - [ - { - "id": "test" - }, - [ - "NZ_CP069563.1.region001.gbk:md5,d41d8cd98f00b204e9800998ecf8427e", - "NZ_CP069563.1.region002.gbk:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "12": [ - - ], - "13": [ - [ - { - "id": "test" - }, - "index.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "14": [ - - ], - "15": [ - [ - { - "id": "test" - }, - "regions.js:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "16": [ - "versions.yml:md5,2a1c54c017741b59c057a05453fc067d" - ], - "2": [ - - ], - "3": [ - - ], - "4": [ - - ], - "5": [ - - ], - "6": [ - - ], - "7": [ - [ - { - "id": "test" - }, - [ - "NZ_CP069563.1.region001.gbk:md5,d41d8cd98f00b204e9800998ecf8427e", - "NZ_CP069563.1.region002.gbk:md5,d41d8cd98f00b204e9800998ecf8427e", - "genome.gbk:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "8": [ - [ - { - "id": "test" - }, - "genome.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "9": [ - [ - { - "id": "test" - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "clusterblast_file": [ - - ], - "clusterblastoutput": [ - - ], - "gbk_input": [ - [ - { - "id": "test" - }, - [ - "NZ_CP069563.1.region001.gbk:md5,d41d8cd98f00b204e9800998ecf8427e", - "NZ_CP069563.1.region002.gbk:md5,d41d8cd98f00b204e9800998ecf8427e", - "genome.gbk:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "gbk_results": [ - [ - { - "id": "test" - }, - [ - "NZ_CP069563.1.region001.gbk:md5,d41d8cd98f00b204e9800998ecf8427e", - "NZ_CP069563.1.region002.gbk:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "html": [ - [ - { - "id": "test" - }, - "index.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "html_accessory_files": [ - [ - { - "id": "test" - }, - [ - [ - "bacteria.css:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - "about.svg:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - "antismash.js:md5,d41d8cd98f00b204e9800998ecf8427e", - "jquery.js:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ] - ], - "json_results": [ - [ - { - "id": "test" - }, - "genome.json:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "json_sideloading": [ - [ - { - "id": "test" - }, - "regions.js:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "knownclusterblast_dir": [ - - ], - "knownclusterblast_html": [ - - ], - "knownclusterblast_txt": [ - - ], - "knownclusterblastoutput": [ - - ], - "log": [ - [ - { - "id": "test" - }, - "test.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "svg_files_clusterblast": [ - - ], - "svg_files_knownclusterblast": [ - - ], - "versions": [ - "versions.yml:md5,2a1c54c017741b59c057a05453fc067d" - ], - "zip": [ - [ - { - "id": "test" - }, - "genome.zip:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-07-11T16:35:51.079804" + "timestamp": "2025-01-30T14:47:32.466485783" } } \ No newline at end of file diff --git a/modules/nf-core/antismash/antismashlite/tests/nextflow.config b/modules/nf-core/antismash/antismashlite/tests/nextflow.config new file mode 100644 index 00000000..eedb39ae --- /dev/null +++ b/modules/nf-core/antismash/antismashlite/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: ANTISMASH_ANTISMASHLITE { + memory = 7.GB + } +} diff --git a/modules/nf-core/antismash/antismashlitedownloaddatabases/main.nf b/modules/nf-core/antismash/antismashlitedownloaddatabases/main.nf index e63f20d2..52452dc2 100644 --- a/modules/nf-core/antismash/antismashlitedownloaddatabases/main.nf +++ b/modules/nf-core/antismash/antismashlitedownloaddatabases/main.nf @@ -2,9 +2,9 @@ process ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES { label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/antismash-lite:7.1.0--pyhdfd78af_0' : - 'biocontainers/antismash-lite:7.1.0--pyhdfd78af_0' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://depot.galaxyproject.org/singularity/antismash-lite:7.1.0--pyhdfd78af_0' + : 'biocontainers/antismash-lite:7.1.0--pyhdfd78af_0'}" /* These files are normally downloaded/created by download-antismash-databases itself, and must be retrieved for input by manually running the command with conda or a standalone installation of antiSMASH. Therefore we do not recommend using this module for production pipelines, but rather require users to specify their own local copy of the antiSMASH database in pipelines. This is solely for use for CI tests of the nf-core/module version of antiSMASH. @@ -13,12 +13,12 @@ process ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES { */ containerOptions { - workflow.containerEngine == 'singularity' ? - "-B $database_css:/usr/local/lib/python3.10/site-packages/antismash/outputs/html/css,$database_detection:/usr/local/lib/python3.10/site-packages/antismash/detection,$database_modules:/usr/local/lib/python3.10/site-packages/antismash/modules" : - workflow.containerEngine == 'docker' ? - "-v \$PWD/$database_css:/usr/local/lib/python3.10/site-packages/antismash/outputs/html/css -v \$PWD/$database_detection:/usr/local/lib/python3.10/site-packages/antismash/detection -v \$PWD/$database_modules:/usr/local/lib/python3.10/site-packages/antismash/modules" : - '' - } + ['singularity', 'apptainer'].contains(workflow.containerEngine) + ? "-B ${database_css}:/usr/local/lib/python3.10/site-packages/antismash/outputs/html/css,${database_detection}:/usr/local/lib/python3.10/site-packages/antismash/detection,${database_modules}:/usr/local/lib/python3.10/site-packages/antismash/modules" + : workflow.containerEngine == 'docker' + ? "-v \$PWD/${database_css}:/usr/local/lib/python3.10/site-packages/antismash/outputs/html/css -v \$PWD/${database_detection}:/usr/local/lib/python3.10/site-packages/antismash/detection -v \$PWD/${database_modules}:/usr/local/lib/python3.10/site-packages/antismash/modules" + : '' + } input: path database_css @@ -26,8 +26,8 @@ process ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES { path database_modules output: - path("antismash_db") , emit: database - path("antismash_dir"), emit: antismash_dir + path ("antismash_db"), emit: database + path ("antismash_dir"), emit: antismash_dir path "versions.yml", emit: versions when: @@ -35,35 +35,34 @@ process ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES { script: def args = task.ext.args ?: '' - cp_cmd = ( session.config.conda && session.config.conda.enabled ) ? "cp -r \$(python -c 'import antismash;print(antismash.__file__.split(\"/__\")[0])') antismash_dir;" : "cp -r /usr/local/lib/python3.10/site-packages/antismash antismash_dir;" + cp_cmd = session.config.conda && session.config.conda.enabled ? "cp -r \$(python -c 'import antismash;print(antismash.__file__.split(\"/__\")[0])') antismash_dir;" : "cp -r /usr/local/lib/python3.10/site-packages/antismash antismash_dir;" """ download-antismash-databases \\ --database-dir antismash_db \\ - $args + ${args} - $cp_cmd + ${cp_cmd} cat <<-END_VERSIONS > versions.yml "${task.process}": - antismash-lite: \$(antismash --version | sed 's/antiSMASH //') + antismash-lite: \$(echo \$(antismash --version) | sed 's/antiSMASH //;s/-.*//g') END_VERSIONS """ stub: def args = task.ext.args ?: '' - cp_cmd = (session.config.conda && session.config.conda.enabled ) ? "cp -r \$(python -c 'import antismash;print(antismash.__file__.split(\"/__\")[0])') antismash_dir;" : "cp -r /usr/local/lib/python3.10/site-packages/antismash antismash_dir;" - def VERSION = '7.1.0' // WARN: Version information not provided by tool during stub run. Please update this string when bumping container versions. + cp_cmd = session.config.conda && session.config.conda.enabled ? "cp -r \$(python -c 'import antismash;print(antismash.__file__.split(\"/__\")[0])') antismash_dir;" : "cp -r /usr/local/lib/python3.10/site-packages/antismash antismash_dir;" """ - echo "download-antismash-databases --database-dir antismash_db $args" + echo "download-antismash-databases --database-dir antismash_db ${args}" - echo "$cp_cmd" + echo "${cp_cmd}" mkdir antismash_dir mkdir antismash_db cat <<-END_VERSIONS > versions.yml "${task.process}": - antismash-lite: $VERSION + antismash-lite: \$(echo \$(antismash --version) | sed 's/antiSMASH //;s/-.*//g') END_VERSIONS """ } diff --git a/modules/nf-core/antismash/antismashlitedownloaddatabases/tests/main.nf.test b/modules/nf-core/antismash/antismashlitedownloaddatabases/tests/main.nf.test index 55f5f2f5..72e5d7dd 100644 --- a/modules/nf-core/antismash/antismashlitedownloaddatabases/tests/main.nf.test +++ b/modules/nf-core/antismash/antismashlitedownloaddatabases/tests/main.nf.test @@ -3,6 +3,7 @@ nextflow_process { name "Test Process ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES" script "../main.nf" process "ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES" + config './nextflow.config' tag "modules" tag "modules_nfcore" @@ -64,10 +65,12 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot ( + { assert snapshot( file(process.out.database.get(0)).list().sort(), - process.out.versions, - ).match() } + path(process.out.versions[0]).yaml, + file(process.out.versions[0]).name, + ).match() + } ) } } @@ -128,7 +131,11 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + file(process.out.database.get(0)).list().sort(), + file(process.out.versions[0]).name, + ).match() + } ) } } diff --git a/modules/nf-core/antismash/antismashlitedownloaddatabases/tests/main.nf.test.snap b/modules/nf-core/antismash/antismashlitedownloaddatabases/tests/main.nf.test.snap index 21ee9d41..04f98af8 100644 --- a/modules/nf-core/antismash/antismashlitedownloaddatabases/tests/main.nf.test.snap +++ b/modules/nf-core/antismash/antismashlitedownloaddatabases/tests/main.nf.test.snap @@ -1,40 +1,16 @@ { "antiSMASH-lite downloaddatabases - stub": { "content": [ - { - "0": [ - [ - - ] - ], - "1": [ - [ - - ] - ], - "2": [ - "versions.yml:md5,9eccc775a12d25ca5dfe334e8874f12a" - ], - "antismash_dir": [ - [ - - ] - ], - "database": [ - [ - - ] - ], - "versions": [ - "versions.yml:md5,9eccc775a12d25ca5dfe334e8874f12a" - ] - } + [ + + ], + "versions.yml" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-07-12T13:41:29.456143" + "timestamp": "2025-01-30T13:47:43.854140981" }, "antiSMASH-lite downloaddatabases": { "content": [ @@ -49,14 +25,17 @@ "resfam", "tigrfam" ], - [ - "versions.yml:md5,9eccc775a12d25ca5dfe334e8874f12a" - ] + { + "ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES": { + "antismash-lite": "7.1.0" + } + }, + "versions.yml" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.3" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-07-12T13:41:08.116244" + "timestamp": "2025-01-30T13:57:10.845020955" } } \ No newline at end of file diff --git a/modules/nf-core/antismash/antismashlitedownloaddatabases/tests/nextflow.config b/modules/nf-core/antismash/antismashlitedownloaddatabases/tests/nextflow.config new file mode 100644 index 00000000..972dd7b0 --- /dev/null +++ b/modules/nf-core/antismash/antismashlitedownloaddatabases/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES { + memory = 7.GB + } +} From 0f86e9eb9c6993726e1a184bca6a508cf455f3d3 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Fri, 31 Jan 2025 16:07:44 +0100 Subject: [PATCH 120/175] Add `--annotation_pyrodigal_stopcodon` parameter --- CHANGELOG.md | 1 + conf/modules.config | 1 + nextflow.config | 1 + nextflow_schema.json | 7 +++++++ 4 files changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 293470cf..07ed99bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#435](https://github.com/nf-core/funcscan/pull/435) Fixed dependency errors within taxonomy merging scripts, updated the code and output for all three workflows. Bumped to version 0.1.1. (by @darcy220606) - [#437](https://github.com/nf-core/funcscan/pull/437) Fixed file name error when supplying already preprocessed CARD database for ARG workflow. (by @jasmezz) - [#446](https://github.com/nf-core/funcscan/pull/446) Updated antiSMASH modules to fix apptainer execution. (by @jasmezz and @jfy133) +- [#447](https://github.com/nf-core/funcscan/pull/447) Added `--annotation_pyrodigal_stopcodon` parameter to improve AMPlify screening. (by @jasmezz) ### `Dependencies` diff --git a/conf/modules.config b/conf/modules.config index 5684b042..a43a8c8d 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -201,6 +201,7 @@ process { params.annotation_pyrodigal_singlemode ? "-p single" : "-p meta", params.annotation_pyrodigal_closed ? "-c" : "", params.annotation_pyrodigal_forcenonsd ? "-n" : "", + params.annotation_pyrodigal_nostopcodon ? '--no-stop-codon' : '', "-g ${params.annotation_pyrodigal_transtable}", ].join(' ').trim() } diff --git a/nextflow.config b/nextflow.config index 12283ffd..ad1a868b 100644 --- a/nextflow.config +++ b/nextflow.config @@ -66,6 +66,7 @@ params { annotation_pyrodigal_closed = false annotation_pyrodigal_transtable = 11 annotation_pyrodigal_forcenonsd = false + annotation_pyrodigal_stopcodon = false annotation_bakta_db = null annotation_bakta_db_downloadtype = 'full' diff --git a/nextflow_schema.json b/nextflow_schema.json index 46323109..e5119921 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -518,6 +518,13 @@ "fa_icon": "fas fa-barcode", "description": "Forces Pyrodigal to scan for motifs.", "help_text": "Forces Pyrodigal to a full scan for motifs rather than activating the Shine-Dalgarno RBS finder, the default scanner for Pyrodigal to train for motifs.\n\nFor more information check the Pyrodigal [documentation](https://pyrodigal.readthedocs.io).\n\n> Modifies tool parameter(s):\n> - PYRODIGAL: `-n`" + }, + "annotation_pyrodigal_stopcodon": { + "type": "boolean", + "fa_icon": "fa fa-star-of-life", + "description": "This forces Pyrodigal to append asterisks (`*`) as stop codon indicators.", + "help_text": "Some downstream tools like AMPlify cannot process sequences containing non-sequence characters like the stop codon indicator `*`. Thus, this flag is deactivated by default. Activate this flag to revert the behaviour and have Pyrodigal append `*` as stop codon indicator to annotated sequences.\n\nFor more information check the Pyrodigal [documentation](https://pyrodigal.readthedocs.io).\n\n> Modifies tool parameter(s):\n> - PYRODIGAL: `--no-stop-codon`", + "default": false } }, "fa_icon": "fas fa-file-signature" From e76b0b43a74231264761611ee7a0238c822d2d0c Mon Sep 17 00:00:00 2001 From: Jasmin Frangenberg <73216762+jasmezz@users.noreply.github.com> Date: Fri, 31 Jan 2025 17:49:13 +0100 Subject: [PATCH 121/175] Fix modules.config --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index a43a8c8d..e5f81e3c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -201,7 +201,7 @@ process { params.annotation_pyrodigal_singlemode ? "-p single" : "-p meta", params.annotation_pyrodigal_closed ? "-c" : "", params.annotation_pyrodigal_forcenonsd ? "-n" : "", - params.annotation_pyrodigal_nostopcodon ? '--no-stop-codon' : '', + params.annotation_pyrodigal_stopcodon ? '--no-stop-codon' : '', "-g ${params.annotation_pyrodigal_transtable}", ].join(' ').trim() } From 804da18bd7dd2f0229f7da81516036aabb38d011 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Sun, 2 Feb 2025 15:24:03 +0100 Subject: [PATCH 122/175] fix code review -docs --- docs/output.md | 4 ++-- docs/usage.md | 22 +++++++++++++++++----- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/docs/output.md b/docs/output.md index 06ce1068..8f5297de 100644 --- a/docs/output.md +++ b/docs/output.md @@ -232,7 +232,7 @@ Output Summaries: Output files - `interproscan/` - - `_cleaned.faa`: clean version of the fasta files (in amino acid format) generated by one of the annotation tools (i.e. Pyrodigal, Prokka, Bakta or Prokke). These contain sequences with no special characters (for eg. '\*' or '-'). + - `_cleaned.faa`: clean version of the fasta files (in amino acid format) generated by one of the annotation tools (i.e. Pyrodigal, Prokka, Bakta). These contain sequences with no special characters (for eg. '\*' or '-'). - `_interproscan_faa.tsv`: predicted proteins and domains using the InterPro database in TSV format
    @@ -490,7 +490,7 @@ Note that filtered FASTA is only used for BGC workflow for run-time optimisation - `/*_mmseqs_matches.txt*`: alignment file generated by MMseqs2 for each sample :::info -In some cases, when the AMP workflow is turned on, only summary files per sample will be created in the output folder with **NO** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster.tsv` files and hence no taxonomic classifications will be merged (if the taxonomic classification subworkflow is turned on). This can occur when strictly setting parameters which can lead to no AMP hits found in any of the samples or in only one sample. Look out for `[nf-core/funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.`in the stdout or `.nextflow.log` file. +In some cases when the AMP and the taxonomic classification subworkflows are turned on, it can happen that only summary files per sample are created in the output folder with **NO** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster.tsv` files with no taxonomic classifications merged. This can occur if some AMP parameters are 'too strict' or only one AMP tool is run, which can lead to no AMP hits found in any of the samples or in only one sample. Look out for `[nf-core/funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.`in the stdout or `.nextflow.log` file. In that case we recommend to lower the amp threshold and run more than one AMP prediction tool. ::: AMP summary table header descriptions using DRAMP as reference database diff --git a/docs/usage.md b/docs/usage.md index d8d5e0ad..380c09e1 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -135,7 +135,9 @@ MMseqs2 is currently the only taxonomic classification tool used in the pipeline ### InterProScan -[InterProScan](https://github.com/ebi-pf-team/interproscan) is currently the only protein annotation tool that gives a snapshot of the protein families and domains for each coding region. By giving `--run_protein_annotation_interproscan`, the [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/) v5.67-99.0 is by default downloaded and prepared and the input sequences will be screened against the database. You can skip database downloading by the pipeline on each run by manually downloading and extracting the files from any [InterPro version](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/) and giving the resulting directory path to `--protein_annotation_interproscan_db`. +[InterProScan](https://github.com/ebi-pf-team/interproscan) is currently the only protein annotation tool that gives a snapshot of the protein families and domains for each coding region. +By giving `--run_protein_annotation_interproscan`, the [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/) v5.67-99.0 is by default downloaded and prepared and the input sequences will be screened against the database. +You can skip database downloading by the pipeline on each run by manually downloading and extracting the files from any [InterPro version](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/) and giving the resulting directory path to `--protein_annotation_interproscan_db`. ```bash --function_interproscan_db 'path/to/InterPro_directory/' @@ -273,8 +275,18 @@ This is due to an incompatibility issue of Prodigal's output `.gbk` file with mu :::tip - If `--run_protein_annotation_interproscan` is given, protein and domain classifications of the coding regions are generated and the output is then integrated into the `AMPcombi parsetables` resulting table for every sample and the complete summary files e.g., `Ampcombi_summary.tsv`. -- In some cases, when the AMP workflow is turned on, only the summary files per sample will be created in the output folder with **NO** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster.tsv` files and hence no taxonomic classifications will be merged (if the taxonomic classification subworkflow is turned on). This can occur when strictly setting parameters which can lead to no AMP hits found in any of the samples or in only one sample. Look out for `[nf-core/funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.`in the stdout or `.nextflow.log` file. - ::: + +- In some cases when the AMP and the taxonomic classification subworkflows are +turned on, it can happen that only summary files per sample are created in the +output folder with **NO** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster. +tsv` files with no taxonomic classifications merged. This can occur if some AMP +parameters are 'too strict' or only one AMP tool is run, which can lead to no AMP +hits found in any of the samples or in only one sample. Look out for `[nf-core/ +funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, +AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.`in the stdout or `.nextflow.log` +file. In that case we recommend to lower the amp threshold and run more than one +AMP prediction tool. +::: ### Abricate @@ -519,7 +531,7 @@ The contents of the database directory should include directories such as `commo ```console deepbgc_db/ ├── common - └── Pfam-hmm-models*.hmm.* +A diifferent version of the database can be supplied to the pipeline by passing the InterProScan database directory to `--protein_annotation_interproscan_db path/to/interproscan_db/`. The directory can be created following with: └── [0.1.0] ├── classifier | └── myClassifiers*.pkl @@ -531,7 +543,7 @@ deepbgc_db/ [InterProScan](https://github.com/ebi-pf-team/interproscan) is used to provide more information about the proteins annotated on the contigs. By default, turning on this subworkflow with `--run_protein_annotation_interproscan` will download and unzip the (as of now) latest [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/) v5.67-99.0. The database downloaded can be saved in the output directory `/databases/interproscan/*` if the `--save_db` is turned on. Note: the download can take upto 4 hours depending on teh bandwidth. -A diifferent version of the database can be supplied to teh pipeline ba passing the InterProScan database directory to `--protein_annotation_interproscan_db path/to/interproscan_db/`. The directory can be created following with: +A different version of the database can be supplied to the pipeline by passing the InterProScan database directory to `--protein_annotation_interproscan_db path/to/downloaded-untarred-interproscan_db-dir/`. The directory can be created following: ``` curl -L https://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz -o interproscan_db/interproscan-5.67-99.0-64-bit.tar.gz From f88fe9c266efdebd510fbe091cd50f5ba0c79e14 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Sun, 2 Feb 2025 15:45:08 +0100 Subject: [PATCH 123/175] fix prettier --- CHANGELOG.md | 18 +++++++++--------- docs/usage.md | 14 +++++++------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 86c93e36..2ae98c0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,16 +28,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Dependencies` ======= -| Tool | Previous version | New version | +| Tool | Previous version | New version | | ------------ | ---------------- | ----------- | -| AMPcombi | 0.2.2 | 2.0.1 | -| Bakta | 1.9.3 | 1.10.4 | -| InterProScan | - | 5.59_91.0 | -| Macrel | 1.2.0 | 1.4.0 | -| MMseqs2 | 15.6f452 | 17.b804f | -| MultiQC | 1.24.0 | 1.27 | -| Pyrodigal | 3.3.0 | 3.6.3 | -| seqkit | 2.8.1 | 2.9.0 | +| AMPcombi | 0.2.2 | 2.0.1 | +| Bakta | 1.9.3 | 1.10.4 | +| InterProScan | - | 5.59_91.0 | +| Macrel | 1.2.0 | 1.4.0 | +| MMseqs2 | 15.6f452 | 17.b804f | +| MultiQC | 1.24.0 | 1.27 | +| Pyrodigal | 3.3.0 | 3.6.3 | +| seqkit | 2.8.1 | 2.9.0 | ### `Deprecated` diff --git a/docs/usage.md b/docs/usage.md index db513893..89a95bb9 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -275,16 +275,16 @@ This is due to an incompatibility issue of Prodigal's output `.gbk` file with mu - If `--run_protein_annotation_interproscan` is given, protein and domain classifications of the coding regions are generated and the output is then integrated into the `AMPcombi parsetables` resulting table for every sample and the complete summary files e.g., `Ampcombi_summary.tsv`. - In some cases when the AMP and the taxonomic classification subworkflows are -turned on, it can happen that only summary files per sample are created in the -output folder with **NO** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster. + turned on, it can happen that only summary files per sample are created in the + output folder with **NO** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster. tsv` files with no taxonomic classifications merged. This can occur if some AMP -parameters are 'too strict' or only one AMP tool is run, which can lead to no AMP -hits found in any of the samples or in only one sample. Look out for `[nf-core/ + parameters are 'too strict' or only one AMP tool is run, which can lead to no AMP + hits found in any of the samples or in only one sample. Look out for `[nf-core/ funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.`in the stdout or `.nextflow.log` -file. In that case we recommend to lower the amp threshold and run more than one -AMP prediction tool. -::: + file. In that case we recommend to lower the amp threshold and run more than one + AMP prediction tool. + ::: ### Abricate From 5d1f4b74198d1d8db33fc14f63edae975aa04bdd Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Sun, 2 Feb 2025 18:33:04 +0100 Subject: [PATCH 124/175] Fix code review --- conf/modules.config | 4 +- docs/usage.md | 8 ++-- nextflow.config | 3 +- nextflow_schema.json | 13 +++++-- subworkflows/local/amp.nf | 2 +- subworkflows/local/protein_annotation.nf | 49 +++++++++++++----------- workflows/funcscan.nf | 2 +- 7 files changed, 47 insertions(+), 34 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 80ad3564..0a88cfc9 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -109,7 +109,7 @@ process { publishDir = [ path: { "${params.outdir}/protein_annotation/interproscan/" }, mode: params.publish_dir_mode, - enabled: { params.run_protein_annotation_interproscan }, + enabled: { params.run_protein_annotation }, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] ext.args = [ @@ -131,7 +131,7 @@ process { publishDir = [ path: { "${params.outdir}/protein_annotation/interproscan/" }, mode: params.publish_dir_mode, - enabled: params.run_protein_annotation_interproscan, + enabled: params.run_protein_annotation, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] ext.args = [ diff --git a/docs/usage.md b/docs/usage.md index 89a95bb9..232846f3 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -134,7 +134,9 @@ MMseqs2 is currently the only taxonomic classification tool used in the pipeline ### InterProScan [InterProScan](https://github.com/ebi-pf-team/interproscan) is currently the only protein annotation tool that gives a snapshot of the protein families and domains for each coding region. -By giving `--run_protein_annotation_interproscan`, the [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/) v5.67-99.0 is by default downloaded and prepared and the input sequences will be screened against the database. + +By giving `--run_protein_annotation` the `--protein_annotation_tool InterProScan` is activated by default and the [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/) v5.67-99.0 is by default downloaded and prepared and the input sequences will be screened against the database. + You can skip database downloading by the pipeline on each run by manually downloading and extracting the files from any [InterPro version](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/) and giving the resulting directory path to `--protein_annotation_interproscan_db`. ```bash @@ -272,7 +274,7 @@ This is due to an incompatibility issue of Prodigal's output `.gbk` file with mu :::tip -- If `--run_protein_annotation_interproscan` is given, protein and domain classifications of the coding regions are generated and the output is then integrated into the `AMPcombi parsetables` resulting table for every sample and the complete summary files e.g., `Ampcombi_summary.tsv`. +- If `--run_protein_annotation` is given, protein and domain classifications of the coding regions are generated and the output is then integrated into the `AMPcombi parsetables` resulting table for every sample and the complete summary files e.g., `Ampcombi_summary.tsv`. - In some cases when the AMP and the taxonomic classification subworkflows are turned on, it can happen that only summary files per sample are created in the @@ -539,7 +541,7 @@ A diifferent version of the database can be supplied to the pipeline by passing ### InterProScan -[InterProScan](https://github.com/ebi-pf-team/interproscan) is used to provide more information about the proteins annotated on the contigs. By default, turning on this subworkflow with `--run_protein_annotation_interproscan` will download and unzip the (as of now) latest [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/) v5.67-99.0. The database downloaded can be saved in the output directory `/databases/interproscan/*` if the `--save_db` is turned on. Note: the download can take upto 4 hours depending on teh bandwidth. +[InterProScan](https://github.com/ebi-pf-team/interproscan) is used to provide more information about the proteins annotated on the contigs. By default, turning on this subworkflow with `--run_protein_annotation` and `--protein_annotation_tool InterProScan` will download and unzip the (as of now) latest [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/) v5.67-99.0. The database downloaded can be saved in the output directory `/databases/interproscan/*` if the `--save_db` is turned on. Note: the download can take upto 4 hours depending on teh bandwidth. A different version of the database can be supplied to the pipeline by passing the InterProScan database directory to `--protein_annotation_interproscan_db path/to/downloaded-untarred-interproscan_db-dir/`. The directory can be created following: diff --git a/nextflow.config b/nextflow.config index 7806ca77..14dbf9e1 100644 --- a/nextflow.config +++ b/nextflow.config @@ -104,7 +104,8 @@ params { annotation_prokka_retaincontigheaders = false // Protein_annotation options - run_protein_annotation_interproscan = false + run_protein_annotation = false + protein_annotation_tool = 'InterProScan' protein_annotation_interproscan_db = null protein_annotation_interproscan_db_url = 'http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz' protein_annotation_interproscan_applications = 'PANTHER,ProSiteProfiles,ProSitePatterns,Pfam' diff --git a/nextflow_schema.json b/nextflow_schema.json index bf6385f7..dba60bbc 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -528,10 +528,17 @@ "description": "Functionally annotates all annotated coding regions.", "default": "", "properties": { - "run_protein_annotation_interproscan": { + "run_protein_annotation": { "type": "boolean", - "description": "Activates the functional annotation of annotated coding regions.", - "help_text": "Activates the annotation of annotated coding regions using [InterProScan](https://github.com/ebi-pf-team/interproscan). These annotate the locus tags to protein and domain levels according to the InterPro database. \n\nMore details can be found in the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/index.html)." + "description": "Activates the functional annotation of annotated coding regions to provide more information about the codon regions classified.", + "help_text": "Activates the annotation of annotated coding regions. " + }, + "protein_annotation_tool": { + "type": "string", + "default": "InterProScan", + "help_text": "This flag specifies which tool for protein annotation should be activated. \nAt the moment only [InterProScan](https://github.com/ebi-pf-team/interproscan) is incorporated in the pipeline. This annotates the locus tags to protein and domain levels according to the InterPro databases. \n\nMore details can be found in the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/index.html).", + "description": "Specifies the tool used for further protein annotation.", + "fa_icon": "fas fa-tools" }, "protein_annotation_interproscan_db_url": { "type": "string", diff --git a/subworkflows/local/amp.nf b/subworkflows/local/amp.nf index 7bab1f57..03379505 100644 --- a/subworkflows/local/amp.nf +++ b/subworkflows/local/amp.nf @@ -126,7 +126,7 @@ workflow AMP { ch_ampcombi_summaries = AMPCOMBI2_PARSETABLES.out.tsv.map{ it[1] }.collect() - // AMPCOMBI2::PARSETABLES + // AMPCOMBI2::COMPLETE ch_summary_count = ch_ampcombi_summaries.map { it.size() }.sum() if ( ch_summary_count == 0 || ch_summary_count == 1 ) { diff --git a/subworkflows/local/protein_annotation.nf b/subworkflows/local/protein_annotation.nf index d8189343..b669fa0f 100644 --- a/subworkflows/local/protein_annotation.nf +++ b/subworkflows/local/protein_annotation.nf @@ -17,34 +17,37 @@ workflow PROTEIN_ANNOTATION { ch_faa_for_interproscan = faas - if ( params.protein_annotation_interproscan_db != null ) { - ch_interproscan_db = Channel - .fromPath( params.protein_annotation_interproscan_db ) - .first() - } else { - INTERPROSCAN_DATABASE ( params.protein_annotation_interproscan_db_url ) - ch_versions = ch_versions.mix( INTERPROSCAN_DATABASE.out.versions ) - ch_interproscan_db = ( INTERPROSCAN_DATABASE.out.db ) - } + if ( params.protein_annotation_tool == 'InterProScan') { + + if ( params.protein_annotation_interproscan_db != null ) { + ch_interproscan_db = Channel + .fromPath( params.protein_annotation_interproscan_db ) + .first() + } else { + INTERPROSCAN_DATABASE ( params.protein_annotation_interproscan_db_url ) + ch_versions = ch_versions.mix( INTERPROSCAN_DATABASE.out.versions ) + ch_interproscan_db = ( INTERPROSCAN_DATABASE.out.db ) + } - INTERPROSCAN( ch_faa_for_interproscan, ch_interproscan_db ) - ch_versions = ch_versions.mix( INTERPROSCAN.out.versions ) - ch_interproscan_tsv = ch_interproscan_tsv.mix( INTERPROSCAN.out.tsv ) + INTERPROSCAN( ch_faa_for_interproscan, ch_interproscan_db ) + ch_versions = ch_versions.mix( INTERPROSCAN.out.versions ) + ch_interproscan_tsv = ch_interproscan_tsv.mix( INTERPROSCAN.out.tsv ) - // Current INTERPROSCAN version 5.59_91.0 only includes 13 columns and not 15 which ampcombi expects, so we added them here - ch_interproscan_tsv_modified = INTERPROSCAN.out.tsv - .map { meta, tsv_path -> - def modified_tsv_path = "${workflow.workDir}/tmp/${meta.id}_interproscan.faa.tsv" + // Current INTERPROSCAN version 5.59_91.0 only includes 13 columns and not 15 which ampcombi expects, so we added them here + ch_interproscan_tsv_modified = INTERPROSCAN.out.tsv + .map { meta, tsv_path -> + def modified_tsv_path = "${workflow.workDir}/tmp/${meta.id}_interproscan.faa.tsv" - def modified_tsv_content = new File(tsv_path.toString()) - .readLines() - .collect { line -> (line.split('\t') + ['NA', 'NA']).join('\t') } + def modified_tsv_content = new File(tsv_path.toString()) + .readLines() + .collect { line -> (line.split('\t') + ['NA', 'NA']).join('\t') } - new File(modified_tsv_path).text = modified_tsv_content.join('\n') - [meta, file(modified_tsv_path)] - } + new File(modified_tsv_path).text = modified_tsv_content.join('\n') + [meta, file(modified_tsv_path)] + } - ch_versions = ch_versions.mix(INTERPROSCAN.out.versions) + ch_versions = ch_versions.mix(INTERPROSCAN.out.versions) + } emit: versions = ch_versions diff --git a/workflows/funcscan.nf b/workflows/funcscan.nf index 09b74703..54136cd3 100644 --- a/workflows/funcscan.nf +++ b/workflows/funcscan.nf @@ -179,7 +179,7 @@ workflow FUNCSCAN { /* PROTEIN ANNOTATION */ - if (params.run_protein_annotation_interproscan) { + if (params.run_protein_annotation) { def filtered_faas = ch_prepped_input.faas.filter { meta, file -> if (file != [] && file.isEmpty()) { log.warn("[nf-core/funcscan] Annotation of the following sample produced an empty FAA file. InterProScan classification of the CDS requiring this file will not be executed: ${meta.id}") From 3f3787fc3e645304909d52d4b66f1cf6be4be478 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Sun, 2 Feb 2025 19:51:34 +0100 Subject: [PATCH 125/175] fix createtsv output merging --- bin/merge_taxonomy.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/bin/merge_taxonomy.py b/bin/merge_taxonomy.py index d202bcbf..3457d896 100755 --- a/bin/merge_taxonomy.py +++ b/bin/merge_taxonomy.py @@ -68,6 +68,8 @@ def reformat_mmseqs_taxonomy(mmseqs_taxonomy): """_summary_ Reformats the taxonomy files and joins them in a list to be passed on to the tools functions + Note: Every database from MMseqs outputs a different number of columns only the first 4 and last 2 columns are constant + and the most important. Args: mmseqs_taxonomy (tsv): mmseqs output file per sample @@ -75,9 +77,14 @@ def reformat_mmseqs_taxonomy(mmseqs_taxonomy): Returns: data frame: reformatted tables """ - mmseqs2_df = pd.read_csv(mmseqs_taxonomy, sep='\t', header=None, names=['contig_id', 'taxid', 'rank_label', 'scientific_name', 'lineage', 'mmseqs_lineage_contig']) + col_numbers = pd.read_csv(mmseqs_taxonomy, sep='\t', header=None, nrows=1).shape[1] + selected_cols_numbers = [0, 1, 2, 3, col_numbers - 1] + mmseqs2_df = pd.read_csv(mmseqs_taxonomy, + sep='\t', + header=None, + usecols= selected_cols_numbers, + names=['contig_id', 'taxid', 'rank_label', 'scientific_name', 'mmseqs_lineage_contig']) # remove the lineage column - mmseqs2_df.drop('lineage', axis=1, inplace=True) mmseqs2_df['mmseqs_lineage_contig'].unique() # convert any classification that has Eukaryota/root to NaN as funcscan targets bacteria ONLY ** for i, row in mmseqs2_df.iterrows(): From a1373c1a311feb00c501d73c6c53e4dafa48e3b5 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Sun, 2 Feb 2025 20:59:18 +0100 Subject: [PATCH 126/175] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 293470cf..4b828a8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#435](https://github.com/nf-core/funcscan/pull/435) Fixed dependency errors within taxonomy merging scripts, updated the code and output for all three workflows. Bumped to version 0.1.1. (by @darcy220606) - [#437](https://github.com/nf-core/funcscan/pull/437) Fixed file name error when supplying already preprocessed CARD database for ARG workflow. (by @jasmezz) - [#446](https://github.com/nf-core/funcscan/pull/446) Updated antiSMASH modules to fix apptainer execution. (by @jasmezz and @jfy133) +- [#448] (https://github.com/nf-core/funcscan/pull/448) Fixed taxonomy merge to work with output from GTDB/SILVA/KALAMARI. (by @darcy220606) ### `Dependencies` From 894ddebfd866bacbd2d559f46b670f7926918757 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Mon, 3 Feb 2025 12:37:54 +0100 Subject: [PATCH 127/175] Fix logic of "stopcodon" param --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index e5f81e3c..3f4d2932 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -201,7 +201,7 @@ process { params.annotation_pyrodigal_singlemode ? "-p single" : "-p meta", params.annotation_pyrodigal_closed ? "-c" : "", params.annotation_pyrodigal_forcenonsd ? "-n" : "", - params.annotation_pyrodigal_stopcodon ? '--no-stop-codon' : '', + params.annotation_pyrodigal_stopcodon ? '' : '--no-stop-codon', "-g ${params.annotation_pyrodigal_transtable}", ].join(' ').trim() } From 6a7a79dabdf7ab454099c46433359ebaecd25bba Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Tue, 4 Feb 2025 09:34:48 +0100 Subject: [PATCH 128/175] Apply suggestions from code review --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b828a8e..005fc005 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,7 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#435](https://github.com/nf-core/funcscan/pull/435) Fixed dependency errors within taxonomy merging scripts, updated the code and output for all three workflows. Bumped to version 0.1.1. (by @darcy220606) - [#437](https://github.com/nf-core/funcscan/pull/437) Fixed file name error when supplying already preprocessed CARD database for ARG workflow. (by @jasmezz) - [#446](https://github.com/nf-core/funcscan/pull/446) Updated antiSMASH modules to fix apptainer execution. (by @jasmezz and @jfy133) -- [#448] (https://github.com/nf-core/funcscan/pull/448) Fixed taxonomy merge to work with output from GTDB/SILVA/KALAMARI. (by @darcy220606) +- [#448](https://github.com/nf-core/funcscan/pull/448) Fixed taxonomy merge to work with output from GTDB/SILVA/KALAMARI. (by @darcy220606) ### `Dependencies` From ad0c3ba1225f712d981f3efa4777e97dd595246f Mon Sep 17 00:00:00 2001 From: Anan Ibrahim <81744003+Darcy220606@users.noreply.github.com> Date: Tue, 4 Feb 2025 14:37:35 +0100 Subject: [PATCH 129/175] Update bin/merge_taxonomy.py Co-authored-by: Jasmin Frangenberg <73216762+jasmezz@users.noreply.github.com> --- bin/merge_taxonomy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/merge_taxonomy.py b/bin/merge_taxonomy.py index 3457d896..77a0efe0 100755 --- a/bin/merge_taxonomy.py +++ b/bin/merge_taxonomy.py @@ -68,7 +68,7 @@ def reformat_mmseqs_taxonomy(mmseqs_taxonomy): """_summary_ Reformats the taxonomy files and joins them in a list to be passed on to the tools functions - Note: Every database from MMseqs outputs a different number of columns only the first 4 and last 2 columns are constant + Note: Every database from MMseqs outputs a different number of columns. Only the first 4 and last 2 columns are constant and the most important. Args: From ac181caebea53bb5ce47398f038baced894c6f0c Mon Sep 17 00:00:00 2001 From: Anan Ibrahim <81744003+Darcy220606@users.noreply.github.com> Date: Tue, 4 Feb 2025 14:37:49 +0100 Subject: [PATCH 130/175] Update bin/merge_taxonomy.py Co-authored-by: Jasmin Frangenberg <73216762+jasmezz@users.noreply.github.com> --- bin/merge_taxonomy.py | 1 - 1 file changed, 1 deletion(-) diff --git a/bin/merge_taxonomy.py b/bin/merge_taxonomy.py index 77a0efe0..ef54e1c2 100755 --- a/bin/merge_taxonomy.py +++ b/bin/merge_taxonomy.py @@ -84,7 +84,6 @@ def reformat_mmseqs_taxonomy(mmseqs_taxonomy): header=None, usecols= selected_cols_numbers, names=['contig_id', 'taxid', 'rank_label', 'scientific_name', 'mmseqs_lineage_contig']) - # remove the lineage column mmseqs2_df['mmseqs_lineage_contig'].unique() # convert any classification that has Eukaryota/root to NaN as funcscan targets bacteria ONLY ** for i, row in mmseqs2_df.iterrows(): From dbe492f5056c9326cbcf09019d4a475a7475f3ec Mon Sep 17 00:00:00 2001 From: jasmezz Date: Tue, 4 Feb 2025 17:15:45 +0100 Subject: [PATCH 131/175] Fix failing snapshots --- tests/test.nf.test.snap | 2 +- tests/test_preannotated.nf.test.snap | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test.nf.test.snap b/tests/test.nf.test.snap index c09747ac..d312a612 100644 --- a/tests/test.nf.test.snap +++ b/tests/test.nf.test.snap @@ -47,7 +47,7 @@ "deeparg_tsv_ARG": { "content": [ "sample_1.align.daa.tsv:md5,21822364379fe8f991d27cdb52a33d1d", - "sample_2.align.daa.tsv:md5,f448465df58785a87cdee53691a77bfe", + "sample_2.align.daa.tsv:md5,d59287f357de198639bdca5dbaede173", "sample_1.mapping.ARG:md5,0e049e99eab4c55666062df21707d5b9", "sample_2.mapping.ARG:md5,0e049e99eab4c55666062df21707d5b9" ], diff --git a/tests/test_preannotated.nf.test.snap b/tests/test_preannotated.nf.test.snap index 107b6e1c..de54e2ba 100644 --- a/tests/test_preannotated.nf.test.snap +++ b/tests/test_preannotated.nf.test.snap @@ -3,7 +3,7 @@ "content": [ "sample_1.align.daa.tsv:md5,0e71c37318bdc6cba792196d0455293d", "sample_2.align.daa.tsv:md5,1092ecd3cd6931653168b46c7afeb9e3", - "sample_3.align.daa.tsv:md5,b79070fe26acd1a10ae3aaf06b0d5901", + "sample_3.align.daa.tsv:md5,a9ed2f0651d75b318fde07a76b06d7b8", true, true, true @@ -71,8 +71,8 @@ "sample_1.potential.ARG.normalized.tsv:md5,d6732b4b9765bfa47e27ba673e24b6a4", "sample_2.ARG.normalized.tsv:md5,1a19b894a7315aaae5f799e4539e6619", "sample_2.potential.ARG.normalized.tsv:md5,b241e22f9116d8f518ba8526d52ac4dc", - "sample_3.ARG.normalized.tsv:md5,d40d387176649ce80827420fef6a0169", - "sample_3.potential.ARG.normalized.tsv:md5,f331efd21ea143c180a15ae56a5210d3" + "sample_3.ARG.normalized.tsv:md5,d7577c0066a31e173f9cb545820650bf", + "sample_3.potential.ARG.normalized.tsv:md5,6d0889215f0ad7f601502ca67c0ca89e" ], "meta": { "nf-test": "0.9.0", From 19aff23ff7099496bca0a134e6868bc6d1235402 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Wed, 5 Feb 2025 12:10:19 +0100 Subject: [PATCH 132/175] Apply suggestions from code review; fix linting warning (rocrate) --- CHANGELOG.md | 2 +- conf/modules.config | 2 +- nextflow.config | 2 +- nextflow_schema.json | 2 +- ro-crate-metadata.json | 76 ++++++++++++++++++++++++++++++++++-------- 5 files changed, 66 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e9e401c7..abafaa47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,7 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#437](https://github.com/nf-core/funcscan/pull/437) Fixed file name error when supplying already preprocessed CARD database for ARG workflow. (by @jasmezz) - [#446](https://github.com/nf-core/funcscan/pull/446) Updated antiSMASH modules to fix apptainer execution. (by @jasmezz and @jfy133) - [#448](https://github.com/nf-core/funcscan/pull/448) Fixed taxonomy merge to work with output from GTDB/SILVA/KALAMARI. (by @darcy220606) -- [#447](https://github.com/nf-core/funcscan/pull/447) Added `--annotation_pyrodigal_stopcodon` parameter to improve AMPlify screening. (by @jasmezz) +- [#447](https://github.com/nf-core/funcscan/pull/447) Added `--annotation_pyrodigal_usespecialstopcharacter` parameter to improve AMPlify screening. (by @jasmezz) ### `Dependencies` diff --git a/conf/modules.config b/conf/modules.config index 3f4d2932..a348da3c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -201,7 +201,7 @@ process { params.annotation_pyrodigal_singlemode ? "-p single" : "-p meta", params.annotation_pyrodigal_closed ? "-c" : "", params.annotation_pyrodigal_forcenonsd ? "-n" : "", - params.annotation_pyrodigal_stopcodon ? '' : '--no-stop-codon', + params.annotation_pyrodigal_usespecialstopcharacter ? '' : '--no-stop-codon', "-g ${params.annotation_pyrodigal_transtable}", ].join(' ').trim() } diff --git a/nextflow.config b/nextflow.config index ad1a868b..ae6b0038 100644 --- a/nextflow.config +++ b/nextflow.config @@ -66,7 +66,7 @@ params { annotation_pyrodigal_closed = false annotation_pyrodigal_transtable = 11 annotation_pyrodigal_forcenonsd = false - annotation_pyrodigal_stopcodon = false + annotation_pyrodigal_usespecialstopcharacter = false annotation_bakta_db = null annotation_bakta_db_downloadtype = 'full' diff --git a/nextflow_schema.json b/nextflow_schema.json index e5119921..fa55606a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -519,7 +519,7 @@ "description": "Forces Pyrodigal to scan for motifs.", "help_text": "Forces Pyrodigal to a full scan for motifs rather than activating the Shine-Dalgarno RBS finder, the default scanner for Pyrodigal to train for motifs.\n\nFor more information check the Pyrodigal [documentation](https://pyrodigal.readthedocs.io).\n\n> Modifies tool parameter(s):\n> - PYRODIGAL: `-n`" }, - "annotation_pyrodigal_stopcodon": { + "annotation_pyrodigal_usespecialstopcharacter": { "type": "boolean", "fa_icon": "fa fa-star-of-life", "description": "This forces Pyrodigal to append asterisks (`*`) as stop codon indicators.", diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 7f40a7cd..63577086 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,8 +22,8 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "InProgress", - "datePublished": "2025-01-27T14:45:55+00:00", - "description": "

    \n \n \n \"nf-core/funcscan\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/funcscan/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/funcscan/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/funcscan/results)[![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/nf-core/funcscan)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23funcscan-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/funcscan)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/funcscan** 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 nf-core/funcscan \\\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\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/funcscan/usage) and the [parameter documentation](https://nf-co.re/funcscan/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/funcscan/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/funcscan/output).\n\n## Credits\n\nnf-core/funcscan was originally written by Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James A. Fellows Yates.\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\nFor further information or help, don't hesitate to get in touch on the [Slack `#funcscan` channel](https://nfcore.slack.com/channels/funcscan) (you can join with [this invite](https://nf-co.re/join/slack)).\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\nYou can cite the `nf-core` publication as follows:\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-02-05T10:21:25+00:00", + "description": "

    \n \n \n \"nf-core/funcscan\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/funcscan/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/funcscan/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/funcscan/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.7643099-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.7643099)\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/nf-core/funcscan)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23funcscan-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/funcscan)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/funcscan** is a bioinformatics best-practice analysis pipeline for the screening of nucleotide sequences such as assembled contigs for functional genes. It currently features mining for antimicrobial peptides, antibiotic resistance genes and biosynthetic gene clusters.\n\nThe pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker/Singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules) in order to make them available to all nf-core pipelines, and to everyone within the Nextflow community!\n\nOn release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/funcscan/results).\n\nThe nf-core/funcscan AWS full test dataset are contigs generated by the MGnify service from the ENA. We used contigs generated from assemblies of chicken cecum shotgun metagenomes (study accession: MGYS00005631).\n\n## Pipeline summary\n\n1. Quality control of input sequences with [`SeqKit`](https://bioinf.shenwei.me/seqkit/)\n2. Taxonomic classification of contigs of **prokaryotic origin** with [`MMseqs2`](https://github.com/soedinglab/MMseqs2)\n3. Annotation of assembled prokaryotic contigs with [`Prodigal`](https://github.com/hyattpd/Prodigal), [`Pyrodigal`](https://github.com/althonos/pyrodigal), [`Prokka`](https://github.com/tseemann/prokka), or [`Bakta`](https://github.com/oschwengers/bakta)\n4. Screening contigs for antimicrobial peptide-like sequences with [`ampir`](https://cran.r-project.org/web/packages/ampir/index.html), [`Macrel`](https://github.com/BigDataBiology/macrel), [`HMMER`](http://hmmer.org/), [`AMPlify`](https://github.com/bcgsc/AMPlify)\n5. Screening contigs for antibiotic resistant gene-like sequences with [`ABRicate`](https://github.com/tseemann/abricate), [`AMRFinderPlus`](https://github.com/ncbi/amr), [`fARGene`](https://github.com/fannyhb/fargene), [`RGI`](https://card.mcmaster.ca/analyze/rgi), [`DeepARG`](https://bench.cs.vt.edu/deeparg). [`argNorm`](https://github.com/BigDataBiology/argNorm) is used to map the outputs of `DeepARG`, `AMRFinderPlus`, and `ABRicate` to the [`Antibiotic Resistance Ontology`](https://www.ebi.ac.uk/ols4/ontologies/aro) for consistent ARG classification terms.\n6. Screening contigs for biosynthetic gene cluster-like sequences with [`antiSMASH`](https://antismash.secondarymetabolites.org), [`DeepBGC`](https://github.com/Merck/deepbgc), [`GECCO`](https://gecco.embl.de/), [`HMMER`](http://hmmer.org/)\n7. Creating aggregated reports for all samples across the workflows with [`AMPcombi`](https://github.com/Darcy220606/AMPcombi) for AMPs, [`hAMRonization`](https://github.com/pha4ge/hAMRonization) for ARGs, and [`comBGC`](https://raw.githubusercontent.com/nf-core/funcscan/master/bin/comBGC.py) for BGCs\n8. Software version and methods text reporting with [`MultiQC`](http://multiqc.info/)\n\n![funcscan metro workflow](docs/images/funcscan_metro_workflow.png)\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`samplesheet.csv`:\n\n```csv\nsample,fasta\nCONTROL_REP1,AEG588A1_001.fasta\nCONTROL_REP2,AEG588A1_002.fasta\nCONTROL_REP3,AEG588A1_003.fasta\n```\n\nEach row represents a (multi-)fasta file of assembled contig sequences.\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/funcscan \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \\\n --run_amp_screening \\\n --run_arg_screening \\\n --run_bgc_screening\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\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/funcscan/usage) and the [parameter documentation](https://nf-co.re/funcscan/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/funcscan/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/funcscan/output).\n\n## Credits\n\nnf-core/funcscan was originally written by Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James A. Fellows Yates.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\nAdam Talbot, Alexandru Mizeranschi, Hugo Tavares, J\u00falia Mir Pedrol, Martin Klapper, Mehrdad Jaberi, Robert Syme, Rosa Herbst, Vedanth Ramji, @Microbion.\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#funcscan` channel](https://nfcore.slack.com/channels/funcscan) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/funcscan for your analysis, please cite it using the following doi: [10.5281/zenodo.7643099](https://doi.org/10.5281/zenodo.7643099)\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\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" @@ -31,6 +31,9 @@ { "@id": "assets/" }, + { + "@id": "bin/" + }, { "@id": "conf/" }, @@ -43,6 +46,9 @@ { "@id": "modules/" }, + { + "@id": "modules/local/" + }, { "@id": "modules/nf-core/" }, @@ -99,7 +105,7 @@ }, "mentions": [ { - "@id": "#a63ff768-a32a-4ee1-8ba3-fafeb18a6793" + "@id": "#1f9be113-27d3-4dcb-b12a-d0c1a16703bf" } ], "name": "nf-core/funcscan" @@ -121,14 +127,24 @@ }, { "@id": "main.nf", - "@type": ["File", "SoftwareSourceCode", "ComputationalWorkflow"], + "@type": [ + "File", + "SoftwareSourceCode", + "ComputationalWorkflow" + ], "creator": [ { "@id": "#jfy133@gmail.com" + }, + { + "@id": "#jfy133@gmail.com" + }, + { + "@id": "https://orcid.org/0009-0004-5961-4709" } ], "dateCreated": "", - "dateModified": "2025-01-27T14:45:55Z", + "dateModified": "2025-02-05T11:21:25Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -149,17 +165,33 @@ "screening", "secondary-metabolites" ], - "license": ["MIT"], - "name": ["nf-core/funcscan"], + "license": [ + "MIT" + ], + "maintainer": [ + { + "@id": "#jfy133@gmail.com" + }, + { + "@id": "https://orcid.org/0009-0004-5961-4709" + } + ], + "name": [ + "nf-core/funcscan" + ], "programmingLanguage": { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow" }, "sdPublisher": { "@id": "https://nf-co.re/" }, - "url": ["https://github.com/nf-core/funcscan", "https://nf-co.re/funcscan/dev/"], - "version": ["2.1.0dev"] - + "url": [ + "https://github.com/nf-core/funcscan", + "https://nf-co.re/funcscan/dev/" + ], + "version": [ + "2.1.0dev" + ] }, { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow", @@ -174,11 +206,11 @@ "version": "!>=24.04.2" }, { - "@id": "#a63ff768-a32a-4ee1-8ba3-fafeb18a6793", + "@id": "#1f9be113-27d3-4dcb-b12a-d0c1a16703bf", "@type": "TestSuite", "instance": [ { - "@id": "#f399a53f-20fc-47ed-b389-7e76797884bb" + "@id": "#e917d36b-75a7-45b5-86d1-e9157f00ac3b" } ], "mainEntity": { @@ -187,7 +219,7 @@ "name": "Test suite for nf-core/funcscan" }, { - "@id": "#f399a53f-20fc-47ed-b389-7e76797884bb", + "@id": "#e917d36b-75a7-45b5-86d1-e9157f00ac3b", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/funcscan", "resource": "repos/nf-core/funcscan/actions/workflows/ci.yml", @@ -209,6 +241,11 @@ "@type": "Dataset", "description": "Additional files" }, + { + "@id": "bin/", + "@type": "Dataset", + "description": "Scripts that must be callable from a pipeline process" + }, { "@id": "conf/", "@type": "Dataset", @@ -229,6 +266,11 @@ "@type": "Dataset", "description": "Modules used by the pipeline" }, + { + "@id": "modules/local/", + "@type": "Dataset", + "description": "Pipeline-specific modules" + }, { "@id": "modules/nf-core/", "@type": "Dataset", @@ -320,6 +362,12 @@ "@type": "Person", "email": "jfy133@gmail.com", "name": "James Fellows Yates" + }, + { + "@id": "https://orcid.org/0009-0004-5961-4709", + "@type": "Person", + "email": "73216762+jasmezz@users.noreply.github.com", + "name": "Jasmin Frangenberg" } ] -} +} \ No newline at end of file From a7e681d68bae1793640bb5d35c302b3606a37dbf Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Thu, 6 Feb 2025 07:51:24 +0100 Subject: [PATCH 133/175] Add Review issues in --- CHANGELOG.md | 19 ++++---- CITATIONS.md | 4 +- docs/output.md | 6 +-- docs/usage.md | 58 ++++++++++++++---------- modules/local/interproscan_download.nf | 4 +- nextflow.config | 2 +- nextflow_schema.json | 25 ++++++---- subworkflows/local/amp.nf | 12 ++--- subworkflows/local/protein_annotation.nf | 4 +- workflows/funcscan.nf | 6 +-- 10 files changed, 77 insertions(+), 63 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ae98c0b..e6fb34d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,17 +27,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Dependencies` -======= -| Tool | Previous version | New version | +| Tool | Previous Version | New Version | | ------------ | ---------------- | ----------- | -| AMPcombi | 0.2.2 | 2.0.1 | -| Bakta | 1.9.3 | 1.10.4 | -| InterProScan | - | 5.59_91.0 | -| Macrel | 1.2.0 | 1.4.0 | -| MMseqs2 | 15.6f452 | 17.b804f | -| MultiQC | 1.24.0 | 1.27 | -| Pyrodigal | 3.3.0 | 3.6.3 | -| seqkit | 2.8.1 | 2.9.0 | +| AMPcombi | 0.2.2 | 2.0.1 | +| Bakta | 1.9.3 | 1.10.4 | +| InterProScan | - | 5.59_91.0 | +| Macrel | 1.2.0 | 1.4.0 | +| MMseqs2 | 15.6f452 | 17.b804f | +| MultiQC | 1.24.0 | 1.27 | +| Pyrodigal | 3.3.0 | 3.6.3 | +| seqkit | 2.8.1 | 2.9.0 | ### `Deprecated` diff --git a/CITATIONS.md b/CITATIONS.md index 91cab07c..37e595d2 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -72,11 +72,11 @@ - [InterPro](https://doi.org/10.1093/nar/gkaa977) - > Blum, M., Chang, H-Y., Chuguransky, S., Grego, T., Kandasaamy, S., Mitchell, A., Nuka, G., Paysan-Lafosse, T., Qureshi, M., Raj, S., Richardson, L., Salazar, G.A., Williams, L., Bork, P., Bridge, A., Gough, J., Haft, D.H., Letunic, I., Marchler-Bauer, A., Mi, H., Natale, D.A., Necci, M., Orengo, C.A., Pandurangan, A.P., Rivoire, C., Sigrist, C.A., Sillitoe, I., Thanki, N., Thomas, P.D., Tosatto, S.C.E, Wu, C.H., Bateman, A., Finn, R.D. (2021) The InterPro protein families and domains database: 20 years on, Nucleic Acids Research, 49(D1), D344–D354.[DOI: 10.1093/nar/gkaa977](https://doi.org/10.1093/nar/gkaa977). + > Blum, M., Chang, H-Y., Chuguransky, S., Grego, T., Kandasaamy, S., Mitchell, A., Nuka, G., Paysan-Lafosse, T., Qureshi, M., Raj, S., Richardson, L., Salazar, G. A., Williams, L., Bork, P., Bridge, A., Gough, J., Haft, D. H., Letunic, I., Marchler-Bauer, A., Mi, H., Natale, D. A., Necci, M., Orengo, C. A., Pandurangan, A. P., Rivoire, C., Sigrist, C. A., Sillitoe, I., Thanki, N., Thomas, P. D., Tosatto, S. C. E, Wu, C. H., Bateman, A., Finn, R. D. (2021) The InterPro protein families and domains database: 20 years on. Nucleic Acids Research, 49(D1), D344–D354. [DOI: 10.1093/nar/gkaa977](https://doi.org/10.1093/nar/gkaa977) - [InterProScan](https://doi.org/10.1093/bioinformatics/btu031) - > Jones, P., Binns, D., Chang, H-Y., Fraser, M., Li, W., McAnulla, C., McWilliam, H., Maslen, J., Mitchell, A., Nuka, G., Pesseat, S., Quinn, A.F., Sangrador-Vegas, A., Scheremetjew, M., Yong, S-Y., Lopez, R., Hunter, S. (2014)InterProScan 5: genome-scale protein function classification, Bioinformatics, 30(9), 1236–1240. [DOI: 10.1093/bioinformatics/btu031](https://doi.org/10.1093/bioinformatics/btu031) + > Jones, P., Binns, D., Chang, H-Y., Fraser, M., Li, W., McAnulla, C., McWilliam, H., Maslen, J., Mitchell, A., Nuka, G., Pesseat, S., Quinn, A. F., Sangrador-Vegas, A., Scheremetjew, M., Yong, S-Y., Lopez, R., Hunter, S. (2014) InterProScan 5: genome-scale protein function classification. Bioinformatics, 30(9), 1236–1240. [DOI: 10.1093/bioinformatics/btu031](https://doi.org/10.1093/bioinformatics/btu031) - [Macrel](https://doi.org/10.7717/peerj.10555) diff --git a/docs/output.md b/docs/output.md index f5c57d9d..c4cb9f05 100644 --- a/docs/output.md +++ b/docs/output.md @@ -232,12 +232,12 @@ Output Summaries: Output files - `interproscan/` - - `_cleaned.faa`: clean version of the fasta files (in amino acid format) generated by one of the annotation tools (i.e. Pyrodigal, Prokka, Bakta). These contain sequences with no special characters (for eg. '\*' or '-'). + - `_cleaned.faa`: clean version of the fasta files (in amino acid format) generated by one of the annotation tools (i.e. Pyrodigal, Prokka, Bakta). These contain sequences with no special characters (for eg. `*` or `-`). - `_interproscan_faa.tsv`: predicted proteins and domains using the InterPro database in TSV format
    -[InterProScan](https://academic.oup.com/bioinformatics/article/30/9/1236/237988?login=true) is designed to predict the protein function and and provide possible domain and motif information for the coding regions. It utilizes the InterPro database that consists of multiple sister databases such as PANTHER, ProSite, Pfam, etc. More details can be found in the [documentation](https://interproscan-docs.readthedocs.io/en/latest/index.html). +[InterProScan](https://github.com/ebi-pf-team/interproscan) is designed to predict protein functions and provide possible domain and motif information of the coding regions. It utilizes the InterPro database that consists of multiple sister databases such as PANTHER, ProSite, Pfam, etc. More details can be found in the [documentation](https://interproscan-docs.readthedocs.io/en/latest/index.html). ### AMP detection tools @@ -490,7 +490,7 @@ Note that filtered FASTA is only used for BGC workflow for run-time optimisation - `/*_mmseqs_matches.txt*`: alignment file generated by MMseqs2 for each sample :::info -In some cases when the AMP and the taxonomic classification subworkflows are turned on, it can happen that only summary files per sample are created in the output folder with **NO** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster.tsv` files with no taxonomic classifications merged. This can occur if some AMP parameters are 'too strict' or only one AMP tool is run, which can lead to no AMP hits found in any of the samples or in only one sample. Look out for `[nf-core/funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.`in the stdout or `.nextflow.log` file. In that case we recommend to lower the amp threshold and run more than one AMP prediction tool. +In some cases when the AMP and the taxonomic classification subworkflows are turned on, it can happen that only summary files per sample are created in the output folder with **no** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster.tsv` files with no taxonomic classifications merged. This can occur if some AMP prediction parameters are 'too strict' or only one AMP tool is run, which can lead to no AMP hits found in any of the samples or in only one sample. Look out for the warning `[nf-core/funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.` in the stdout or `.nextflow.log` file. In that case we recommend to lower the AMP prediction thresholds and run more than one AMP prediction tool. ::: AMP summary table header descriptions using DRAMP as reference database diff --git a/docs/usage.md b/docs/usage.md index 232846f3..8bf8575b 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -135,16 +135,12 @@ MMseqs2 is currently the only taxonomic classification tool used in the pipeline [InterProScan](https://github.com/ebi-pf-team/interproscan) is currently the only protein annotation tool that gives a snapshot of the protein families and domains for each coding region. -By giving `--run_protein_annotation` the `--protein_annotation_tool InterProScan` is activated by default and the [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/) v5.67-99.0 is by default downloaded and prepared and the input sequences will be screened against the database. +The protein annotation workflow is activated with the flag `--run_protein_annotation`. InterProScan is used as the only protein annotation tool at the moment and the [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.72-103.0) version 5.72-103.0 is downloaded and prepared to screen the input sequences against it. -You can skip database downloading by the pipeline on each run by manually downloading and extracting the files from any [InterPro version](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/) and giving the resulting directory path to `--protein_annotation_interproscan_db`. - -```bash ---function_interproscan_db 'path/to/InterPro_directory/' -``` +Since the database download is huge (5.5GB) and might take quite some time, you can skip the automatic database download on each run by manually downloading and extracting the files of any [InterPro version](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/) beforehand and providing the resulting directory path to `--protein_annotation_interproscan_db `. :::info -By default the databases used to assign the nearest protein domain is set as `PANTHER,ProSiteProfiles,ProSitePatterns,Pfam`. An addition of other application to the list, does not guarantee that the results will be integrated correctly within `AMPcombi`. +By default, the databases used by InterProScan is set as `PANTHER,ProSiteProfiles,ProSitePatterns,Pfam`. An addition of other application to the list does not guarantee that the results will be integrated correctly within `AMPcombi`. ::: ### antiSMASH @@ -274,21 +270,11 @@ This is due to an incompatibility issue of Prodigal's output `.gbk` file with mu :::tip -- If `--run_protein_annotation` is given, protein and domain classifications of the coding regions are generated and the output is then integrated into the `AMPcombi parsetables` resulting table for every sample and the complete summary files e.g., `Ampcombi_summary.tsv`. +- If `--run_protein_annotation` is activated, protein and domain classifications of the coding regions are generated and then used by the `ampcombi2/parsetables` module to create a table for every sample and the complete summary files e.g., `Ampcombi_summary.tsv`. -- In some cases when the AMP and the taxonomic classification subworkflows are - turned on, it can happen that only summary files per sample are created in the - output folder with **NO** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster. -tsv` files with no taxonomic classifications merged. This can occur if some AMP - parameters are 'too strict' or only one AMP tool is run, which can lead to no AMP - hits found in any of the samples or in only one sample. Look out for `[nf-core/ -funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, -AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.`in the stdout or `.nextflow.log` - file. In that case we recommend to lower the amp threshold and run more than one - AMP prediction tool. - ::: +In some cases when the AMP and the taxonomic classification subworkflows are turned on, it can happen that only summary files per sample are created in the output folder with **no** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster.tsv` files with no taxonomic classifications merged. This can occur if some AMP prediction parameters are 'too strict' or only one AMP tool is run, which can lead to no AMP hits found in any of the samples or in only one sample. Look out for the warning `[nf-core/funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.` in the stdout or `.nextflow.log` file. In that case we recommend to lower the AMP prediction thresholds and run more than one AMP prediction tool. -### Abricate +### ABRicate The default ABRicate installation comes with a series of 'default' databases: @@ -531,7 +517,6 @@ The contents of the database directory should include directories such as `commo ```console deepbgc_db/ ├── common -A diifferent version of the database can be supplied to the pipeline by passing the InterProScan database directory to `--protein_annotation_interproscan_db path/to/interproscan_db/`. The directory can be created following with: └── [0.1.0] ├── classifier | └── myClassifiers*.pkl @@ -541,9 +526,9 @@ A diifferent version of the database can be supplied to the pipeline by passing ### InterProScan -[InterProScan](https://github.com/ebi-pf-team/interproscan) is used to provide more information about the proteins annotated on the contigs. By default, turning on this subworkflow with `--run_protein_annotation` and `--protein_annotation_tool InterProScan` will download and unzip the (as of now) latest [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/) v5.67-99.0. The database downloaded can be saved in the output directory `/databases/interproscan/*` if the `--save_db` is turned on. Note: the download can take upto 4 hours depending on teh bandwidth. +[InterProScan](https://github.com/ebi-pf-team/interproscan) is used to provide more information about the proteins annotated on the contigs. By default, turning on this subworkflow with `--run_protein_annotation` will download and unzip the [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.72-103.0/) version 5.72-103.0. The database can be saved in the output directory `/databases/interproscan/` if the `--save_db` is turned on. Note: the huge database download (5.5GB) can take up to 4 hours depending on the bandwidth. -A different version of the database can be supplied to the pipeline by passing the InterProScan database directory to `--protein_annotation_interproscan_db path/to/downloaded-untarred-interproscan_db-dir/`. The directory can be created following: +A local version of the database can be supplied to the pipeline by passing the InterProScan database directory to `--protein_annotation_interproscan_db `. The directory can be created by running (e.g. for database version 5.67-99.0): ``` curl -L https://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz -o interproscan_db/interproscan-5.67-99.0-64-bit.tar.gz @@ -551,6 +536,33 @@ tar -xzf interproscan_db/interproscan-5.67-99.0-64-bit.tar.gz -C interproscan_db ``` +The contents of the database directory should include the directory `data` in the top level with a couple of subdirectories: + +``` +interproscan_db/ + └── data/ + ├── antifam + ├── cdd + ├── funfam + ├── gene3d + ├── hamap + ├── ncbifam + ├── panther + | └── [18.0] + ├── pfam + | └── [36.0] + ├── phobius + ├── pirsf + ├── pirsr + ├── prints + ├── prosite + | └── [2023_05] + ├── sfld + ├── smart + ├── superfamily + └── tmhmm +``` + ## Updating the pipeline 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: diff --git a/modules/local/interproscan_download.nf b/modules/local/interproscan_download.nf index 1921305a..4df3edf3 100644 --- a/modules/local/interproscan_download.nf +++ b/modules/local/interproscan_download.nf @@ -11,8 +11,8 @@ process INTERPROSCAN_DATABASE { val database_url output: - path("interproscan_db/*") , emit: db - path "versions.yml" , emit: versions + path("interproscan_db/*"), emit: db + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when diff --git a/nextflow.config b/nextflow.config index 14dbf9e1..9fc5cc1f 100644 --- a/nextflow.config +++ b/nextflow.config @@ -103,7 +103,7 @@ params { annotation_prokka_addgenes = false annotation_prokka_retaincontigheaders = false - // Protein_annotation options + // Protein annotation options run_protein_annotation = false protein_annotation_tool = 'InterProScan' protein_annotation_interproscan_db = null diff --git a/nextflow_schema.json b/nextflow_schema.json index dba60bbc..517a1ba0 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -536,7 +536,7 @@ "protein_annotation_tool": { "type": "string", "default": "InterProScan", - "help_text": "This flag specifies which tool for protein annotation should be activated. \nAt the moment only [InterProScan](https://github.com/ebi-pf-team/interproscan) is incorporated in the pipeline. This annotates the locus tags to protein and domain levels according to the InterPro databases. \n\nMore details can be found in the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/index.html).", + "help_text": "This flag specifies which tool for protein annotation should be activated.\nAt the moment only [InterProScan](https://github.com/ebi-pf-team/interproscan) is incorporated in the pipeline. This annotates the locus tags to protein and domain levels according to the InterPro databases.\n\nMore details can be found in the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/index.html).", "description": "Specifies the tool used for further protein annotation.", "fa_icon": "fas fa-tools" }, @@ -544,28 +544,32 @@ "type": "string", "default": "http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz", "help_text": "This allows the user to change the InterProScan database version that for coding region functional annotation that the pipeline will download for you automatically if you don't supply a pre-supplied database to `--protein_annotation_interproscan_db`. Changing this URL allows for the use of the latest database release. By default this is set to `http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz`. ", - "description": "Change the database version used for annotation." + "description": "Change the database version used for annotation.", + "fa_icon": "fas fa-database" }, "protein_annotation_interproscan_db": { "type": "string", - "help_text": "Use this to supply the path to a pre-downloaded InterProScan database. This can be any unzipped InterProScan version. By default the database version '5.67-99.0' is downloaded. \n\nFor more details on where to find different InterProScan databases see tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/UserDocs.html#obtaining-a-copy-of-interproscan).\n", - "description": "Path to pre-downloaded database." + "description": "Path to pre-downloaded InterProScan database.", + "fa_icon": "fas fa-database" }, "protein_annotation_interproscan_applications": { "type": "string", "default": "PANTHER,ProSiteProfiles,ProSitePatterns,Pfam", - "help_text": "A comma separated string specifying the database(s) to be used to annotate the coding regions annotated during the 'ANNOTATION' workflow of the pipeline. By default these include `PANTHER,ProSiteProfiles,ProSitePatterns,Pfam`. \n- PANTHER (Protein ANalysis THrough Evolutionary Relationships): genes classified by their functions, using published scientific experimental evidence and evolutionary relationships. \n- PROSITE: protein domains, families, functional sites and specific patterns and profiles to identify them. \n- PFAM: protein families, represented by multiple sequence alignments and hidden Markov models (HMMs). \n\nThese databases were chosen based on the AMP workflow and therefore, with only these databases, do we guarantee the integration of the results to the AMPcombi final summary. \n\nNOTE: Currently, no integration of the results are implemented for the BGC and the ARG final summary tables. \n\nFor more information about all possible databases see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--applications`", - "description": "Assigns the database /s to be used to annotate the coding regions." + "help_text": "A comma-separated string specifying the database(s) to be used to annotate the coding regions annotated during the contig annotation workflow of the pipeline. By default these include `PANTHER,ProSiteProfiles,ProSitePatterns,Pfam`.\n- PANTHER (Protein ANalysis THrough Evolutionary Relationships): genes classified by their functions, using published scientific experimental evidence and evolutionary relationships.\n- PROSITE: protein domains, families, functional sites and specific patterns and profiles to identify them.\n- PFAM: protein families, represented by multiple sequence alignments and hidden Markov models (HMMs).\n\nThese databases were chosen based on the AMP workflow and therefore, with only these databases, do we guarantee the integration of the results to the AMPcombi final summary.\n\nNOTE: Currently, no integration of the results are implemented for the BGC and the ARG final summary tables.\n\nFor more information about all possible databases see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--applications`", + "description": "Assigns the database(s) to be used to annotate the coding regions.", + "fa_icon": "fas fa-database" }, "protein_annotation_interproscan_enableprecalc": { "type": "boolean", - "help_text": "This increases the speed of functional annotation with InterProScan by pre-calculating matches found in the UniProtKB, thereby identifying unique matches in the query sequences for faster annotation. By default this is turned OFF.\n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `---diasable-precalc`", - "description": "Pre-calculates residue mutual matches." + "help_text": "This increases the speed of functional annotation with InterProScan by pre-calculating matches found in the UniProtKB, thereby identifying unique matches in the query sequences for faster annotation. By default this is turned off.\n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `---diasable-precalc`", + "description": "Pre-calculates residue mutual matches.", + "fa_icon": "fas fa-clock-rotate-left" }, "protein_annotation_interproscan_enableresidueannot": { "type": "boolean", "help_text": "Activating this flag will remove the residue annotation from the final XML and JSON output files, which we do not supply as output files from InerProScan. \n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--disable-residue-annot`", - "description": "Enable residue annotation in XML and JSON files." + "description": "Enable residue annotation in XML and JSON files.", + "fa_icon": "fas fa-eraser" }, "protein_annotation_interproscan_disableresidueannottsv": { "type": "boolean", @@ -573,7 +577,8 @@ "description": "Removes annotations from TSV file." } }, - "help_text": "This subworkflow adds additional protein annotations to all annotated coding regions. Currently, only annotation with InterProScan is integrated in the subworkflow. " + "help_text": "This subworkflow adds additional protein annotations to all annotated coding regions. Currently, only annotation with InterProScan is integrated in the subworkflow.", + "fa_icon": "fas fa-file-signature" }, "database_downloading_options": { "title": "Database downloading options", diff --git a/subworkflows/local/amp.nf b/subworkflows/local/amp.nf index 03379505..0b97a7d9 100644 --- a/subworkflows/local/amp.nf +++ b/subworkflows/local/amp.nf @@ -116,12 +116,12 @@ workflow AMP { // AMPCOMBI2::PARSETABLES if ( params.amp_ampcombi_db != null ) { AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db_id, params.amp_ampcombi_db, ch_input_for_ampcombi.interpro ) - } else { - AMP_DATABASE_DOWNLOAD( params.amp_ampcombi_db_id ) - ch_versions = ch_versions.mix( AMP_DATABASE_DOWNLOAD.out.versions ) - ch_ampcombi_input_db = AMP_DATABASE_DOWNLOAD.out.db - AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db_id, ch_ampcombi_input_db, ch_input_for_ampcombi.interpro ) - } + } else { + AMP_DATABASE_DOWNLOAD( params.amp_ampcombi_db_id ) + ch_versions = ch_versions.mix( AMP_DATABASE_DOWNLOAD.out.versions ) + ch_ampcombi_input_db = AMP_DATABASE_DOWNLOAD.out.db + AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db_id, ch_ampcombi_input_db, ch_input_for_ampcombi.interpro ) + } ch_versions = ch_versions.mix( AMPCOMBI2_PARSETABLES.out.versions ) ch_ampcombi_summaries = AMPCOMBI2_PARSETABLES.out.tsv.map{ it[1] }.collect() diff --git a/subworkflows/local/protein_annotation.nf b/subworkflows/local/protein_annotation.nf index b669fa0f..51930702 100644 --- a/subworkflows/local/protein_annotation.nf +++ b/subworkflows/local/protein_annotation.nf @@ -25,12 +25,12 @@ workflow PROTEIN_ANNOTATION { .first() } else { INTERPROSCAN_DATABASE ( params.protein_annotation_interproscan_db_url ) - ch_versions = ch_versions.mix( INTERPROSCAN_DATABASE.out.versions ) + ch_versions = ch_versions.mix( INTERPROSCAN_DATABASE.out.versions ) ch_interproscan_db = ( INTERPROSCAN_DATABASE.out.db ) } INTERPROSCAN( ch_faa_for_interproscan, ch_interproscan_db ) - ch_versions = ch_versions.mix( INTERPROSCAN.out.versions ) + ch_versions = ch_versions.mix( INTERPROSCAN.out.versions ) ch_interproscan_tsv = ch_interproscan_tsv.mix( INTERPROSCAN.out.tsv ) // Current INTERPROSCAN version 5.59_91.0 only includes 13 columns and not 15 which ampcombi expects, so we added them here diff --git a/workflows/funcscan.nf b/workflows/funcscan.nf index 54136cd3..b8f9cc4b 100644 --- a/workflows/funcscan.nf +++ b/workflows/funcscan.nf @@ -191,14 +191,12 @@ workflow FUNCSCAN { ch_versions = ch_versions.mix(SEQKIT_SEQ_FILTER.out.versions) ch_input_for_protein_annotation = SEQKIT_SEQ_FILTER.out.fastx - PROTEIN_ANNOTATION ( - ch_input_for_protein_annotation - ) + PROTEIN_ANNOTATION ( ch_input_for_protein_annotation ) ch_versions = ch_versions.mix(PROTEIN_ANNOTATION.out.versions) ch_interproscan_tsv = PROTEIN_ANNOTATION.out.tsv.map { meta, file -> if (file == [] || file.isEmpty()) { - log.warn("[nf-core/funcscan] Protein annotation with INTERPROSCAN produced an empty TSV file. No protein annotation will be added for ${meta.id}.") + log.warn("[nf-core/funcscan] Protein annotation with InterProScan produced an empty TSV file. No protein annotation will be added for sample ${meta.id}.") [meta, []] } else { [meta, file] From 5b2a679046bf788027b4d4356f4c47d49009a0f2 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Thu, 6 Feb 2025 16:26:33 +0100 Subject: [PATCH 134/175] Update description of new param --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index fa55606a..8fc059f9 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -522,7 +522,7 @@ "annotation_pyrodigal_usespecialstopcharacter": { "type": "boolean", "fa_icon": "fa fa-star-of-life", - "description": "This forces Pyrodigal to append asterisks (`*`) as stop codon indicators.", + "description": "This forces Pyrodigal to append asterisks (`*`) as stop codon indicators. Do not use when running AMP workflow.", "help_text": "Some downstream tools like AMPlify cannot process sequences containing non-sequence characters like the stop codon indicator `*`. Thus, this flag is deactivated by default. Activate this flag to revert the behaviour and have Pyrodigal append `*` as stop codon indicator to annotated sequences.\n\nFor more information check the Pyrodigal [documentation](https://pyrodigal.readthedocs.io).\n\n> Modifies tool parameter(s):\n> - PYRODIGAL: `--no-stop-codon`", "default": false } From f14990f4735ec8ec2659a62a48180f8aff5aa682 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Mon, 10 Feb 2025 11:29:01 +0100 Subject: [PATCH 135/175] add review suggestions --- conf/modules.config | 2 +- docs/usage.md | 4 ++-- nextflow.config | 2 +- nextflow_schema.json | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 0a88cfc9..aa31823b 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -138,7 +138,7 @@ process { "--applications ${params.protein_annotation_interproscan_applications}", params.protein_annotation_interproscan_enableprecalc ? '' : '--disable-precalc', params.protein_annotation_interproscan_enableresidueannot ? '' : '--disable-residue-annot', - params.protein_annotation_interproscan_disableresidueannottsv ? '--enable-tsv-residue-annot' : '', + params.protein_annotation_interproscan_disableresidueannottsv ? '' : '--enable-tsv-residue-annot', "--formats tsv" ].join(' ').trim() } diff --git a/docs/usage.md b/docs/usage.md index 8bf8575b..a5e0b655 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -531,8 +531,8 @@ deepbgc_db/ A local version of the database can be supplied to the pipeline by passing the InterProScan database directory to `--protein_annotation_interproscan_db `. The directory can be created by running (e.g. for database version 5.67-99.0): ``` -curl -L https://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz -o interproscan_db/interproscan-5.67-99.0-64-bit.tar.gz -tar -xzf interproscan_db/interproscan-5.67-99.0-64-bit.tar.gz -C interproscan_db/ +curl -L https://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.72-103.0/interproscan-5.72-103.0-64-bit.tar.gz -o interproscan_db/interproscan-5.72-103.0-64-bit.tar.gz +tar -xzf interproscan_db/interproscan-5.72-103.0-64-bit.tar.gz -C interproscan_db/ ``` diff --git a/nextflow.config b/nextflow.config index 9fc5cc1f..c458e87f 100644 --- a/nextflow.config +++ b/nextflow.config @@ -107,7 +107,7 @@ params { run_protein_annotation = false protein_annotation_tool = 'InterProScan' protein_annotation_interproscan_db = null - protein_annotation_interproscan_db_url = 'http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz' + protein_annotation_interproscan_db_url = 'https://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.72-103.0/interproscan-5.72-103.0-64-bit.tar.gz' protein_annotation_interproscan_applications = 'PANTHER,ProSiteProfiles,ProSitePatterns,Pfam' protein_annotation_interproscan_enableprecalc = false protein_annotation_interproscan_enableresidueannot = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 517a1ba0..534f8c27 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -542,8 +542,8 @@ }, "protein_annotation_interproscan_db_url": { "type": "string", - "default": "http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz", - "help_text": "This allows the user to change the InterProScan database version that for coding region functional annotation that the pipeline will download for you automatically if you don't supply a pre-supplied database to `--protein_annotation_interproscan_db`. Changing this URL allows for the use of the latest database release. By default this is set to `http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.67-99.0/interproscan-5.67-99.0-64-bit.tar.gz`. ", + "default": "http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.72-103.0/interproscan-5.72-103.0-64-bit.tar.gz", + "help_text": "This allows the user to change the InterProScan database version that the pipeline will download for you automatically. To instead use a pre-downloaded database, please supply its path to `--protein_annotation_interproscan_db`. Changing this URL allows for the use of the latest database release. By default this is set to `http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.72-103.0/interproscan-5.72-103.0-64-bit.tar.gz`. ", "description": "Change the database version used for annotation.", "fa_icon": "fas fa-database" }, From bdf0a98671428ffcc7c2f2cdc5a3c8205850bc87 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Mon, 10 Feb 2025 11:40:01 +0100 Subject: [PATCH 136/175] fix linting --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 534f8c27..491385a3 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -542,7 +542,7 @@ }, "protein_annotation_interproscan_db_url": { "type": "string", - "default": "http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.72-103.0/interproscan-5.72-103.0-64-bit.tar.gz", + "default": "https://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.72-103.0/interproscan-5.72-103.0-64-bit.tar.gz", "help_text": "This allows the user to change the InterProScan database version that the pipeline will download for you automatically. To instead use a pre-downloaded database, please supply its path to `--protein_annotation_interproscan_db`. Changing this URL allows for the use of the latest database release. By default this is set to `http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.72-103.0/interproscan-5.72-103.0-64-bit.tar.gz`. ", "description": "Change the database version used for annotation.", "fa_icon": "fas fa-database" From b10dd7de878707b88538c97514839434ca65c72a Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Mon, 10 Feb 2025 11:42:08 +0100 Subject: [PATCH 137/175] Merge branch 'add_interproscan_to_amp' of https://github.com/nf-core/funcscan into add_interproscan_to_amp --- CHANGELOG.md | 2 + bin/merge_taxonomy.py | 12 +- conf/modules.config | 1 + nextflow.config | 1 + nextflow_schema.json | 7 + ro-crate-metadata.json | 76 +++++- subworkflows/local/annotation.nf | 119 +++++---- subworkflows/local/arg.nf | 252 +++++++++--------- subworkflows/local/bgc.nf | 178 +++++++------ subworkflows/local/taxa_class.nf | 45 ++-- .../utils_nfcore_funcscan_pipeline/main.nf | 24 +- tests/test.nf.test.snap | 2 +- tests/test_preannotated.nf.test.snap | 6 +- workflows/funcscan.nf | 10 +- 14 files changed, 403 insertions(+), 332 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e6fb34d1..e9721f26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#435](https://github.com/nf-core/funcscan/pull/435) Fixed dependency errors within taxonomy merging scripts, updated the code and output for all three workflows. Bumped to version 0.1.1. (by @darcy220606) - [#437](https://github.com/nf-core/funcscan/pull/437) Fixed file name error when supplying already preprocessed CARD database for ARG workflow. (by @jasmezz) - [#446](https://github.com/nf-core/funcscan/pull/446) Updated antiSMASH modules to fix apptainer execution. (by @jasmezz and @jfy133) +- [#448](https://github.com/nf-core/funcscan/pull/448) Fixed taxonomy merge to work with output from GTDB/SILVA/KALAMARI. (by @darcy220606) +- [#447](https://github.com/nf-core/funcscan/pull/447) Added `--annotation_pyrodigal_usespecialstopcharacter` parameter to improve AMPlify screening. (by @jasmezz) ### `Dependencies` diff --git a/bin/merge_taxonomy.py b/bin/merge_taxonomy.py index d202bcbf..ef54e1c2 100755 --- a/bin/merge_taxonomy.py +++ b/bin/merge_taxonomy.py @@ -68,6 +68,8 @@ def reformat_mmseqs_taxonomy(mmseqs_taxonomy): """_summary_ Reformats the taxonomy files and joins them in a list to be passed on to the tools functions + Note: Every database from MMseqs outputs a different number of columns. Only the first 4 and last 2 columns are constant + and the most important. Args: mmseqs_taxonomy (tsv): mmseqs output file per sample @@ -75,9 +77,13 @@ def reformat_mmseqs_taxonomy(mmseqs_taxonomy): Returns: data frame: reformatted tables """ - mmseqs2_df = pd.read_csv(mmseqs_taxonomy, sep='\t', header=None, names=['contig_id', 'taxid', 'rank_label', 'scientific_name', 'lineage', 'mmseqs_lineage_contig']) - # remove the lineage column - mmseqs2_df.drop('lineage', axis=1, inplace=True) + col_numbers = pd.read_csv(mmseqs_taxonomy, sep='\t', header=None, nrows=1).shape[1] + selected_cols_numbers = [0, 1, 2, 3, col_numbers - 1] + mmseqs2_df = pd.read_csv(mmseqs_taxonomy, + sep='\t', + header=None, + usecols= selected_cols_numbers, + names=['contig_id', 'taxid', 'rank_label', 'scientific_name', 'mmseqs_lineage_contig']) mmseqs2_df['mmseqs_lineage_contig'].unique() # convert any classification that has Eukaryota/root to NaN as funcscan targets bacteria ONLY ** for i, row in mmseqs2_df.iterrows(): diff --git a/conf/modules.config b/conf/modules.config index aa31823b..db94087f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -240,6 +240,7 @@ process { params.annotation_pyrodigal_singlemode ? "-p single" : "-p meta", params.annotation_pyrodigal_closed ? "-c" : "", params.annotation_pyrodigal_forcenonsd ? "-n" : "", + params.annotation_pyrodigal_usespecialstopcharacter ? '' : '--no-stop-codon', "-g ${params.annotation_pyrodigal_transtable}", ].join(' ').trim() } diff --git a/nextflow.config b/nextflow.config index c458e87f..d7e12a50 100644 --- a/nextflow.config +++ b/nextflow.config @@ -66,6 +66,7 @@ params { annotation_pyrodigal_closed = false annotation_pyrodigal_transtable = 11 annotation_pyrodigal_forcenonsd = false + annotation_pyrodigal_usespecialstopcharacter = false annotation_bakta_db = null annotation_bakta_db_downloadtype = 'full' diff --git a/nextflow_schema.json b/nextflow_schema.json index 491385a3..647d5cde 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -518,6 +518,13 @@ "fa_icon": "fas fa-barcode", "description": "Forces Pyrodigal to scan for motifs.", "help_text": "Forces Pyrodigal to a full scan for motifs rather than activating the Shine-Dalgarno RBS finder, the default scanner for Pyrodigal to train for motifs.\n\nFor more information check the Pyrodigal [documentation](https://pyrodigal.readthedocs.io).\n\n> Modifies tool parameter(s):\n> - PYRODIGAL: `-n`" + }, + "annotation_pyrodigal_usespecialstopcharacter": { + "type": "boolean", + "fa_icon": "fa fa-star-of-life", + "description": "This forces Pyrodigal to append asterisks (`*`) as stop codon indicators. Do not use when running AMP workflow.", + "help_text": "Some downstream tools like AMPlify cannot process sequences containing non-sequence characters like the stop codon indicator `*`. Thus, this flag is deactivated by default. Activate this flag to revert the behaviour and have Pyrodigal append `*` as stop codon indicator to annotated sequences.\n\nFor more information check the Pyrodigal [documentation](https://pyrodigal.readthedocs.io).\n\n> Modifies tool parameter(s):\n> - PYRODIGAL: `--no-stop-codon`", + "default": false } }, "fa_icon": "fas fa-file-signature" diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 7f40a7cd..63577086 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,8 +22,8 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "InProgress", - "datePublished": "2025-01-27T14:45:55+00:00", - "description": "

    \n \n \n \"nf-core/funcscan\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/funcscan/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/funcscan/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/funcscan/results)[![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/nf-core/funcscan)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23funcscan-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/funcscan)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/funcscan** 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 nf-core/funcscan \\\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\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/funcscan/usage) and the [parameter documentation](https://nf-co.re/funcscan/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/funcscan/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/funcscan/output).\n\n## Credits\n\nnf-core/funcscan was originally written by Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James A. Fellows Yates.\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\nFor further information or help, don't hesitate to get in touch on the [Slack `#funcscan` channel](https://nfcore.slack.com/channels/funcscan) (you can join with [this invite](https://nf-co.re/join/slack)).\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\nYou can cite the `nf-core` publication as follows:\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-02-05T10:21:25+00:00", + "description": "

    \n \n \n \"nf-core/funcscan\"\n \n

    \n\n[![GitHub Actions CI Status](https://github.com/nf-core/funcscan/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/funcscan/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/funcscan/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/funcscan/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.7643099-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.7643099)\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/nf-core/funcscan)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23funcscan-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/funcscan)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core)\n\n## Introduction\n\n**nf-core/funcscan** is a bioinformatics best-practice analysis pipeline for the screening of nucleotide sequences such as assembled contigs for functional genes. It currently features mining for antimicrobial peptides, antibiotic resistance genes and biosynthetic gene clusters.\n\nThe pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker/Singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules) in order to make them available to all nf-core pipelines, and to everyone within the Nextflow community!\n\nOn release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/funcscan/results).\n\nThe nf-core/funcscan AWS full test dataset are contigs generated by the MGnify service from the ENA. We used contigs generated from assemblies of chicken cecum shotgun metagenomes (study accession: MGYS00005631).\n\n## Pipeline summary\n\n1. Quality control of input sequences with [`SeqKit`](https://bioinf.shenwei.me/seqkit/)\n2. Taxonomic classification of contigs of **prokaryotic origin** with [`MMseqs2`](https://github.com/soedinglab/MMseqs2)\n3. Annotation of assembled prokaryotic contigs with [`Prodigal`](https://github.com/hyattpd/Prodigal), [`Pyrodigal`](https://github.com/althonos/pyrodigal), [`Prokka`](https://github.com/tseemann/prokka), or [`Bakta`](https://github.com/oschwengers/bakta)\n4. Screening contigs for antimicrobial peptide-like sequences with [`ampir`](https://cran.r-project.org/web/packages/ampir/index.html), [`Macrel`](https://github.com/BigDataBiology/macrel), [`HMMER`](http://hmmer.org/), [`AMPlify`](https://github.com/bcgsc/AMPlify)\n5. Screening contigs for antibiotic resistant gene-like sequences with [`ABRicate`](https://github.com/tseemann/abricate), [`AMRFinderPlus`](https://github.com/ncbi/amr), [`fARGene`](https://github.com/fannyhb/fargene), [`RGI`](https://card.mcmaster.ca/analyze/rgi), [`DeepARG`](https://bench.cs.vt.edu/deeparg). [`argNorm`](https://github.com/BigDataBiology/argNorm) is used to map the outputs of `DeepARG`, `AMRFinderPlus`, and `ABRicate` to the [`Antibiotic Resistance Ontology`](https://www.ebi.ac.uk/ols4/ontologies/aro) for consistent ARG classification terms.\n6. Screening contigs for biosynthetic gene cluster-like sequences with [`antiSMASH`](https://antismash.secondarymetabolites.org), [`DeepBGC`](https://github.com/Merck/deepbgc), [`GECCO`](https://gecco.embl.de/), [`HMMER`](http://hmmer.org/)\n7. Creating aggregated reports for all samples across the workflows with [`AMPcombi`](https://github.com/Darcy220606/AMPcombi) for AMPs, [`hAMRonization`](https://github.com/pha4ge/hAMRonization) for ARGs, and [`comBGC`](https://raw.githubusercontent.com/nf-core/funcscan/master/bin/comBGC.py) for BGCs\n8. Software version and methods text reporting with [`MultiQC`](http://multiqc.info/)\n\n![funcscan metro workflow](docs/images/funcscan_metro_workflow.png)\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`samplesheet.csv`:\n\n```csv\nsample,fasta\nCONTROL_REP1,AEG588A1_001.fasta\nCONTROL_REP2,AEG588A1_002.fasta\nCONTROL_REP3,AEG588A1_003.fasta\n```\n\nEach row represents a (multi-)fasta file of assembled contig sequences.\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/funcscan \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \\\n --run_amp_screening \\\n --run_arg_screening \\\n --run_bgc_screening\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\nFor more details and further functionality, please refer to the [usage documentation](https://nf-co.re/funcscan/usage) and the [parameter documentation](https://nf-co.re/funcscan/parameters).\n\n## Pipeline output\n\nTo see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/funcscan/results) tab on the nf-core website pipeline page.\nFor more details about the output files and reports, please refer to the\n[output documentation](https://nf-co.re/funcscan/output).\n\n## Credits\n\nnf-core/funcscan was originally written by Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James A. Fellows Yates.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\nAdam Talbot, Alexandru Mizeranschi, Hugo Tavares, J\u00falia Mir Pedrol, Martin Klapper, Mehrdad Jaberi, Robert Syme, Rosa Herbst, Vedanth Ramji, @Microbion.\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#funcscan` channel](https://nfcore.slack.com/channels/funcscan) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/funcscan for your analysis, please cite it using the following doi: [10.5281/zenodo.7643099](https://doi.org/10.5281/zenodo.7643099)\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\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" @@ -31,6 +31,9 @@ { "@id": "assets/" }, + { + "@id": "bin/" + }, { "@id": "conf/" }, @@ -43,6 +46,9 @@ { "@id": "modules/" }, + { + "@id": "modules/local/" + }, { "@id": "modules/nf-core/" }, @@ -99,7 +105,7 @@ }, "mentions": [ { - "@id": "#a63ff768-a32a-4ee1-8ba3-fafeb18a6793" + "@id": "#1f9be113-27d3-4dcb-b12a-d0c1a16703bf" } ], "name": "nf-core/funcscan" @@ -121,14 +127,24 @@ }, { "@id": "main.nf", - "@type": ["File", "SoftwareSourceCode", "ComputationalWorkflow"], + "@type": [ + "File", + "SoftwareSourceCode", + "ComputationalWorkflow" + ], "creator": [ { "@id": "#jfy133@gmail.com" + }, + { + "@id": "#jfy133@gmail.com" + }, + { + "@id": "https://orcid.org/0009-0004-5961-4709" } ], "dateCreated": "", - "dateModified": "2025-01-27T14:45:55Z", + "dateModified": "2025-02-05T11:21:25Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -149,17 +165,33 @@ "screening", "secondary-metabolites" ], - "license": ["MIT"], - "name": ["nf-core/funcscan"], + "license": [ + "MIT" + ], + "maintainer": [ + { + "@id": "#jfy133@gmail.com" + }, + { + "@id": "https://orcid.org/0009-0004-5961-4709" + } + ], + "name": [ + "nf-core/funcscan" + ], "programmingLanguage": { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow" }, "sdPublisher": { "@id": "https://nf-co.re/" }, - "url": ["https://github.com/nf-core/funcscan", "https://nf-co.re/funcscan/dev/"], - "version": ["2.1.0dev"] - + "url": [ + "https://github.com/nf-core/funcscan", + "https://nf-co.re/funcscan/dev/" + ], + "version": [ + "2.1.0dev" + ] }, { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow", @@ -174,11 +206,11 @@ "version": "!>=24.04.2" }, { - "@id": "#a63ff768-a32a-4ee1-8ba3-fafeb18a6793", + "@id": "#1f9be113-27d3-4dcb-b12a-d0c1a16703bf", "@type": "TestSuite", "instance": [ { - "@id": "#f399a53f-20fc-47ed-b389-7e76797884bb" + "@id": "#e917d36b-75a7-45b5-86d1-e9157f00ac3b" } ], "mainEntity": { @@ -187,7 +219,7 @@ "name": "Test suite for nf-core/funcscan" }, { - "@id": "#f399a53f-20fc-47ed-b389-7e76797884bb", + "@id": "#e917d36b-75a7-45b5-86d1-e9157f00ac3b", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/funcscan", "resource": "repos/nf-core/funcscan/actions/workflows/ci.yml", @@ -209,6 +241,11 @@ "@type": "Dataset", "description": "Additional files" }, + { + "@id": "bin/", + "@type": "Dataset", + "description": "Scripts that must be callable from a pipeline process" + }, { "@id": "conf/", "@type": "Dataset", @@ -229,6 +266,11 @@ "@type": "Dataset", "description": "Modules used by the pipeline" }, + { + "@id": "modules/local/", + "@type": "Dataset", + "description": "Pipeline-specific modules" + }, { "@id": "modules/nf-core/", "@type": "Dataset", @@ -320,6 +362,12 @@ "@type": "Person", "email": "jfy133@gmail.com", "name": "James Fellows Yates" + }, + { + "@id": "https://orcid.org/0009-0004-5961-4709", + "@type": "Person", + "email": "73216762+jasmezz@users.noreply.github.com", + "name": "Jasmin Frangenberg" } ] -} +} \ No newline at end of file diff --git a/subworkflows/local/annotation.nf b/subworkflows/local/annotation.nf index c1c8e332..a59fe561 100644 --- a/subworkflows/local/annotation.nf +++ b/subworkflows/local/annotation.nf @@ -19,72 +19,75 @@ workflow ANNOTATION { fasta // tuple val(meta), path(contigs) main: - ch_versions = Channel.empty() + ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() - if ( params.annotation_tool == "pyrodigal" || ( params.annotation_tool == "prodigal" && params.run_bgc_screening == true && ( !params.bgc_skip_antismash || !params.bgc_skip_deepbgc || !params.bgc_skip_gecco ) ) || ( params.annotation_tool == "prodigal" && params.run_amp_screening == true ) ) { // Need to use Pyrodigal for most BGC tools and AMPcombi because Prodigal GBK annotation format is incompatible with them. + if (params.annotation_tool == "pyrodigal" || (params.annotation_tool == "prodigal" && params.run_bgc_screening == true && (!params.bgc_skip_antismash || !params.bgc_skip_deepbgc || !params.bgc_skip_gecco)) || (params.annotation_tool == "prodigal" && params.run_amp_screening == true)) { + // Need to use Pyrodigal for most BGC tools and AMPcombi because Prodigal GBK annotation format is incompatible with them. - if ( params.annotation_tool == "prodigal" && params.run_bgc_screening == true && ( !params.bgc_skip_antismash || !params.bgc_skip_deepbgc || !params.bgc_skip_gecco ) ) { - log.warn("[nf-core/funcscan] Switching annotation tool to: Pyrodigal. This is because Prodigal annotations (in GBK format) are incompatible with antiSMASH, DeepBGC, and GECCO. If you specifically wish to run Prodigal instead, please skip antiSMASH, DeepBGC, and GECCO or provide a pre-annotated GBK file in the samplesheet.") - } else if ( params.annotation_tool == "prodigal" && params.run_amp_screening == true ) { - log.warn("[nf-core/funcscan] Switching annotation tool to: Pyrodigal. This is because Prodigal annotations (in GBK format) are incompatible with AMPcombi. If you specifically wish to run Prodigal instead, please skip AMP workflow or provide a pre-annotated GBK file in the samplesheet.") - } - - PYRODIGAL ( fasta, "gbk" ) - GUNZIP_PYRODIGAL_FAA ( PYRODIGAL.out.faa ) - GUNZIP_PYRODIGAL_FNA ( PYRODIGAL.out.fna) - GUNZIP_PYRODIGAL_GBK ( PYRODIGAL.out.annotations ) - ch_versions = ch_versions.mix(PYRODIGAL.out.versions) - ch_versions = ch_versions.mix(GUNZIP_PYRODIGAL_FAA.out.versions) - ch_versions = ch_versions.mix(GUNZIP_PYRODIGAL_FNA.out.versions) - ch_versions = ch_versions.mix(GUNZIP_PYRODIGAL_GBK.out.versions) - ch_annotation_faa = GUNZIP_PYRODIGAL_FAA.out.gunzip - ch_annotation_fna = GUNZIP_PYRODIGAL_FNA.out.gunzip - ch_annotation_gbk = GUNZIP_PYRODIGAL_GBK.out.gunzip - - } else if ( params.annotation_tool == "prodigal" ) { - - PRODIGAL ( fasta, "gbk" ) - GUNZIP_PRODIGAL_FAA ( PRODIGAL.out.amino_acid_fasta ) - GUNZIP_PRODIGAL_FNA ( PRODIGAL.out.nucleotide_fasta) - GUNZIP_PRODIGAL_GBK ( PRODIGAL.out.gene_annotations ) - ch_versions = ch_versions.mix(PRODIGAL.out.versions) - ch_versions = ch_versions.mix(GUNZIP_PRODIGAL_FAA.out.versions) - ch_versions = ch_versions.mix(GUNZIP_PRODIGAL_FNA.out.versions) - ch_versions = ch_versions.mix(GUNZIP_PRODIGAL_GBK.out.versions) - ch_annotation_faa = GUNZIP_PRODIGAL_FAA.out.gunzip - ch_annotation_fna = GUNZIP_PRODIGAL_FNA.out.gunzip - ch_annotation_gbk = GUNZIP_PRODIGAL_GBK.out.gunzip - - } else if ( params.annotation_tool == "prokka" ) { + if (params.annotation_tool == "prodigal" && params.run_bgc_screening == true && (!params.bgc_skip_antismash || !params.bgc_skip_deepbgc || !params.bgc_skip_gecco)) { + log.warn("[nf-core/funcscan] Switching annotation tool to: Pyrodigal. This is because Prodigal annotations (in GBK format) are incompatible with antiSMASH, DeepBGC, and GECCO. If you specifically wish to run Prodigal instead, please skip antiSMASH, DeepBGC, and GECCO or provide a pre-annotated GBK file in the samplesheet.") + } + else if (params.annotation_tool == "prodigal" && params.run_amp_screening == true) { + log.warn("[nf-core/funcscan] Switching annotation tool to: Pyrodigal. This is because Prodigal annotations (in GBK format) are incompatible with AMPcombi. If you specifically wish to run Prodigal instead, please skip AMP workflow or provide a pre-annotated GBK file in the samplesheet.") + } - PROKKA ( fasta, [], [] ) - ch_versions = ch_versions.mix(PROKKA.out.versions) - ch_multiqc_files = PROKKA.out.txt.collect{it[1]}.ifEmpty([]) - ch_annotation_faa = PROKKA.out.faa - ch_annotation_fna = PROKKA.out.fna - ch_annotation_gbk = PROKKA.out.gbk + PYRODIGAL(fasta, "gbk") + GUNZIP_PYRODIGAL_FAA(PYRODIGAL.out.faa) + GUNZIP_PYRODIGAL_FNA(PYRODIGAL.out.fna) + GUNZIP_PYRODIGAL_GBK(PYRODIGAL.out.annotations) + ch_versions = ch_versions.mix(PYRODIGAL.out.versions) + ch_versions = ch_versions.mix(GUNZIP_PYRODIGAL_FAA.out.versions) + ch_versions = ch_versions.mix(GUNZIP_PYRODIGAL_FNA.out.versions) + ch_versions = ch_versions.mix(GUNZIP_PYRODIGAL_GBK.out.versions) + ch_annotation_faa = GUNZIP_PYRODIGAL_FAA.out.gunzip + ch_annotation_fna = GUNZIP_PYRODIGAL_FNA.out.gunzip + ch_annotation_gbk = GUNZIP_PYRODIGAL_GBK.out.gunzip + } + else if (params.annotation_tool == "prodigal") { - } else if ( params.annotation_tool == "bakta" ) { + PRODIGAL(fasta, "gbk") + GUNZIP_PRODIGAL_FAA(PRODIGAL.out.amino_acid_fasta) + GUNZIP_PRODIGAL_FNA(PRODIGAL.out.nucleotide_fasta) + GUNZIP_PRODIGAL_GBK(PRODIGAL.out.gene_annotations) + ch_versions = ch_versions.mix(PRODIGAL.out.versions) + ch_versions = ch_versions.mix(GUNZIP_PRODIGAL_FAA.out.versions) + ch_versions = ch_versions.mix(GUNZIP_PRODIGAL_FNA.out.versions) + ch_versions = ch_versions.mix(GUNZIP_PRODIGAL_GBK.out.versions) + ch_annotation_faa = GUNZIP_PRODIGAL_FAA.out.gunzip + ch_annotation_fna = GUNZIP_PRODIGAL_FNA.out.gunzip + ch_annotation_gbk = GUNZIP_PRODIGAL_GBK.out.gunzip + } + else if (params.annotation_tool == "prokka") { - // BAKTA prepare download - if ( params.annotation_bakta_db ) { - ch_bakta_db = Channel - .fromPath( params.annotation_bakta_db ) - .first() - } else { - BAKTA_BAKTADBDOWNLOAD ( ) - ch_versions = ch_versions.mix( BAKTA_BAKTADBDOWNLOAD.out.versions ) - ch_bakta_db = ( BAKTA_BAKTADBDOWNLOAD.out.db ) - } + PROKKA(fasta, [], []) + ch_versions = ch_versions.mix(PROKKA.out.versions) + ch_multiqc_files = PROKKA.out.txt.collect { it[1] }.ifEmpty([]) + ch_annotation_faa = PROKKA.out.faa + ch_annotation_fna = PROKKA.out.fna + ch_annotation_gbk = PROKKA.out.gbk + } + else if (params.annotation_tool == "bakta") { - BAKTA_BAKTA ( fasta, ch_bakta_db, [], [] ) - ch_versions = ch_versions.mix(BAKTA_BAKTA.out.versions) - ch_multiqc_files = BAKTA_BAKTA.out.txt.collect{it[1]}.ifEmpty([]) - ch_annotation_faa = BAKTA_BAKTA.out.faa - ch_annotation_fna = BAKTA_BAKTA.out.fna - ch_annotation_gbk = BAKTA_BAKTA.out.gbff + // BAKTA prepare download + if (params.annotation_bakta_db) { + ch_bakta_db = Channel + .fromPath(params.annotation_bakta_db, checkIfExists: true) + .first() } + else { + BAKTA_BAKTADBDOWNLOAD() + ch_versions = ch_versions.mix(BAKTA_BAKTADBDOWNLOAD.out.versions) + ch_bakta_db = BAKTA_BAKTADBDOWNLOAD.out.db + } + + BAKTA_BAKTA(fasta, ch_bakta_db, [], []) + ch_versions = ch_versions.mix(BAKTA_BAKTA.out.versions) + ch_multiqc_files = BAKTA_BAKTA.out.txt.collect { it[1] }.ifEmpty([]) + ch_annotation_faa = BAKTA_BAKTA.out.faa + ch_annotation_fna = BAKTA_BAKTA.out.fna + ch_annotation_gbk = BAKTA_BAKTA.out.gbff + } emit: versions = ch_versions diff --git a/subworkflows/local/arg.nf b/subworkflows/local/arg.nf index af618c5c..182f9648 100644 --- a/subworkflows/local/arg.nf +++ b/subworkflows/local/arg.nf @@ -2,26 +2,26 @@ Run ARG screening tools */ -include { ABRICATE_RUN } from '../../modules/nf-core/abricate/run/main' -include { AMRFINDERPLUS_UPDATE } from '../../modules/nf-core/amrfinderplus/update/main' -include { AMRFINDERPLUS_RUN } from '../../modules/nf-core/amrfinderplus/run/main' -include { DEEPARG_DOWNLOADDATA } from '../../modules/nf-core/deeparg/downloaddata/main' -include { DEEPARG_PREDICT } from '../../modules/nf-core/deeparg/predict/main' -include { FARGENE } from '../../modules/nf-core/fargene/main' -include { RGI_CARDANNOTATION } from '../../modules/nf-core/rgi/cardannotation/main' -include { RGI_MAIN } from '../../modules/nf-core/rgi/main/main' -include { UNTAR as UNTAR_CARD } from '../../modules/nf-core/untar/main' -include { TABIX_BGZIP as ARG_TABIX_BGZIP } from '../../modules/nf-core/tabix/bgzip/main' -include { MERGE_TAXONOMY_HAMRONIZATION } from '../../modules/local/merge_taxonomy_hamronization' -include { HAMRONIZATION_RGI } from '../../modules/nf-core/hamronization/rgi/main' -include { HAMRONIZATION_FARGENE } from '../../modules/nf-core/hamronization/fargene/main' -include { HAMRONIZATION_SUMMARIZE } from '../../modules/nf-core/hamronization/summarize/main' -include { HAMRONIZATION_ABRICATE } from '../../modules/nf-core/hamronization/abricate/main' -include { HAMRONIZATION_DEEPARG } from '../../modules/nf-core/hamronization/deeparg/main' -include { HAMRONIZATION_AMRFINDERPLUS } from '../../modules/nf-core/hamronization/amrfinderplus/main' -include { ARGNORM as ARGNORM_DEEPARG } from '../../modules/nf-core/argnorm/main' -include { ARGNORM as ARGNORM_ABRICATE } from '../../modules/nf-core/argnorm/main' -include { ARGNORM as ARGNORM_AMRFINDERPLUS } from '../../modules/nf-core/argnorm/main' +include { ABRICATE_RUN } from '../../modules/nf-core/abricate/run/main' +include { AMRFINDERPLUS_UPDATE } from '../../modules/nf-core/amrfinderplus/update/main' +include { AMRFINDERPLUS_RUN } from '../../modules/nf-core/amrfinderplus/run/main' +include { DEEPARG_DOWNLOADDATA } from '../../modules/nf-core/deeparg/downloaddata/main' +include { DEEPARG_PREDICT } from '../../modules/nf-core/deeparg/predict/main' +include { FARGENE } from '../../modules/nf-core/fargene/main' +include { RGI_CARDANNOTATION } from '../../modules/nf-core/rgi/cardannotation/main' +include { RGI_MAIN } from '../../modules/nf-core/rgi/main/main' +include { UNTAR as UNTAR_CARD } from '../../modules/nf-core/untar/main' +include { TABIX_BGZIP as ARG_TABIX_BGZIP } from '../../modules/nf-core/tabix/bgzip/main' +include { MERGE_TAXONOMY_HAMRONIZATION } from '../../modules/local/merge_taxonomy_hamronization' +include { HAMRONIZATION_RGI } from '../../modules/nf-core/hamronization/rgi/main' +include { HAMRONIZATION_FARGENE } from '../../modules/nf-core/hamronization/fargene/main' +include { HAMRONIZATION_SUMMARIZE } from '../../modules/nf-core/hamronization/summarize/main' +include { HAMRONIZATION_ABRICATE } from '../../modules/nf-core/hamronization/abricate/main' +include { HAMRONIZATION_DEEPARG } from '../../modules/nf-core/hamronization/deeparg/main' +include { HAMRONIZATION_AMRFINDERPLUS } from '../../modules/nf-core/hamronization/amrfinderplus/main' +include { ARGNORM as ARGNORM_DEEPARG } from '../../modules/nf-core/argnorm/main' +include { ARGNORM as ARGNORM_ABRICATE } from '../../modules/nf-core/argnorm/main' +include { ARGNORM as ARGNORM_AMRFINDERPLUS } from '../../modules/nf-core/argnorm/main' workflow ARG { take: @@ -36,181 +36,179 @@ workflow ARG { ch_input_to_hamronization_summarize = Channel.empty() // AMRfinderplus run - // Prepare channel for database - if ( !params.arg_skip_amrfinderplus && params.arg_amrfinderplus_db ) { + // Prepare channel for database + if (!params.arg_skip_amrfinderplus && params.arg_amrfinderplus_db) { ch_amrfinderplus_db = Channel - .fromPath( params.arg_amrfinderplus_db ) + .fromPath(params.arg_amrfinderplus_db, checkIfExists: true) .first() - } else if ( !params.arg_skip_amrfinderplus && !params.arg_amrfinderplus_db ) { - AMRFINDERPLUS_UPDATE( ) - ch_versions = ch_versions.mix( AMRFINDERPLUS_UPDATE.out.versions ) + } + else if (!params.arg_skip_amrfinderplus && !params.arg_amrfinderplus_db) { + AMRFINDERPLUS_UPDATE() + ch_versions = ch_versions.mix(AMRFINDERPLUS_UPDATE.out.versions) ch_amrfinderplus_db = AMRFINDERPLUS_UPDATE.out.db } - if ( !params.arg_skip_amrfinderplus ) { - AMRFINDERPLUS_RUN ( fastas, ch_amrfinderplus_db ) - ch_versions = ch_versions.mix( AMRFINDERPLUS_RUN.out.versions ) - - // Reporting - HAMRONIZATION_AMRFINDERPLUS ( AMRFINDERPLUS_RUN.out.report, 'tsv', AMRFINDERPLUS_RUN.out.tool_version, AMRFINDERPLUS_RUN.out.db_version ) - ch_versions = ch_versions.mix( HAMRONIZATION_AMRFINDERPLUS.out.versions ) - ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix( HAMRONIZATION_AMRFINDERPLUS.out.tsv ) + if (!params.arg_skip_amrfinderplus) { + AMRFINDERPLUS_RUN(fastas, ch_amrfinderplus_db) + ch_versions = ch_versions.mix(AMRFINDERPLUS_RUN.out.versions) - if ( !params.arg_skip_argnorm ) { - ch_input_to_argnorm_amrfinderplus = HAMRONIZATION_AMRFINDERPLUS.out.tsv.filter{ meta, file -> !file.isEmpty() } - ARGNORM_AMRFINDERPLUS ( ch_input_to_argnorm_amrfinderplus, 'amrfinderplus', 'ncbi' ) - ch_versions = ch_versions.mix( ARGNORM_AMRFINDERPLUS.out.versions ) + // Reporting + HAMRONIZATION_AMRFINDERPLUS(AMRFINDERPLUS_RUN.out.report, 'tsv', AMRFINDERPLUS_RUN.out.tool_version, AMRFINDERPLUS_RUN.out.db_version) + ch_versions = ch_versions.mix(HAMRONIZATION_AMRFINDERPLUS.out.versions) + ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix(HAMRONIZATION_AMRFINDERPLUS.out.tsv) + + if (!params.arg_skip_argnorm) { + ch_input_to_argnorm_amrfinderplus = HAMRONIZATION_AMRFINDERPLUS.out.tsv.filter { meta, file -> !file.isEmpty() } + ARGNORM_AMRFINDERPLUS(ch_input_to_argnorm_amrfinderplus, 'amrfinderplus', 'ncbi') + ch_versions = ch_versions.mix(ARGNORM_AMRFINDERPLUS.out.versions) } } // fARGene run - if ( !params.arg_skip_fargene ) { - ch_fargene_classes = Channel.fromList( params.arg_fargene_hmmmodel.tokenize(',') ) + if (!params.arg_skip_fargene) { + ch_fargene_classes = Channel.fromList(params.arg_fargene_hmmmodel.tokenize(',')) ch_fargene_input = fastas - .combine( ch_fargene_classes ) - .map { - meta, fastas, hmm_class -> - def meta_new = meta.clone() - meta_new['hmm_class'] = hmm_class - [ meta_new, fastas, hmm_class ] - } - .multiMap { - fastas: [ it[0], it[1] ] - hmmclass: it[2] - } - - FARGENE ( ch_fargene_input.fastas, ch_fargene_input.hmmclass ) - ch_versions = ch_versions.mix( FARGENE.out.versions ) + .combine(ch_fargene_classes) + .map { meta, fastas, hmm_class -> + def meta_new = meta.clone() + meta_new['hmm_class'] = hmm_class + [meta_new, fastas, hmm_class] + } + .multiMap { + fastas: [it[0], it[1]] + hmmclass: it[2] + } + + FARGENE(ch_fargene_input.fastas, ch_fargene_input.hmmclass) + ch_versions = ch_versions.mix(FARGENE.out.versions) // Reporting // Note: currently hardcoding versions, has to be updated with every fARGene-update - HAMRONIZATION_FARGENE( FARGENE.out.hmm_genes.transpose(), 'tsv', '0.1', '0.1' ) - ch_versions = ch_versions.mix( HAMRONIZATION_FARGENE.out.versions ) - ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix( HAMRONIZATION_FARGENE.out.tsv ) + HAMRONIZATION_FARGENE(FARGENE.out.hmm_genes.transpose(), 'tsv', '0.1', '0.1') + ch_versions = ch_versions.mix(HAMRONIZATION_FARGENE.out.versions) + ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix(HAMRONIZATION_FARGENE.out.tsv) } // RGI run - if ( !params.arg_skip_rgi ) { + if (!params.arg_skip_rgi) { - if ( !params.arg_rgi_db ) { + if (!params.arg_rgi_db) { // Download and untar CARD - UNTAR_CARD ( [ [], file('https://card.mcmaster.ca/latest/data', checkIfExists: true) ] ) - ch_versions = ch_versions.mix( UNTAR_CARD.out.versions ) - rgi_db = UNTAR_CARD.out.untar.map{ it[1] } - RGI_CARDANNOTATION ( rgi_db ) + UNTAR_CARD([[], file('https://card.mcmaster.ca/latest/data', checkIfExists: true)]) + ch_versions = ch_versions.mix(UNTAR_CARD.out.versions) + rgi_db = UNTAR_CARD.out.untar.map { it[1] } + RGI_CARDANNOTATION(rgi_db) card = RGI_CARDANNOTATION.out.db - ch_versions = ch_versions.mix( RGI_CARDANNOTATION.out.versions ) - - } else { + ch_versions = ch_versions.mix(RGI_CARDANNOTATION.out.versions) + } + else { // Use user-supplied database - rgi_db = params.arg_rgi_db - if (! rgi_db.contains("card_database_processed") ) { - RGI_CARDANNOTATION ( rgi_db ) + rgi_db = file(params.arg_rgi_db, checkIfExists: true) + if (!rgi_db.contains("card_database_processed")) { + RGI_CARDANNOTATION(rgi_db) card = RGI_CARDANNOTATION.out.db - ch_versions = ch_versions.mix( RGI_CARDANNOTATION.out.versions ) - } else { + ch_versions = ch_versions.mix(RGI_CARDANNOTATION.out.versions) + } + else { card = rgi_db } - } - RGI_MAIN ( fastas, card, [] ) - ch_versions = ch_versions.mix( RGI_MAIN.out.versions ) + RGI_MAIN(fastas, card, []) + ch_versions = ch_versions.mix(RGI_MAIN.out.versions) // Reporting - HAMRONIZATION_RGI ( RGI_MAIN.out.tsv, 'tsv', RGI_MAIN.out.tool_version, RGI_MAIN.out.db_version ) - ch_versions = ch_versions.mix( HAMRONIZATION_RGI.out.versions ) - ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix( HAMRONIZATION_RGI.out.tsv ) + HAMRONIZATION_RGI(RGI_MAIN.out.tsv, 'tsv', RGI_MAIN.out.tool_version, RGI_MAIN.out.db_version) + ch_versions = ch_versions.mix(HAMRONIZATION_RGI.out.versions) + ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix(HAMRONIZATION_RGI.out.tsv) } // DeepARG prepare download - if ( !params.arg_skip_deeparg && params.arg_deeparg_db ) { + if (!params.arg_skip_deeparg && params.arg_deeparg_db) { ch_deeparg_db = Channel - .fromPath( params.arg_deeparg_db ) + .fromPath(params.arg_deeparg_db, checkIfExists: true) .first() - } else if ( !params.arg_skip_deeparg && !params.arg_deeparg_db ) { - DEEPARG_DOWNLOADDATA( ) - ch_versions = ch_versions.mix( DEEPARG_DOWNLOADDATA.out.versions ) + } + else if (!params.arg_skip_deeparg && !params.arg_deeparg_db) { + DEEPARG_DOWNLOADDATA() + ch_versions = ch_versions.mix(DEEPARG_DOWNLOADDATA.out.versions) ch_deeparg_db = DEEPARG_DOWNLOADDATA.out.db } // DeepARG run - if ( !params.arg_skip_deeparg ) { + if (!params.arg_skip_deeparg) { annotations - .map { - it -> - def meta = it[0] - def anno = it[1] - def model = params.arg_deeparg_model + .map { it -> + def meta = it[0] + def anno = it[1] + def model = params.arg_deeparg_model - [ meta, anno, model ] - } - .set { ch_input_for_deeparg } + [meta, anno, model] + } + .set { ch_input_for_deeparg } - DEEPARG_PREDICT ( ch_input_for_deeparg, ch_deeparg_db ) - ch_versions = ch_versions.mix( DEEPARG_PREDICT.out.versions ) + DEEPARG_PREDICT(ch_input_for_deeparg, ch_deeparg_db) + ch_versions = ch_versions.mix(DEEPARG_PREDICT.out.versions) // Reporting // Note: currently hardcoding versions as unreported by DeepARG // Make sure to update on version bump. - ch_input_to_hamronization_deeparg = DEEPARG_PREDICT.out.arg.mix( DEEPARG_PREDICT.out.potential_arg ) - HAMRONIZATION_DEEPARG ( ch_input_to_hamronization_deeparg, 'tsv', '1.0.4', params.arg_deeparg_db_version ) - ch_versions = ch_versions.mix( HAMRONIZATION_DEEPARG.out.versions ) - ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix( HAMRONIZATION_DEEPARG.out.tsv ) - - if ( !params.arg_skip_argnorm ) { - ch_input_to_argnorm_deeparg = HAMRONIZATION_DEEPARG.out.tsv.filter{ meta, file -> !file.isEmpty() } - ARGNORM_DEEPARG ( ch_input_to_argnorm_deeparg, 'deeparg', 'deeparg' ) - ch_versions = ch_versions.mix( ARGNORM_DEEPARG.out.versions ) + ch_input_to_hamronization_deeparg = DEEPARG_PREDICT.out.arg.mix(DEEPARG_PREDICT.out.potential_arg) + HAMRONIZATION_DEEPARG(ch_input_to_hamronization_deeparg, 'tsv', '1.0.4', params.arg_deeparg_db_version) + ch_versions = ch_versions.mix(HAMRONIZATION_DEEPARG.out.versions) + ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix(HAMRONIZATION_DEEPARG.out.tsv) + + if (!params.arg_skip_argnorm) { + ch_input_to_argnorm_deeparg = HAMRONIZATION_DEEPARG.out.tsv.filter { meta, file -> !file.isEmpty() } + ARGNORM_DEEPARG(ch_input_to_argnorm_deeparg, 'deeparg', 'deeparg') + ch_versions = ch_versions.mix(ARGNORM_DEEPARG.out.versions) } } // ABRicate run - if ( !params.arg_skip_abricate ) { + if (!params.arg_skip_abricate) { abricate_dbdir = params.arg_abricate_db ? file(params.arg_abricate_db, checkIfExists: true) : [] - ABRICATE_RUN ( fastas, abricate_dbdir ) - ch_versions = ch_versions.mix( ABRICATE_RUN.out.versions ) - - HAMRONIZATION_ABRICATE ( ABRICATE_RUN.out.report, 'tsv', '1.0.1', '2021-Mar-27' ) - ch_versions = ch_versions.mix( HAMRONIZATION_ABRICATE.out.versions ) - ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix( HAMRONIZATION_ABRICATE.out.tsv ) - - if ( ( params.arg_abricate_db_id == 'ncbi' || - params.arg_abricate_db_id == 'resfinder' || - params.arg_abricate_db_id == 'argannot' || - params.arg_abricate_db_id == 'megares') && !params.arg_skip_argnorm ) { - ch_input_to_argnorm_abricate = HAMRONIZATION_ABRICATE.out.tsv.filter{ meta, file -> !file.isEmpty() } - ARGNORM_ABRICATE ( ch_input_to_argnorm_abricate, 'abricate', params.arg_abricate_db_id ) - ch_versions = ch_versions.mix( ARGNORM_ABRICATE.out.versions ) + ABRICATE_RUN(fastas, abricate_dbdir) + ch_versions = ch_versions.mix(ABRICATE_RUN.out.versions) + + HAMRONIZATION_ABRICATE(ABRICATE_RUN.out.report, 'tsv', '1.0.1', '2021-Mar-27') + ch_versions = ch_versions.mix(HAMRONIZATION_ABRICATE.out.versions) + ch_input_to_hamronization_summarize = ch_input_to_hamronization_summarize.mix(HAMRONIZATION_ABRICATE.out.tsv) + + if ((params.arg_abricate_db_id == 'ncbi' || params.arg_abricate_db_id == 'resfinder' || params.arg_abricate_db_id == 'argannot' || params.arg_abricate_db_id == 'megares') && !params.arg_skip_argnorm) { + ch_input_to_argnorm_abricate = HAMRONIZATION_ABRICATE.out.tsv.filter { meta, file -> !file.isEmpty() } + ARGNORM_ABRICATE(ch_input_to_argnorm_abricate, 'abricate', params.arg_abricate_db_id) + ch_versions = ch_versions.mix(ARGNORM_ABRICATE.out.versions) } } ch_input_to_hamronization_summarize - .map{ + .map { it[1] } .collect() .set { ch_input_for_hamronization_summarize } - HAMRONIZATION_SUMMARIZE( ch_input_for_hamronization_summarize, params.arg_hamronization_summarizeformat ) - ch_versions = ch_versions.mix( HAMRONIZATION_SUMMARIZE.out.versions ) + HAMRONIZATION_SUMMARIZE(ch_input_for_hamronization_summarize, params.arg_hamronization_summarizeformat) + ch_versions = ch_versions.mix(HAMRONIZATION_SUMMARIZE.out.versions) // MERGE_TAXONOMY - if ( params.run_taxa_classification ) { + if (params.run_taxa_classification) { - ch_mmseqs_taxonomy_list = tsvs.map{ it[1] }.collect() - MERGE_TAXONOMY_HAMRONIZATION( HAMRONIZATION_SUMMARIZE.out.tsv, ch_mmseqs_taxonomy_list ) - ch_versions = ch_versions.mix( MERGE_TAXONOMY_HAMRONIZATION.out.versions ) + ch_mmseqs_taxonomy_list = tsvs.map { it[1] }.collect() + MERGE_TAXONOMY_HAMRONIZATION(HAMRONIZATION_SUMMARIZE.out.tsv, ch_mmseqs_taxonomy_list) + ch_versions = ch_versions.mix(MERGE_TAXONOMY_HAMRONIZATION.out.versions) - ch_tabix_input = Channel.of( [ 'id':'hamronization_combined_report' ] ) + ch_tabix_input = Channel + .of(['id': 'hamronization_combined_report']) .combine(MERGE_TAXONOMY_HAMRONIZATION.out.tsv) - ARG_TABIX_BGZIP( ch_tabix_input ) - ch_versions = ch_versions.mix( ARG_TABIX_BGZIP.out.versions ) + ARG_TABIX_BGZIP(ch_tabix_input) + ch_versions = ch_versions.mix(ARG_TABIX_BGZIP.out.versions) } emit: diff --git a/subworkflows/local/bgc.nf b/subworkflows/local/bgc.nf index 0130205d..25b21daa 100644 --- a/subworkflows/local/bgc.nf +++ b/subworkflows/local/bgc.nf @@ -16,7 +16,6 @@ include { TABIX_BGZIP as BGC_TABIX_BGZIP } from '../../modules/nf-core include { MERGE_TAXONOMY_COMBGC } from '../../modules/local/merge_taxonomy_combgc' workflow BGC { - take: fastas // tuple val(meta), path(PREPPED_INPUT.out.fna) faas // tuple val(meta), path(.out.faa) @@ -24,7 +23,7 @@ workflow BGC { tsvs // tuple val(meta), path(MMSEQS_CREATETSV.out.tsv) main: - ch_versions = Channel.empty() + ch_versions = Channel.empty() ch_bgcresults_for_combgc = Channel.empty() // When adding new tool that requires FAA, make sure to update conditions @@ -33,168 +32,173 @@ workflow BGC { ch_faa_for_bgc_hmmsearch = faas // ANTISMASH - if ( !params.bgc_skip_antismash ) { + if (!params.bgc_skip_antismash) { // Check whether user supplies database and/or antismash directory. If not, obtain them via the module antismashlite/antismashlitedownloaddatabases. // Important for future maintenance: For CI tests, only the "else" option below is used. Both options should be tested locally whenever the antiSMASH module gets updated. - if ( params.bgc_antismash_db && params.bgc_antismash_installdir ) { + if (params.bgc_antismash_db && params.bgc_antismash_installdir) { ch_antismash_databases = Channel - .fromPath( params.bgc_antismash_db ) + .fromPath(params.bgc_antismash_db, checkIfExists: true) .first() ch_antismash_directory = Channel - .fromPath( params.bgc_antismash_installdir ) + .fromPath(params.bgc_antismash_installdir, checkIfExists: true) .first() - - } else if ( params.bgc_antismash_db && ( session.config.conda && session.config.conda.enabled ) ) { + } + else if (params.bgc_antismash_db && (session.config.conda && session.config.conda.enabled)) { ch_antismash_databases = Channel - .fromPath( params.bgc_antismash_db ) + .fromPath(params.bgc_antismash_db, checkIfExists: true) .first() ch_antismash_directory = [] - - } else { + } + else { // May need to update on each new version of antismash-lite due to changes to scripts inside these tars ch_css_for_antismash = "https://github.com/nf-core/test-datasets/raw/724737e23a53085129cd5e015acafbf7067822ca/data/delete_me/antismash/css.tar.gz" ch_detection_for_antismash = "https://github.com/nf-core/test-datasets/raw/c3174c50bf654e477bf329dbaf72acc8345f9b7a/data/delete_me/antismash/detection.tar.gz" ch_modules_for_antismash = "https://github.com/nf-core/test-datasets/raw/c3174c50bf654e477bf329dbaf72acc8345f9b7a/data/delete_me/antismash/modules.tar.gz" - UNTAR_CSS ( [ [], ch_css_for_antismash ] ) - ch_versions = ch_versions.mix( UNTAR_CSS.out.versions ) + UNTAR_CSS([[], ch_css_for_antismash]) + ch_versions = ch_versions.mix(UNTAR_CSS.out.versions) - UNTAR_DETECTION ( [ [], ch_detection_for_antismash ] ) - ch_versions = ch_versions.mix( UNTAR_DETECTION.out.versions ) + UNTAR_DETECTION([[], ch_detection_for_antismash]) + ch_versions = ch_versions.mix(UNTAR_DETECTION.out.versions) - UNTAR_MODULES ( [ [], ch_modules_for_antismash ] ) - ch_versions = ch_versions.mix( UNTAR_MODULES.out.versions ) + UNTAR_MODULES([[], ch_modules_for_antismash]) + ch_versions = ch_versions.mix(UNTAR_MODULES.out.versions) - ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES ( UNTAR_CSS.out.untar.map{ it[1] }, UNTAR_DETECTION.out.untar.map{ it[1] }, UNTAR_MODULES.out.untar.map{ it[1] } ) - ch_versions = ch_versions.mix( ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES.out.versions ) + ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES(UNTAR_CSS.out.untar.map { it[1] }, UNTAR_DETECTION.out.untar.map { it[1] }, UNTAR_MODULES.out.untar.map { it[1] }) + ch_versions = ch_versions.mix(ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES.out.versions) ch_antismash_databases = ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES.out.database ch_antismash_directory = ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES.out.antismash_dir } - ANTISMASH_ANTISMASHLITE ( gbks, ch_antismash_databases, ch_antismash_directory, [] ) + ANTISMASH_ANTISMASHLITE(gbks, ch_antismash_databases, ch_antismash_directory, []) - ch_versions = ch_versions.mix( ANTISMASH_ANTISMASHLITE.out.versions ) + ch_versions = ch_versions.mix(ANTISMASH_ANTISMASHLITE.out.versions) ch_antismashresults = ANTISMASH_ANTISMASHLITE.out.knownclusterblast_dir - .mix( ANTISMASH_ANTISMASHLITE.out.gbk_input ) - .groupTuple() - .map{ - meta, files -> - [ meta, files.flatten() ] - } + .mix(ANTISMASH_ANTISMASHLITE.out.gbk_input) + .groupTuple() + .map { meta, files -> + [meta, files.flatten()] + } // Filter out samples with no BGC hits ch_antismashresults_for_combgc = ch_antismashresults .join(fastas, remainder: false) .join(ANTISMASH_ANTISMASHLITE.out.gbk_results, remainder: false) - .map { - meta, gbk_input, fasta, gbk_results -> - [ meta, gbk_input ] + .map { meta, gbk_input, fasta, gbk_results -> + [meta, gbk_input] } - ch_bgcresults_for_combgc = ch_bgcresults_for_combgc.mix( ch_antismashresults_for_combgc ) + ch_bgcresults_for_combgc = ch_bgcresults_for_combgc.mix(ch_antismashresults_for_combgc) } // DEEPBGC - if ( !params.bgc_skip_deepbgc ) { - if ( params.bgc_deepbgc_db ) { + if (!params.bgc_skip_deepbgc) { + if (params.bgc_deepbgc_db) { ch_deepbgc_database = Channel - .fromPath( params.bgc_deepbgc_db ) + .fromPath(params.bgc_deepbgc_db, checkIfExists: true) .first() - } else { + } + else { DEEPBGC_DOWNLOAD() ch_deepbgc_database = DEEPBGC_DOWNLOAD.out.db - ch_versions = ch_versions.mix( DEEPBGC_DOWNLOAD.out.versions ) + ch_versions = ch_versions.mix(DEEPBGC_DOWNLOAD.out.versions) } - DEEPBGC_PIPELINE ( gbks, ch_deepbgc_database ) - ch_versions = ch_versions.mix( DEEPBGC_PIPELINE.out.versions ) - ch_bgcresults_for_combgc = ch_bgcresults_for_combgc.mix( DEEPBGC_PIPELINE.out.bgc_tsv ) + DEEPBGC_PIPELINE(gbks, ch_deepbgc_database) + ch_versions = ch_versions.mix(DEEPBGC_PIPELINE.out.versions) + ch_bgcresults_for_combgc = ch_bgcresults_for_combgc.mix(DEEPBGC_PIPELINE.out.bgc_tsv) } // GECCO - if ( !params.bgc_skip_gecco ) { - ch_gecco_input = gbks.groupTuple() - .multiMap { - fastas: [ it[0], it[1], [] ] - } - - GECCO_RUN ( ch_gecco_input, [] ) - ch_versions = ch_versions.mix( GECCO_RUN.out.versions ) + if (!params.bgc_skip_gecco) { + ch_gecco_input = gbks + .groupTuple() + .multiMap { + fastas: [it[0], it[1], []] + } + + GECCO_RUN(ch_gecco_input, []) + ch_versions = ch_versions.mix(GECCO_RUN.out.versions) ch_geccoresults_for_combgc = GECCO_RUN.out.gbk - .mix( GECCO_RUN.out.clusters ) + .mix(GECCO_RUN.out.clusters) .groupTuple() - .map{ - meta, files -> - [ meta, files.flatten() ] + .map { meta, files -> + [meta, files.flatten()] } - ch_bgcresults_for_combgc = ch_bgcresults_for_combgc.mix( ch_geccoresults_for_combgc ) + ch_bgcresults_for_combgc = ch_bgcresults_for_combgc.mix(ch_geccoresults_for_combgc) } // HMMSEARCH - if ( params.bgc_run_hmmsearch ) { - if ( params.bgc_hmmsearch_models ) { ch_bgc_hmm_models = Channel.fromPath( params.bgc_hmmsearch_models, checkIfExists: true ) } else { error('[nf-core/funcscan] error: hmm model files not found for --bgc_hmmsearch_models! Please check input.') } + if (params.bgc_run_hmmsearch) { + if (params.bgc_hmmsearch_models) { + ch_bgc_hmm_models = Channel.fromPath(params.bgc_hmmsearch_models, checkIfExists: true) + } + else { + error('[nf-core/funcscan] error: hmm model files not found for --bgc_hmmsearch_models! Please check input.') + } - ch_bgc_hmm_models_meta = ch_bgc_hmm_models - .map { - file -> - def meta = [:] - meta['id'] = file.extension == 'gz' ? file.name - '.hmm.gz' : file.name - '.hmm' + ch_bgc_hmm_models_meta = ch_bgc_hmm_models.map { file -> + def meta = [:] + meta['id'] = file.extension == 'gz' ? file.name - '.hmm.gz' : file.name - '.hmm' - [ meta, file ] - } + [meta, file] + } - ch_in_for_bgc_hmmsearch = ch_faa_for_bgc_hmmsearch.combine(ch_bgc_hmm_models_meta) - .map { - meta_faa, faa, meta_hmm, hmm -> - def meta_new = [:] - meta_new['id'] = meta_faa['id'] - meta_new['hmm_id'] = meta_hmm['id'] - [ meta_new, hmm, faa, params.bgc_hmmsearch_savealignments, params.bgc_hmmsearch_savetargets, params.bgc_hmmsearch_savedomains ] + ch_in_for_bgc_hmmsearch = ch_faa_for_bgc_hmmsearch + .combine(ch_bgc_hmm_models_meta) + .map { meta_faa, faa, meta_hmm, hmm -> + def meta_new = [:] + meta_new['id'] = meta_faa['id'] + meta_new['hmm_id'] = meta_hmm['id'] + [meta_new, hmm, faa, params.bgc_hmmsearch_savealignments, params.bgc_hmmsearch_savetargets, params.bgc_hmmsearch_savedomains] } - BGC_HMMER_HMMSEARCH ( ch_in_for_bgc_hmmsearch ) - ch_versions = ch_versions.mix( BGC_HMMER_HMMSEARCH.out.versions ) + BGC_HMMER_HMMSEARCH(ch_in_for_bgc_hmmsearch) + ch_versions = ch_versions.mix(BGC_HMMER_HMMSEARCH.out.versions) } // COMBGC ch_bgcresults_for_combgc .join(fastas, remainder: true) - .filter { - meta, bgcfile, fasta -> - if ( !bgcfile ) { log.warn("[nf-core/funcscan] BGC workflow: No hits found by BGC tools; comBGC summary tool will not be run for sample: ${meta.id}") } - return [meta, bgcfile, fasta] + .filter { meta, bgcfile, fasta -> + if (!bgcfile) { + log.warn("[nf-core/funcscan] BGC workflow: No hits found by BGC tools; comBGC summary tool will not be run for sample: ${meta.id}") + } + return [meta, bgcfile, fasta] } - COMBGC ( ch_bgcresults_for_combgc ) - ch_versions = ch_versions.mix( COMBGC.out.versions ) + COMBGC(ch_bgcresults_for_combgc) + ch_versions = ch_versions.mix(COMBGC.out.versions) // COMBGC concatenation - if ( !params.run_taxa_classification ) { - ch_combgc_summaries = COMBGC.out.tsv.map{ it[1] }.collectFile( name: 'combgc_complete_summary.tsv', storeDir: "${params.outdir}/reports/combgc", keepHeader:true ) - } else { - ch_combgc_summaries = COMBGC.out.tsv.map{ it[1] }.collectFile( name: 'combgc_complete_summary.tsv', keepHeader:true ) + if (!params.run_taxa_classification) { + ch_combgc_summaries = COMBGC.out.tsv.map { it[1] }.collectFile(name: 'combgc_complete_summary.tsv', storeDir: "${params.outdir}/reports/combgc", keepHeader: true) + } + else { + ch_combgc_summaries = COMBGC.out.tsv.map { it[1] }.collectFile(name: 'combgc_complete_summary.tsv', keepHeader: true) } // MERGE_TAXONOMY - if ( params.run_taxa_classification ) { + if (params.run_taxa_classification) { - ch_mmseqs_taxonomy_list = tsvs.map{ it[1] }.collect() - MERGE_TAXONOMY_COMBGC( ch_combgc_summaries, ch_mmseqs_taxonomy_list ) - ch_versions = ch_versions.mix( MERGE_TAXONOMY_COMBGC.out.versions ) + ch_mmseqs_taxonomy_list = tsvs.map { it[1] }.collect() + MERGE_TAXONOMY_COMBGC(ch_combgc_summaries, ch_mmseqs_taxonomy_list) + ch_versions = ch_versions.mix(MERGE_TAXONOMY_COMBGC.out.versions) - ch_tabix_input = Channel.of( [ 'id':'combgc_complete_summary_taxonomy' ] ) + ch_tabix_input = Channel + .of(['id': 'combgc_complete_summary_taxonomy']) .combine(MERGE_TAXONOMY_COMBGC.out.tsv) - BGC_TABIX_BGZIP( ch_tabix_input ) - ch_versions = ch_versions.mix( BGC_TABIX_BGZIP.out.versions ) + BGC_TABIX_BGZIP(ch_tabix_input) + ch_versions = ch_versions.mix(BGC_TABIX_BGZIP.out.versions) } emit: diff --git a/subworkflows/local/taxa_class.nf b/subworkflows/local/taxa_class.nf index d76e1dff..0bf67312 100644 --- a/subworkflows/local/taxa_class.nf +++ b/subworkflows/local/taxa_class.nf @@ -12,47 +12,48 @@ workflow TAXA_CLASS { contigs // tuple val(meta), path(contigs) main: - ch_versions = Channel.empty() - ch_mmseqs_db = Channel.empty() - ch_taxonomy_querydb = Channel.empty() + ch_versions = Channel.empty() + ch_mmseqs_db = Channel.empty() + ch_taxonomy_querydb = Channel.empty() ch_taxonomy_querydb_taxdb = Channel.empty() - ch_taxonomy_tsv = Channel.empty() + ch_taxonomy_tsv = Channel.empty() - if ( params.taxa_classification_tool == 'mmseqs2') { + if (params.taxa_classification_tool == 'mmseqs2') { // Download the ref db if not supplied by user // MMSEQS_DATABASE - if ( params.taxa_classification_mmseqs_db != null ) { + if (params.taxa_classification_mmseqs_db != null) { ch_mmseqs_db = Channel - .fromPath( params.taxa_classification_mmseqs_db ) + .fromPath(params.taxa_classification_mmseqs_db, checkIfExists: true) .first() - } else { - MMSEQS_DATABASES ( params.taxa_classification_mmseqs_db_id ) - ch_versions = ch_versions.mix( MMSEQS_DATABASES.out.versions ) - ch_mmseqs_db = ( MMSEQS_DATABASES.out.database ) + } + else { + MMSEQS_DATABASES(params.taxa_classification_mmseqs_db_id) + ch_versions = ch_versions.mix(MMSEQS_DATABASES.out.versions) + ch_mmseqs_db = MMSEQS_DATABASES.out.database } // Create db for query contigs, assign taxonomy and convert to table format // MMSEQS_CREATEDB - MMSEQS_CREATEDB ( contigs ) - ch_versions = ch_versions.mix( MMSEQS_CREATEDB.out.versions ) + MMSEQS_CREATEDB(contigs) + ch_versions = ch_versions.mix(MMSEQS_CREATEDB.out.versions) // MMSEQS_TAXONOMY - MMSEQS_TAXONOMY ( MMSEQS_CREATEDB.out.db, ch_mmseqs_db ) - ch_versions = ch_versions.mix( MMSEQS_TAXONOMY.out.versions ) + MMSEQS_TAXONOMY(MMSEQS_CREATEDB.out.db, ch_mmseqs_db) + ch_versions = ch_versions.mix(MMSEQS_TAXONOMY.out.versions) ch_taxonomy_querydb_taxdb = MMSEQS_TAXONOMY.out.db_taxonomy // Join together to ensure in sync ch_taxonomy_input_for_createtsv = MMSEQS_CREATEDB.out.db - .join(MMSEQS_TAXONOMY.out.db_taxonomy) - .multiMap { meta, db, db_taxonomy -> - db: [ meta,db ] - taxdb: [ meta, db_taxonomy ] - } + .join(MMSEQS_TAXONOMY.out.db_taxonomy) + .multiMap { meta, db, db_taxonomy -> + db: [meta, db] + taxdb: [meta, db_taxonomy] + } // MMSEQS_CREATETSV - MMSEQS_CREATETSV ( ch_taxonomy_input_for_createtsv.taxdb, [[:],[]], ch_taxonomy_input_for_createtsv.db ) - ch_versions = ch_versions.mix( MMSEQS_CREATETSV.out.versions ) + MMSEQS_CREATETSV(ch_taxonomy_input_for_createtsv.taxdb, [[:], []], ch_taxonomy_input_for_createtsv.db) + ch_versions = ch_versions.mix(MMSEQS_CREATETSV.out.versions) ch_taxonomy_tsv = MMSEQS_CREATETSV.out.tsv } diff --git a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf index bfce1c70..27dce6cb 100644 --- a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf @@ -43,7 +43,7 @@ workflow PIPELINE_INITIALISATION { version, true, outdir, - workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1 + workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1, ) // @@ -52,7 +52,7 @@ workflow PIPELINE_INITIALISATION { UTILS_NFSCHEMA_PLUGIN( workflow, validate_params, - null + null, ) // @@ -183,7 +183,7 @@ def toolCitationText() { params.annotation_tool == 'prodigal' ? "Prodigal (Hyatt et al. 2010)." : "", params.annotation_tool == 'pyrodigal' ? "Pyrodigal (Larralde 2022)." : "", params.annotation_tool == 'bakta' ? "BAKTA (Schwengers et al. 2021)." : "", - params.annotation_tool == 'prokka' ? "PROKKA (Seemann 2014)." : "" + params.annotation_tool == 'prokka' ? "PROKKA (Seemann 2014)." : "", ].join(' ').trim() def amp_text = [ @@ -192,7 +192,7 @@ def toolCitationText() { !params.amp_skip_macrel ? "Macrel (Santos-Júnior et al. 2020)," : "", !params.amp_skip_ampir ? "ampir (Fingerhut et al. 2021)," : "", params.amp_run_hmmsearch ? "HMMER (Eddy 2011)," : "", - ". The output from the antimicrobial peptide screening tools were standardised and summarised with AMPcombi (Ibrahim and Perelo 2023)." + ". The output from the antimicrobial peptide screening tools were standardised and summarised with AMPcombi (Ibrahim and Perelo 2023).", ].join(' ').trim().replaceAll(', .', ".") def arg_text = [ @@ -203,7 +203,7 @@ def toolCitationText() { !params.arg_skip_deeparg ? "deepARG (Arango-Argoty 2018)," : "", !params.arg_skip_abricate ? "ABRicate (Seemann 2020)," : "", !params.arg_skip_argnorm ? ". The outputs from ARG screening tools were normalized to the antibiotic resistance ontology using argNorm (Perovic et al. 2024)," : "", - ". The output from the antimicrobial resistance gene screening tools were standardised and summarised with hAMRonization (Maguire et al. 2023)." + ". The output from the antimicrobial resistance gene screening tools were standardised and summarised with hAMRonization (Maguire et al. 2023).", ].join(' ').trim().replaceAll(', +.', ".") def bgc_text = [ @@ -212,7 +212,7 @@ def toolCitationText() { !params.bgc_skip_deepbgc ? "deepBGC (Hannigan et al. 2019)," : "", !params.bgc_skip_gecco ? "GECCO (Carroll et al. 2021)," : "", params.bgc_run_hmmsearch ? "HMMER (Eddy 2011)," : "", - ". The output from the biosynthetic gene cluster screening tools were standardised and summarised with comBGC (Frangenberg et al. 2023)." + ". The output from the biosynthetic gene cluster screening tools were standardised and summarised with comBGC (Frangenberg et al. 2023).", ].join(' ').replaceAll(', +.', ".").trim() def postprocessing_text = "Run statistics were reported using MultiQC (Ewels et al. 2016)." @@ -223,7 +223,7 @@ def toolCitationText() { params.run_amp_screening ? amp_text : "", params.run_arg_screening ? arg_text : "", params.run_bgc_screening ? bgc_text : "", - postprocessing_text + postprocessing_text, ].join(' ').trim() return citation_text @@ -238,14 +238,14 @@ def toolBibliographyText() { params.annotation_tool == 'prodigal' ? '
  • Hyatt, D., Chen, G. L., Locascio, P. F., Land, M. L., Larimer, F. W., & Hauser, L. J. (2010). Prodigal: prokaryotic gene recognition and translation initiation site identification. BMC bioinformatics, 11, 119. DOI: 10.1186/1471-2105-11-119
  • ' : "", params.annotation_tool == 'pyrodigal' ? '
  • Larralde, M. (2022). Pyrodigal: Python bindings and interface to Prodigal, an efficient method for gene prediction in prokaryotes. Journal of Open Source Software, 7(72), 4296. DOI: 10.21105/joss.04296
  • ' : "", params.annotation_tool == 'bakta' ? '
  • Schwengers, O., Jelonek, L., Dieckmann, M. A., Beyvers, S., Blom, J., & Goesmann, A. (2021). Bakta: rapid and standardized annotation of bacterial genomes via alignment-free sequence identification. Microbial Genomics, 7(11). DOI: 10.1099/mgen.0.000685
  • ' : "", - params.annotation_tool == 'prokka' ? '
  • Seemann, T. (2014). Prokka: rapid prokaryotic genome annotation. Bioinformatics (Oxford, England), 30(14), 2068–2069. DOI: 10.1093/bioinformatics/btu153
  • ' : "" + params.annotation_tool == 'prokka' ? '
  • Seemann, T. (2014). Prokka: rapid prokaryotic genome annotation. Bioinformatics (Oxford, England), 30(14), 2068–2069. DOI: 10.1093/bioinformatics/btu153
  • ' : "", ].join(' ').trim() def amp_text = [ !params.amp_skip_amplify ? '
  • Li, C., Sutherland, D., Hammond, S. A., Yang, C., Taho, F., Bergman, L., Houston, S., Warren, R. L., Wong, T., Hoang, L., Cameron, C. E., Helbing, C. C., & Birol, I. (2022). AMPlify: attentive deep learning model for discovery of novel antimicrobial peptides effective against WHO priority pathogens. BMC genomics, 23(1), 77. DOI: 10.1186/s12864-022-08310-4
  • ' : "", !params.amp_skip_macrel ? '
  • Santos-Júnior, C. D., Pan, S., Zhao, X. M., & Coelho, L. P. (2020). Macrel: antimicrobial peptide screening in genomes and metagenomes. PeerJ, 8, e10555. DOI: 10.7717/peerj.10555
  • ' : "", !params.amp_skip_ampir ? '
  • Fingerhut, L., Miller, D. J., Strugnell, J. M., Daly, N. L., & Cooke, I. R. (2021). ampir: an R package for fast genome-wide prediction of antimicrobial peptides. Bioinformatics (Oxford, England), 36(21), 5262–5263. DOI: 10.1093/bioinformatics/btaa653
  • ' : "", - '
  • Ibrahim, A. & Perelo, L. (2023). Darcy220606/AMPcombi. DOI: 10.5281/zenodo.7639121
  • ' + '
  • Ibrahim, A. & Perelo, L. (2023). Darcy220606/AMPcombi. DOI: 10.5281/zenodo.7639121
  • ', ].join(' ').trim().replaceAll(', .', ".") def arg_text = [ @@ -255,7 +255,7 @@ def toolBibliographyText() { !params.arg_skip_deeparg ? '
  • Arango-Argoty, G., Garner, E., Pruden, A., Heath, L. S., Vikesland, P., & Zhang, L. (2018). DeepARG: a deep learning approach for predicting antibiotic resistance genes from metagenomic data. Microbiome, 6(1), 23. DOI: 10.1186/s40168-018-0401-z' : "", !params.arg_skip_abricate ? '
  • Seemann, T. (2020). ABRicate. Github https://github.com/tseemann/abricate.
  • ' : "", !params.arg_skip_argnorm ? '
  • Perovic, S. U., Ramji, V., Chong, H., Duan, Y., Maguire, F., Coelho, L. P. (2024). argNorm. DOI: .
  • ' : "", - '
  • Public Health Alliance for Genomic Epidemiology (pha4ge). (2022). Parse multiple Antimicrobial Resistance Analysis Reports into a common data structure. Github. Retrieved October 5, 2022, from https://github.com/pha4ge/hAMRonization
  • ' + '
  • Public Health Alliance for Genomic Epidemiology (pha4ge). (2022). Parse multiple Antimicrobial Resistance Analysis Reports into a common data structure. Github. Retrieved October 5, 2022, from https://github.com/pha4ge/hAMRonization
  • ', ].join(' ').trim().replaceAll(', +.', ".") @@ -263,7 +263,7 @@ def toolBibliographyText() { !params.bgc_skip_antismash ? '
  • Blin, K., Shaw, S., Kloosterman, A. M., Charlop-Powers, Z., van Wezel, G. P., Medema, M. H., & Weber, T. (2021). antiSMASH 6.0: improving cluster detection and comparison capabilities. Nucleic acids research, 49(W1), W29–W35. DOI:
  • ' : "", !params.bgc_skip_deepbgc ? '
  • Hannigan, G. D., Prihoda, D., Palicka, A., Soukup, J., Klempir, O., Rampula, L., Durcak, J., Wurst, M., Kotowski, J., Chang, D., Wang, R., Piizzi, G., Temesi, G., Hazuda, D. J., Woelk, C. H., & Bitton, D. A. (2019). A deep learning genome-mining strategy for biosynthetic gene cluster prediction. Nucleic acids research, 47(18), e110. DOI: 10.1093/nar/gkz654
  • ' : "", !params.bgc_skip_gecco ? '
  • Carroll, L. M. , Larralde, M., Fleck, J. S., Ponnudurai, R., Milanese, A., Cappio Barazzone, E. & Zeller, G. (2021). Accurate de novo identification of biosynthetic gene clusters with GECCO. bioRxiv DOI: 0.1101/2021.05.03.442509
  • ' : "", - '
  • Frangenberg, J. Fellows Yates, J. A., Ibrahim, A., Perelo, L., & Beber, M. E. (2023). nf-core/funcscan: 1.0.0 - German Rollmops - 2023-02-15. https://doi.org/10.5281/zenodo.7643100
  • ' + '
  • Frangenberg, J. Fellows Yates, J. A., Ibrahim, A., Perelo, L., & Beber, M. E. (2023). nf-core/funcscan: 1.0.0 - German Rollmops - 2023-02-15. https://doi.org/10.5281/zenodo.7643100
  • ', ].join(' ').replaceAll(', +.', ".").trim() def postprocessing_text = '
  • Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. https://doi.org/10.1093/bioinformatics/btw354
  • ' @@ -278,7 +278,7 @@ def toolBibliographyText() { params.run_arg_screening ? arg_text : "", params.run_bgc_screening ? bgc_text : "", hmmsearch_text, - postprocessing_text + postprocessing_text, ].join(' ').trim() return reference_text diff --git a/tests/test.nf.test.snap b/tests/test.nf.test.snap index c09747ac..d312a612 100644 --- a/tests/test.nf.test.snap +++ b/tests/test.nf.test.snap @@ -47,7 +47,7 @@ "deeparg_tsv_ARG": { "content": [ "sample_1.align.daa.tsv:md5,21822364379fe8f991d27cdb52a33d1d", - "sample_2.align.daa.tsv:md5,f448465df58785a87cdee53691a77bfe", + "sample_2.align.daa.tsv:md5,d59287f357de198639bdca5dbaede173", "sample_1.mapping.ARG:md5,0e049e99eab4c55666062df21707d5b9", "sample_2.mapping.ARG:md5,0e049e99eab4c55666062df21707d5b9" ], diff --git a/tests/test_preannotated.nf.test.snap b/tests/test_preannotated.nf.test.snap index 107b6e1c..de54e2ba 100644 --- a/tests/test_preannotated.nf.test.snap +++ b/tests/test_preannotated.nf.test.snap @@ -3,7 +3,7 @@ "content": [ "sample_1.align.daa.tsv:md5,0e71c37318bdc6cba792196d0455293d", "sample_2.align.daa.tsv:md5,1092ecd3cd6931653168b46c7afeb9e3", - "sample_3.align.daa.tsv:md5,b79070fe26acd1a10ae3aaf06b0d5901", + "sample_3.align.daa.tsv:md5,a9ed2f0651d75b318fde07a76b06d7b8", true, true, true @@ -71,8 +71,8 @@ "sample_1.potential.ARG.normalized.tsv:md5,d6732b4b9765bfa47e27ba673e24b6a4", "sample_2.ARG.normalized.tsv:md5,1a19b894a7315aaae5f799e4539e6619", "sample_2.potential.ARG.normalized.tsv:md5,b241e22f9116d8f518ba8526d52ac4dc", - "sample_3.ARG.normalized.tsv:md5,d40d387176649ce80827420fef6a0169", - "sample_3.potential.ARG.normalized.tsv:md5,f331efd21ea143c180a15ae56a5210d3" + "sample_3.ARG.normalized.tsv:md5,d7577c0066a31e173f9cb545820650bf", + "sample_3.potential.ARG.normalized.tsv:md5,6d0889215f0ad7f601502ca67c0ca89e" ], "meta": { "nf-test": "0.9.0", diff --git a/workflows/funcscan.nf b/workflows/funcscan.nf index b8f9cc4b..ba8f997a 100644 --- a/workflows/funcscan.nf +++ b/workflows/funcscan.nf @@ -4,11 +4,11 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -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_funcscan_pipeline' +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_funcscan_pipeline' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From 5dd1a8f4d525ab0d73ffd9d0b85a864d288eedda Mon Sep 17 00:00:00 2001 From: Jasmin Frangenberg <73216762+jasmezz@users.noreply.github.com> Date: Mon, 10 Feb 2025 15:53:09 +0000 Subject: [PATCH 138/175] Apply suggestions from code review --- nextflow_schema.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 647d5cde..61770e5c 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -556,6 +556,7 @@ }, "protein_annotation_interproscan_db": { "type": "string", + "help_text": "Use this to supply the path to a pre-downloaded InterProScan database. This can be any unzipped InterProScan version. By default the database version '5.72-103.0' is downloaded.\n\nFor more details on where to find different InterProScan databases see tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/UserDocs.html#obtaining-a-copy-of-interproscan).\n", "description": "Path to pre-downloaded InterProScan database.", "fa_icon": "fas fa-database" }, @@ -570,11 +571,11 @@ "type": "boolean", "help_text": "This increases the speed of functional annotation with InterProScan by pre-calculating matches found in the UniProtKB, thereby identifying unique matches in the query sequences for faster annotation. By default this is turned off.\n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `---diasable-precalc`", "description": "Pre-calculates residue mutual matches.", - "fa_icon": "fas fa-clock-rotate-left" + "fa_icon": "fas fa-clock" }, "protein_annotation_interproscan_enableresidueannot": { "type": "boolean", - "help_text": "Activating this flag will remove the residue annotation from the final XML and JSON output files, which we do not supply as output files from InerProScan. \n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--disable-residue-annot`", + "help_text": "By default, this flag removes the residue annotation from the final XML and JSON output files, which we do not supply as output files from InterProScan.\n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--disable-residue-annot`", "description": "Enable residue annotation in XML and JSON files.", "fa_icon": "fas fa-eraser" }, From d4c6ce68f0b77c492ca7bdca5a4c36b63b72496a Mon Sep 17 00:00:00 2001 From: jasmezz Date: Mon, 10 Feb 2025 16:59:21 +0100 Subject: [PATCH 139/175] Update modules (esp. AMPcombi parsetables main.nf), add icon in schema.json --- modules.json | 83 +++++++++---------- modules/nf-core/abricate/run/environment.yml | 2 + .../nf-core/ampcombi2/cluster/environment.yml | 2 +- .../ampcombi2/cluster/tests/main.nf.test | 65 +++++++++++++++ .../nf-core/ampcombi2/cluster/tests/tags.yml | 2 + .../ampcombi2/complete/environment.yml | 2 +- .../ampcombi2/complete/tests/main.nf.test | 56 +++++++++++++ .../nf-core/ampcombi2/complete/tests/tags.yml | 2 + .../ampcombi2/parsetables/environment.yml | 2 +- modules/nf-core/ampcombi2/parsetables/main.nf | 8 +- modules/nf-core/ampir/environment.yml | 2 + .../nf-core/amplify/predict/environment.yml | 2 + .../nf-core/amrfinderplus/run/environment.yml | 2 + .../amrfinderplus/update/environment.yml | 2 + .../antismash/antismashlite/environment.yml | 2 + .../environment.yml | 2 + modules/nf-core/argnorm/environment.yml | 4 +- modules/nf-core/bakta/bakta/environment.yml | 2 + .../bakta/baktadbdownload/environment.yml | 2 + .../deeparg/downloaddata/environment.yml | 2 + modules/nf-core/deeparg/downloaddata/main.nf | 37 +++++---- .../nf-core/deeparg/predict/environment.yml | 2 + modules/nf-core/deeparg/predict/main.nf | 44 +++++----- .../nf-core/deepbgc/download/environment.yml | 2 + .../nf-core/deepbgc/pipeline/environment.yml | 2 + modules/nf-core/fargene/environment.yml | 2 + modules/nf-core/gecco/run/environment.yml | 2 + modules/nf-core/gunzip/environment.yml | 2 + .../hamronization/abricate/environment.yml | 2 + .../amrfinderplus/environment.yml | 2 + .../hamronization/deeparg/environment.yml | 2 + .../hamronization/fargene/environment.yml | 2 + .../nf-core/hamronization/rgi/environment.yml | 2 + .../hamronization/summarize/environment.yml | 2 + .../nf-core/hmmer/hmmsearch/environment.yml | 2 + modules/nf-core/interproscan/environment.yml | 2 + .../nf-core/macrel/contigs/environment.yml | 2 + .../nf-core/mmseqs/createdb/environment.yml | 2 + .../nf-core/mmseqs/createtsv/environment.yml | 2 + .../nf-core/mmseqs/databases/environment.yml | 2 + modules/nf-core/multiqc/environment.yml | 2 + modules/nf-core/prodigal/environment.yml | 2 + modules/nf-core/prokka/environment.yml | 2 + .../rgi/cardannotation/environment.yml | 2 + modules/nf-core/rgi/main/environment.yml | 2 + modules/nf-core/seqkit/seq/environment.yml | 2 +- modules/nf-core/tabix/bgzip/environment.yml | 2 + modules/nf-core/untar/environment.yml | 2 + nextflow_schema.json | 3 +- 49 files changed, 295 insertions(+), 87 deletions(-) create mode 100644 modules/nf-core/ampcombi2/cluster/tests/main.nf.test create mode 100644 modules/nf-core/ampcombi2/cluster/tests/tags.yml create mode 100644 modules/nf-core/ampcombi2/complete/tests/main.nf.test create mode 100644 modules/nf-core/ampcombi2/complete/tests/tags.yml diff --git a/modules.json b/modules.json index 707dd365..b4ef3688 100644 --- a/modules.json +++ b/modules.json @@ -7,162 +7,162 @@ "nf-core": { "abricate/run": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "ampcombi2/cluster": { "branch": "master", - "git_sha": "993865fe60cb1569155fbbbe0cee113e1127abaf", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "ampcombi2/complete": { "branch": "master", - "git_sha": "993865fe60cb1569155fbbbe0cee113e1127abaf", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "ampcombi2/parsetables": { "branch": "master", - "git_sha": "0e9cb409c32d3ec4f0d3804588e4778971c09b7e", + "git_sha": "637c3e1796ab13d4c91f3030932598aed94a4f87", "installed_by": ["modules"] }, "ampir": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "amplify/predict": { "branch": "master", - "git_sha": "ce35ce92566b3328b405253543b9b2b4d4e5f4f7", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "amrfinderplus/run": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "amrfinderplus/update": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "antismash/antismashlite": { "branch": "master", - "git_sha": "3e3be50f2096e4b8fcfadc0318c92f782d6ae969", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "antismash/antismashlitedownloaddatabases": { "branch": "master", - "git_sha": "1eb613d008eae2f5dc8368fc940f6a36758deca9", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "argnorm": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "bakta/bakta": { "branch": "master", - "git_sha": "4f0998ebd8f65961cfef0b810f008be3bc477132", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "bakta/baktadbdownload": { "branch": "master", - "git_sha": "4f0998ebd8f65961cfef0b810f008be3bc477132", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "deeparg/downloaddata": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "deeparg/predict": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "deepbgc/download": { "branch": "master", - "git_sha": "ce35ce92566b3328b405253543b9b2b4d4e5f4f7", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "deepbgc/pipeline": { "branch": "master", - "git_sha": "ce35ce92566b3328b405253543b9b2b4d4e5f4f7", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "fargene": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "gecco/run": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "gunzip": { "branch": "master", - "git_sha": "ce35ce92566b3328b405253543b9b2b4d4e5f4f7", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "hamronization/abricate": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "hamronization/amrfinderplus": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "hamronization/deeparg": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "hamronization/fargene": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "hamronization/rgi": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "hamronization/summarize": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "hmmer/hmmsearch": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "interproscan": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "macrel/contigs": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "mmseqs/createdb": { "branch": "master", - "git_sha": "2dc4c0474a77f5f8709eb970d890ad102e92af6f", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "mmseqs/createtsv": { "branch": "master", - "git_sha": "2dc4c0474a77f5f8709eb970d890ad102e92af6f", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "mmseqs/databases": { "branch": "master", - "git_sha": "2dc4c0474a77f5f8709eb970d890ad102e92af6f", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "mmseqs/taxonomy": { @@ -172,17 +172,17 @@ }, "multiqc": { "branch": "master", - "git_sha": "f0719ae309075ae4a291533883847c3f7c441dad", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "prodigal": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "prokka": { "branch": "master", - "git_sha": "bcfb2f7efd4444ab442ffc8a248afbd62bca5ae7", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "pyrodigal": { @@ -192,29 +192,28 @@ }, "rgi/cardannotation": { "branch": "master", - "git_sha": "3e548877f25a5980a177cc4f81d2d2e8c24164ef", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "rgi/main": { "branch": "master", - "git_sha": "41623bcb962bd02d1a45ad81c1853547ebd26f5f", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "seqkit/seq": { "branch": "master", - "git_sha": "60645c2b45e56579de0a0c89416805cae44c1f46", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "tabix/bgzip": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", "installed_by": ["modules"] }, "untar": { "branch": "master", - "git_sha": "3e548877f25a5980a177cc4f81d2d2e8c24164ef", - "installed_by": ["modules"], - "patch": "modules/nf-core/untar/untar.diff" + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", + "installed_by": ["modules"] } } }, diff --git a/modules/nf-core/abricate/run/environment.yml b/modules/nf-core/abricate/run/environment.yml index c7a7d199..53fe9857 100644 --- a/modules/nf-core/abricate/run/environment.yml +++ b/modules/nf-core/abricate/run/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/ampcombi2/cluster/environment.yml b/modules/nf-core/ampcombi2/cluster/environment.yml index f9c25b04..e88b26ba 100644 --- a/modules/nf-core/ampcombi2/cluster/environment.yml +++ b/modules/nf-core/ampcombi2/cluster/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::ampcombi=2.0.1" + - bioconda::ampcombi=2.0.1 diff --git a/modules/nf-core/ampcombi2/cluster/tests/main.nf.test b/modules/nf-core/ampcombi2/cluster/tests/main.nf.test new file mode 100644 index 00000000..49bee6cf --- /dev/null +++ b/modules/nf-core/ampcombi2/cluster/tests/main.nf.test @@ -0,0 +1,65 @@ +nextflow_process { + + name "Test Process AMPCOMBI2_CLUSTER" + script "../main.nf" + process "AMPCOMBI2_CLUSTER" + + tag "modules" + tag "modules_nfcore" + tag "ampcombi2" + tag "ampcombi2/cluster" + tag "ampcombi2/complete" + + setup { + run("AMPCOMBI2_COMPLETE") { + script "../../../ampcombi2/complete/main.nf" + process { + """ + input[0] = + [ + file('https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/ampcombi/ampcombi2/sample_1_ampcombi.tsv', checkIfExists: true), + file('https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/ampcombi/ampcombi2/sample_2_ampcombi.tsv', checkIfExists: true) + ] + """ + } + } + } + + test("ampcombi2_cluster - metagenome") { + when { + process { + """ + input[0] = AMPCOMBI2_COMPLETE.out.tsv + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.cluster_tsv[0]).readLines()[0].contains("Linear/Cyclic/Branched"), + file(process.out.rep_cluster_tsv[0]).readLines()[0].contains("total_cluster_members"), + process.out.versions).match() } + ) + } + } + + test("ampcombi2_cluster - metagenome - stub") { + options "-stub" + when { + process { + """ + input[0] = AMPCOMBI2_COMPLETE.out.tsv + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/ampcombi2/cluster/tests/tags.yml b/modules/nf-core/ampcombi2/cluster/tests/tags.yml new file mode 100644 index 00000000..783f4d52 --- /dev/null +++ b/modules/nf-core/ampcombi2/cluster/tests/tags.yml @@ -0,0 +1,2 @@ +ampcombi2/cluster: + - "modules/nf-core/ampcombi2/cluster/**" diff --git a/modules/nf-core/ampcombi2/complete/environment.yml b/modules/nf-core/ampcombi2/complete/environment.yml index f9c25b04..e88b26ba 100644 --- a/modules/nf-core/ampcombi2/complete/environment.yml +++ b/modules/nf-core/ampcombi2/complete/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::ampcombi=2.0.1" + - bioconda::ampcombi=2.0.1 diff --git a/modules/nf-core/ampcombi2/complete/tests/main.nf.test b/modules/nf-core/ampcombi2/complete/tests/main.nf.test new file mode 100644 index 00000000..176d975f --- /dev/null +++ b/modules/nf-core/ampcombi2/complete/tests/main.nf.test @@ -0,0 +1,56 @@ +nextflow_process { + + name "Test Process AMPCOMBI2_COMPLETE" + script "../main.nf" + process "AMPCOMBI2_COMPLETE" + + tag "modules" + tag "modules_nfcore" + tag "ampcombi2" + tag "ampcombi2/complete" + + test("ampcombi2_complete - contigs") { + when { + process { + """ + input[0] = + [ + file('https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/ampcombi/ampcombi2/sample_1_ampcombi.tsv', checkIfExists: true), + file('https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/ampcombi/ampcombi2/sample_2_ampcombi.tsv', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.tsv[0]).readLines()[0].contains("ampir"), + process.out.versions).match() } + ) + } + } + + test("ampcombi2_complete - contigs - stub") { + options "-stub" + when { + process { + """ + input[0] = + [ + file('https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/ampcombi/ampcombi2/sample_1_ampcombi.tsv', checkIfExists: true), + file('https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/ampcombi/ampcombi2/sample_2_ampcombi.tsv', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/nf-core/ampcombi2/complete/tests/tags.yml b/modules/nf-core/ampcombi2/complete/tests/tags.yml new file mode 100644 index 00000000..f8ac5fee --- /dev/null +++ b/modules/nf-core/ampcombi2/complete/tests/tags.yml @@ -0,0 +1,2 @@ +ampcombi2/complete: + - "modules/nf-core/ampcombi2/complete/**" diff --git a/modules/nf-core/ampcombi2/parsetables/environment.yml b/modules/nf-core/ampcombi2/parsetables/environment.yml index f9c25b04..e88b26ba 100644 --- a/modules/nf-core/ampcombi2/parsetables/environment.yml +++ b/modules/nf-core/ampcombi2/parsetables/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::ampcombi=2.0.1" + - bioconda::ampcombi=2.0.1 diff --git a/modules/nf-core/ampcombi2/parsetables/main.nf b/modules/nf-core/ampcombi2/parsetables/main.nf index b9d855df..088497f4 100644 --- a/modules/nf-core/ampcombi2/parsetables/main.nf +++ b/modules/nf-core/ampcombi2/parsetables/main.nf @@ -17,10 +17,10 @@ process AMPCOMBI2_PARSETABLES { output: tuple val(meta), path("${meta.id}/") , emit: sample_dir - tuple val(meta), path("${meta.id}/contig_gbks/") , emit: contig_gbks - tuple val(meta), path("${meta.id}/${meta.id}_mmseqs_matches.tsv") , emit: db_tsv - tuple val(meta), path("${meta.id}/${meta.id}_ampcombi.tsv") , emit: tsv - tuple val(meta), path("${meta.id}/${meta.id}_amp.faa") , emit: faa + tuple val(meta), path("${meta.id}/contig_gbks/") , emit: contig_gbks , optional:true + tuple val(meta), path("${meta.id}/${meta.id}_mmseqs_matches.tsv") , emit: db_tsv , optional:true + tuple val(meta), path("${meta.id}/${meta.id}_ampcombi.tsv") , emit: tsv , optional:true + tuple val(meta), path("${meta.id}/${meta.id}_amp.faa") , emit: faa , optional:true tuple val(meta), path("${meta.id}/${meta.id}_ampcombi.log") , emit: sample_log , optional:true tuple val(meta), path("Ampcombi_parse_tables.log") , emit: full_log , optional:true tuple val(meta), path("amp_${opt_amp_db}_database/") , emit: db , optional:true diff --git a/modules/nf-core/ampir/environment.yml b/modules/nf-core/ampir/environment.yml index 359e426c..3c6f4793 100644 --- a/modules/nf-core/ampir/environment.yml +++ b/modules/nf-core/ampir/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/amplify/predict/environment.yml b/modules/nf-core/amplify/predict/environment.yml index e1cb5703..872115b4 100644 --- a/modules/nf-core/amplify/predict/environment.yml +++ b/modules/nf-core/amplify/predict/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/amrfinderplus/run/environment.yml b/modules/nf-core/amrfinderplus/run/environment.yml index 2744ce54..0487b72d 100644 --- a/modules/nf-core/amrfinderplus/run/environment.yml +++ b/modules/nf-core/amrfinderplus/run/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/amrfinderplus/update/environment.yml b/modules/nf-core/amrfinderplus/update/environment.yml index 2744ce54..0487b72d 100644 --- a/modules/nf-core/amrfinderplus/update/environment.yml +++ b/modules/nf-core/amrfinderplus/update/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/antismash/antismashlite/environment.yml b/modules/nf-core/antismash/antismashlite/environment.yml index ce4491dc..dc2807d5 100644 --- a/modules/nf-core/antismash/antismashlite/environment.yml +++ b/modules/nf-core/antismash/antismashlite/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/antismash/antismashlitedownloaddatabases/environment.yml b/modules/nf-core/antismash/antismashlitedownloaddatabases/environment.yml index ce4491dc..dc2807d5 100644 --- a/modules/nf-core/antismash/antismashlitedownloaddatabases/environment.yml +++ b/modules/nf-core/antismash/antismashlitedownloaddatabases/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/argnorm/environment.yml b/modules/nf-core/argnorm/environment.yml index 783995f2..91971001 100644 --- a/modules/nf-core/argnorm/environment.yml +++ b/modules/nf-core/argnorm/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::argnorm=0.5.0" + - bioconda::argnorm=0.5.0 diff --git a/modules/nf-core/bakta/bakta/environment.yml b/modules/nf-core/bakta/bakta/environment.yml index a2d0ff72..c1b616a4 100644 --- a/modules/nf-core/bakta/bakta/environment.yml +++ b/modules/nf-core/bakta/bakta/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/bakta/baktadbdownload/environment.yml b/modules/nf-core/bakta/baktadbdownload/environment.yml index a2d0ff72..c1b616a4 100644 --- a/modules/nf-core/bakta/baktadbdownload/environment.yml +++ b/modules/nf-core/bakta/baktadbdownload/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/deeparg/downloaddata/environment.yml b/modules/nf-core/deeparg/downloaddata/environment.yml index 074c6501..91c8f5cf 100644 --- a/modules/nf-core/deeparg/downloaddata/environment.yml +++ b/modules/nf-core/deeparg/downloaddata/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/deeparg/downloaddata/main.nf b/modules/nf-core/deeparg/downloaddata/main.nf index 787c0027..7f17ebab 100644 --- a/modules/nf-core/deeparg/downloaddata/main.nf +++ b/modules/nf-core/deeparg/downloaddata/main.nf @@ -2,32 +2,33 @@ process DEEPARG_DOWNLOADDATA { label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/deeparg:1.0.4--pyhdfd78af_0' : - 'biocontainers/deeparg:1.0.4--pyhdfd78af_0' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://depot.galaxyproject.org/singularity/deeparg:1.0.4--pyhdfd78af_0' + : 'biocontainers/deeparg:1.0.4--pyhdfd78af_0'}" /* We have to force docker/singularity to mount a fake file to allow reading of a problematic file with borked read-write permissions in an upstream dependency (theanos). Original report: https://github.com/nf-core/funcscan/issues/23 */ containerOptions { - "${workflow.containerEngine}" == 'singularity' ? '-B $(which bash):/usr/local/lib/python2.7/site-packages/Theano-0.8.2-py2.7.egg-info/PKG-INFO' : - "${workflow.containerEngine}" == 'docker' ? '-v $(which bash):/usr/local/lib/python2.7/site-packages/Theano-0.8.2-py2.7.egg-info/PKG-INFO' : - '' + ['singularity', 'apptainer'].contains(workflow.containerEngine) + ? '-B $(which bash):/usr/local/lib/python2.7/site-packages/Theano-0.8.2-py2.7.egg-info/PKG-INFO' + : "${workflow.containerEngine}" == 'docker' + ? '-v $(which bash):/usr/local/lib/python2.7/site-packages/Theano-0.8.2-py2.7.egg-info/PKG-INFO' + : '' } - input: - output: - path "db/" , emit: db - path "versions.yml" , emit: versions + path "db/", emit: db + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when script: def args = task.ext.args ?: '' - def VERSION='1.0.4' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def VERSION = '1.0.4' + // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ # Theano needs a writable space and uses the home directory by default, @@ -38,24 +39,30 @@ process DEEPARG_DOWNLOADDATA { deeparg \\ download_data \\ - $args \\ + ${args} \\ -o db/ cat <<-END_VERSIONS > versions.yml "${task.process}": - deeparg: $VERSION + deeparg: ${VERSION} END_VERSIONS """ stub: def args = task.ext.args ?: '' - def VERSION='1.0.4' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def VERSION = '1.0.4' + // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ + echo "deeparg \\ + download_data \\ + ${args} \\ + -o db/" + mkdir db/ cat <<-END_VERSIONS > versions.yml "${task.process}": - deeparg: $VERSION + deeparg: ${VERSION} END_VERSIONS """ } diff --git a/modules/nf-core/deeparg/predict/environment.yml b/modules/nf-core/deeparg/predict/environment.yml index 074c6501..91c8f5cf 100644 --- a/modules/nf-core/deeparg/predict/environment.yml +++ b/modules/nf-core/deeparg/predict/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/deeparg/predict/main.nf b/modules/nf-core/deeparg/predict/main.nf index 20fd0a93..2ac258a8 100644 --- a/modules/nf-core/deeparg/predict/main.nf +++ b/modules/nf-core/deeparg/predict/main.nf @@ -1,32 +1,34 @@ process DEEPARG_PREDICT { - tag "$meta.id" + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/deeparg:1.0.4--pyhdfd78af_0' : - 'biocontainers/deeparg:1.0.4--pyhdfd78af_0' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://depot.galaxyproject.org/singularity/deeparg:1.0.4--pyhdfd78af_0' + : 'biocontainers/deeparg:1.0.4--pyhdfd78af_0'}" /* We have to force docker/singularity to mount a fake file to allow reading of a problematic file with borked read-write permissions in an upstream dependency (theanos). Original report: https://github.com/nf-core/funcscan/issues/23 */ containerOptions { - "${workflow.containerEngine}" == 'singularity' ? '-B $(which bash):/usr/local/lib/python2.7/site-packages/Theano-0.8.2-py2.7.egg-info/PKG-INFO' : - "${workflow.containerEngine}" == 'docker' ? '-v $(which bash):/usr/local/lib/python2.7/site-packages/Theano-0.8.2-py2.7.egg-info/PKG-INFO' : - '' + ['singularity', 'apptainer'].contains(workflow.containerEngine) + ? '-B $(which bash):/usr/local/lib/python2.7/site-packages/Theano-0.8.2-py2.7.egg-info/PKG-INFO' + : "${workflow.containerEngine}" == 'docker' + ? '-v $(which bash):/usr/local/lib/python2.7/site-packages/Theano-0.8.2-py2.7.egg-info/PKG-INFO' + : '' } input: tuple val(meta), path(fasta), val(model) - path(db) + path db output: - tuple val(meta), path("*.align.daa") , emit: daa - tuple val(meta), path("*.align.daa.tsv") , emit: daa_tsv - tuple val(meta), path("*.mapping.ARG") , emit: arg + tuple val(meta), path("*.align.daa"), emit: daa + tuple val(meta), path("*.align.daa.tsv"), emit: daa_tsv + tuple val(meta), path("*.mapping.ARG"), emit: arg tuple val(meta), path("*.mapping.potential.ARG"), emit: potential_arg - path "versions.yml" , emit: versions + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when @@ -34,9 +36,10 @@ process DEEPARG_PREDICT { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION='1.0.4' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def VERSION = '1.0.4' + // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ - DATABASE=`find -L $db -type d -name "database" | sed 's/database//'` + DATABASE=`find -L ${db} -type d -name "database" | sed 's/database//'` # Theano needs a writable space and uses the home directory by default, # but the latter is not always writable, for instance when Singularity @@ -46,22 +49,23 @@ process DEEPARG_PREDICT { deeparg \\ predict \\ - $args \\ - -i $fasta \\ + ${args} \\ + -i ${fasta} \\ -o ${prefix} \\ -d \$DATABASE \\ - --model $model + --model ${model} cat <<-END_VERSIONS > versions.yml "${task.process}": - deeparg: $VERSION + deeparg: ${VERSION} END_VERSIONS """ stub: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION='1.0.4' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def VERSION = '1.0.4' + // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ touch ${prefix}.align.daa touch ${prefix}.align.daa.tsv @@ -70,7 +74,7 @@ process DEEPARG_PREDICT { cat <<-END_VERSIONS > versions.yml "${task.process}": - deeparg: $VERSION + deeparg: ${VERSION} END_VERSIONS """ } diff --git a/modules/nf-core/deepbgc/download/environment.yml b/modules/nf-core/deepbgc/download/environment.yml index 36cb903f..999c6864 100644 --- a/modules/nf-core/deepbgc/download/environment.yml +++ b/modules/nf-core/deepbgc/download/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/deepbgc/pipeline/environment.yml b/modules/nf-core/deepbgc/pipeline/environment.yml index 36cb903f..999c6864 100644 --- a/modules/nf-core/deepbgc/pipeline/environment.yml +++ b/modules/nf-core/deepbgc/pipeline/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/fargene/environment.yml b/modules/nf-core/fargene/environment.yml index ade4d770..197b2b32 100644 --- a/modules/nf-core/fargene/environment.yml +++ b/modules/nf-core/fargene/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/gecco/run/environment.yml b/modules/nf-core/gecco/run/environment.yml index 7db7dc87..bb47bc85 100644 --- a/modules/nf-core/gecco/run/environment.yml +++ b/modules/nf-core/gecco/run/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/gunzip/environment.yml b/modules/nf-core/gunzip/environment.yml index ae4fa457..9b926b1f 100644 --- a/modules/nf-core/gunzip/environment.yml +++ b/modules/nf-core/gunzip/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/hamronization/abricate/environment.yml b/modules/nf-core/hamronization/abricate/environment.yml index 791b9c96..5826a865 100644 --- a/modules/nf-core/hamronization/abricate/environment.yml +++ b/modules/nf-core/hamronization/abricate/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/hamronization/amrfinderplus/environment.yml b/modules/nf-core/hamronization/amrfinderplus/environment.yml index 791b9c96..5826a865 100644 --- a/modules/nf-core/hamronization/amrfinderplus/environment.yml +++ b/modules/nf-core/hamronization/amrfinderplus/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/hamronization/deeparg/environment.yml b/modules/nf-core/hamronization/deeparg/environment.yml index 791b9c96..5826a865 100644 --- a/modules/nf-core/hamronization/deeparg/environment.yml +++ b/modules/nf-core/hamronization/deeparg/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/hamronization/fargene/environment.yml b/modules/nf-core/hamronization/fargene/environment.yml index 791b9c96..5826a865 100644 --- a/modules/nf-core/hamronization/fargene/environment.yml +++ b/modules/nf-core/hamronization/fargene/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/hamronization/rgi/environment.yml b/modules/nf-core/hamronization/rgi/environment.yml index 791b9c96..5826a865 100644 --- a/modules/nf-core/hamronization/rgi/environment.yml +++ b/modules/nf-core/hamronization/rgi/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/hamronization/summarize/environment.yml b/modules/nf-core/hamronization/summarize/environment.yml index 791b9c96..5826a865 100644 --- a/modules/nf-core/hamronization/summarize/environment.yml +++ b/modules/nf-core/hamronization/summarize/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/hmmer/hmmsearch/environment.yml b/modules/nf-core/hmmer/hmmsearch/environment.yml index c5ddec5d..1967d405 100644 --- a/modules/nf-core/hmmer/hmmsearch/environment.yml +++ b/modules/nf-core/hmmer/hmmsearch/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/interproscan/environment.yml b/modules/nf-core/interproscan/environment.yml index d1ce2af7..8e82f003 100644 --- a/modules/nf-core/interproscan/environment.yml +++ b/modules/nf-core/interproscan/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/macrel/contigs/environment.yml b/modules/nf-core/macrel/contigs/environment.yml index bb5ce1a6..ea2b6ac6 100644 --- a/modules/nf-core/macrel/contigs/environment.yml +++ b/modules/nf-core/macrel/contigs/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/mmseqs/createdb/environment.yml b/modules/nf-core/mmseqs/createdb/environment.yml index d3561349..69afa609 100644 --- a/modules/nf-core/mmseqs/createdb/environment.yml +++ b/modules/nf-core/mmseqs/createdb/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/mmseqs/createtsv/environment.yml b/modules/nf-core/mmseqs/createtsv/environment.yml index d3561349..69afa609 100644 --- a/modules/nf-core/mmseqs/createtsv/environment.yml +++ b/modules/nf-core/mmseqs/createtsv/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/mmseqs/databases/environment.yml b/modules/nf-core/mmseqs/databases/environment.yml index d3561349..69afa609 100644 --- a/modules/nf-core/mmseqs/databases/environment.yml +++ b/modules/nf-core/mmseqs/databases/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index a27122ce..c3b3413f 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/prodigal/environment.yml b/modules/nf-core/prodigal/environment.yml index 7609bf3b..b2c7efcf 100644 --- a/modules/nf-core/prodigal/environment.yml +++ b/modules/nf-core/prodigal/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/prokka/environment.yml b/modules/nf-core/prokka/environment.yml index 1d1a019f..b4687037 100644 --- a/modules/nf-core/prokka/environment.yml +++ b/modules/nf-core/prokka/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/rgi/cardannotation/environment.yml b/modules/nf-core/rgi/cardannotation/environment.yml index 609693fe..a3169324 100644 --- a/modules/nf-core/rgi/cardannotation/environment.yml +++ b/modules/nf-core/rgi/cardannotation/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/rgi/main/environment.yml b/modules/nf-core/rgi/main/environment.yml index 609693fe..a3169324 100644 --- a/modules/nf-core/rgi/main/environment.yml +++ b/modules/nf-core/rgi/main/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/seqkit/seq/environment.yml b/modules/nf-core/seqkit/seq/environment.yml index 160a67c0..b26fb1eb 100644 --- a/modules/nf-core/seqkit/seq/environment.yml +++ b/modules/nf-core/seqkit/seq/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::seqkit=2.9.0" + - bioconda::seqkit=2.9.0 diff --git a/modules/nf-core/tabix/bgzip/environment.yml b/modules/nf-core/tabix/bgzip/environment.yml index 017c259d..fe48f542 100644 --- a/modules/nf-core/tabix/bgzip/environment.yml +++ b/modules/nf-core/tabix/bgzip/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/modules/nf-core/untar/environment.yml b/modules/nf-core/untar/environment.yml index ae4fa457..9b926b1f 100644 --- a/modules/nf-core/untar/environment.yml +++ b/modules/nf-core/untar/environment.yml @@ -1,3 +1,5 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda diff --git a/nextflow_schema.json b/nextflow_schema.json index 61770e5c..80f310bc 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -582,7 +582,8 @@ "protein_annotation_interproscan_disableresidueannottsv": { "type": "boolean", "help_text": "This disables the addition of the annotations assigned according to the databases activated to the final `_interproscan.tsv` file. Turning this on will remove the annotations from the final table. It is not recommended to use this option, as it will cause a run failure because the format of the resulting files will no longer be adequate for integration in the final summary tables. Currently, only applicable for AMPcombi2. \n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--enable-tsv-residue-annot`\n", - "description": "Removes annotations from TSV file." + "description": "Removes annotations from TSV file.", + "fa_icon": "fas fa-eraser" } }, "help_text": "This subworkflow adds additional protein annotations to all annotated coding regions. Currently, only annotation with InterProScan is integrated in the subworkflow.", From f68d316130bb39be0e28892f3b3eb776298366f6 Mon Sep 17 00:00:00 2001 From: jasmezz Date: Tue, 11 Feb 2025 11:01:25 +0100 Subject: [PATCH 140/175] Remove params which shouldn't be changed by users anyway --- conf/modules.config | 6 +++--- nextflow.config | 2 -- nextflow_schema.json | 12 ------------ 3 files changed, 3 insertions(+), 17 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index db94087f..34528cd9 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -137,10 +137,10 @@ process { ext.args = [ "--applications ${params.protein_annotation_interproscan_applications}", params.protein_annotation_interproscan_enableprecalc ? '' : '--disable-precalc', - params.protein_annotation_interproscan_enableresidueannot ? '' : '--disable-residue-annot', - params.protein_annotation_interproscan_disableresidueannottsv ? '' : '--enable-tsv-residue-annot', + '--disable-residue-annot', + '--enable-tsv-residue-annot', "--formats tsv" - ].join(' ').trim() + ].join(' ').trim() // Warning: Do not disable the flags "--enable-tsv-residue-annot" and "--formats tsv"! This would cause a run failure because the format of the resulting files would no longer be adequate for parsing by AMPcombi2. } withName: PROKKA { diff --git a/nextflow.config b/nextflow.config index d7e12a50..9d62c15f 100644 --- a/nextflow.config +++ b/nextflow.config @@ -111,8 +111,6 @@ params { protein_annotation_interproscan_db_url = 'https://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.72-103.0/interproscan-5.72-103.0-64-bit.tar.gz' protein_annotation_interproscan_applications = 'PANTHER,ProSiteProfiles,ProSitePatterns,Pfam' protein_annotation_interproscan_enableprecalc = false - protein_annotation_interproscan_enableresidueannot = false - protein_annotation_interproscan_disableresidueannottsv = false // Database downloading options save_db = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 80f310bc..e5674eee 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -572,18 +572,6 @@ "help_text": "This increases the speed of functional annotation with InterProScan by pre-calculating matches found in the UniProtKB, thereby identifying unique matches in the query sequences for faster annotation. By default this is turned off.\n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `---diasable-precalc`", "description": "Pre-calculates residue mutual matches.", "fa_icon": "fas fa-clock" - }, - "protein_annotation_interproscan_enableresidueannot": { - "type": "boolean", - "help_text": "By default, this flag removes the residue annotation from the final XML and JSON output files, which we do not supply as output files from InterProScan.\n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--disable-residue-annot`", - "description": "Enable residue annotation in XML and JSON files.", - "fa_icon": "fas fa-eraser" - }, - "protein_annotation_interproscan_disableresidueannottsv": { - "type": "boolean", - "help_text": "This disables the addition of the annotations assigned according to the databases activated to the final `_interproscan.tsv` file. Turning this on will remove the annotations from the final table. It is not recommended to use this option, as it will cause a run failure because the format of the resulting files will no longer be adequate for integration in the final summary tables. Currently, only applicable for AMPcombi2. \n\nFor more information about this flag see the tool [documentation](https://interproscan-docs.readthedocs.io/en/latest/HowToRun.html).\n\n> Modifies tool parameter(s):\n> - InterProScan: `--enable-tsv-residue-annot`\n", - "description": "Removes annotations from TSV file.", - "fa_icon": "fas fa-eraser" } }, "help_text": "This subworkflow adds additional protein annotations to all annotated coding regions. Currently, only annotation with InterProScan is integrated in the subworkflow.", From 8b4907e0244a88ecde8da5aaf51fa0d6f51433ea Mon Sep 17 00:00:00 2001 From: jasmezz Date: Tue, 11 Feb 2025 17:33:02 +0100 Subject: [PATCH 141/175] Fix docs (icons, small updates, typos, formatting, links) --- README.md | 11 ++++++----- docs/usage.md | 47 +++++++++++++++++++++----------------------- nextflow_schema.json | 27 ++++++++++++------------- 3 files changed, 41 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index 7753440d..9fedfa94 100644 --- a/README.md +++ b/README.md @@ -32,11 +32,12 @@ The nf-core/funcscan AWS full test dataset are contigs generated by the MGnify s 1. Quality control of input sequences with [`SeqKit`](https://bioinf.shenwei.me/seqkit/) 2. Taxonomic classification of contigs of **prokaryotic origin** with [`MMseqs2`](https://github.com/soedinglab/MMseqs2) 3. Annotation of assembled prokaryotic contigs with [`Prodigal`](https://github.com/hyattpd/Prodigal), [`Pyrodigal`](https://github.com/althonos/pyrodigal), [`Prokka`](https://github.com/tseemann/prokka), or [`Bakta`](https://github.com/oschwengers/bakta) -4. Screening contigs for antimicrobial peptide-like sequences with [`ampir`](https://cran.r-project.org/web/packages/ampir/index.html), [`Macrel`](https://github.com/BigDataBiology/macrel), [`HMMER`](http://hmmer.org/), [`AMPlify`](https://github.com/bcgsc/AMPlify) -5. Screening contigs for antibiotic resistant gene-like sequences with [`ABRicate`](https://github.com/tseemann/abricate), [`AMRFinderPlus`](https://github.com/ncbi/amr), [`fARGene`](https://github.com/fannyhb/fargene), [`RGI`](https://card.mcmaster.ca/analyze/rgi), [`DeepARG`](https://bench.cs.vt.edu/deeparg). [`argNorm`](https://github.com/BigDataBiology/argNorm) is used to map the outputs of `DeepARG`, `AMRFinderPlus`, and `ABRicate` to the [`Antibiotic Resistance Ontology`](https://www.ebi.ac.uk/ols4/ontologies/aro) for consistent ARG classification terms. -6. Screening contigs for biosynthetic gene cluster-like sequences with [`antiSMASH`](https://antismash.secondarymetabolites.org), [`DeepBGC`](https://github.com/Merck/deepbgc), [`GECCO`](https://gecco.embl.de/), [`HMMER`](http://hmmer.org/) -7. Creating aggregated reports for all samples across the workflows with [`AMPcombi`](https://github.com/Darcy220606/AMPcombi) for AMPs, [`hAMRonization`](https://github.com/pha4ge/hAMRonization) for ARGs, and [`comBGC`](https://raw.githubusercontent.com/nf-core/funcscan/master/bin/comBGC.py) for BGCs -8. Software version and methods text reporting with [`MultiQC`](http://multiqc.info/) +4. Annotation of coding sequences from 3. to obtain protein families and domains with [`InterProScan`](https://github.com/ebi-pf-team/interproscan) +5. Screening contigs for antimicrobial peptide-like sequences with [`ampir`](https://cran.r-project.org/web/packages/ampir/index.html), [`Macrel`](https://github.com/BigDataBiology/macrel), [`HMMER`](http://hmmer.org/), [`AMPlify`](https://github.com/bcgsc/AMPlify) +6. Screening contigs for antibiotic resistant gene-like sequences with [`ABRicate`](https://github.com/tseemann/abricate), [`AMRFinderPlus`](https://github.com/ncbi/amr), [`fARGene`](https://github.com/fannyhb/fargene), [`RGI`](https://card.mcmaster.ca/analyze/rgi), [`DeepARG`](https://bench.cs.vt.edu/deeparg). [`argNorm`](https://github.com/BigDataBiology/argNorm) is used to map the outputs of `DeepARG`, `AMRFinderPlus`, and `ABRicate` to the [`Antibiotic Resistance Ontology`](https://www.ebi.ac.uk/ols4/ontologies/aro) for consistent ARG classification terms. +7. Screening contigs for biosynthetic gene cluster-like sequences with [`antiSMASH`](https://antismash.secondarymetabolites.org), [`DeepBGC`](https://github.com/Merck/deepbgc), [`GECCO`](https://gecco.embl.de/), [`HMMER`](http://hmmer.org/) +8. Creating aggregated reports for all samples across the workflows with [`AMPcombi`](https://github.com/Darcy220606/AMPcombi) for AMPs, [`hAMRonization`](https://github.com/pha4ge/hAMRonization) for ARGs, and [`comBGC`](https://raw.githubusercontent.com/nf-core/funcscan/master/bin/comBGC.py) for BGCs +9. Software version and methods text reporting with [`MultiQC`](http://multiqc.info/) ![funcscan metro workflow](docs/images/funcscan_metro_workflow.png) diff --git a/docs/usage.md b/docs/usage.md index a5e0b655..920d8f33 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -18,14 +18,15 @@ nextflow run nf-core/funcscan --input samplesheet.csv --outdir -profile This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. -To run any of the three screening workflows (AMP, ARG, and/or BGC) or taxonomic classification, switch them on by adding the respective flag(s) to the command: +To run any of the three screening workflows (AMP, ARG, and/or BGC), taxonomic classification, and/or protein annotation, switch them on by adding the respective flag(s) to the command: - `--run_amp_screening` - `--run_arg_screening` - `--run_bgc_screening` -- `--run_taxa_classification` +- `--run_taxa_classification` (for additional taxonomic annotations) +- `--run_protein_annotation` (for additional protein family and domain annotation) -When switched on, all tools of the given workflow will be run by default. If you don't need specific tools, you can explicitly skip them. The exception is HMMsearch, which needs to be explicitly switched on and provided with HMM screening files (AMP and BGC workflows, see [parameter documentation](/funcscan/parameters)). For the taxonomic classification, MMseqs2 is currently the only tool implemented in the pipline. +When switched on, all tools of the given workflow will be run by default. If you don't need specific tools, you can explicitly skip them. The exception is HMMsearch, which needs to be explicitly switched on and provided with HMM screening files (AMP and BGC workflows, see [parameter documentation](/funcscan/parameters)). For the taxonomic classification, MMseqs2 is currently the only tool implemented in the pipeline. Likewise, InterProScan is the only tool for protein sequence annotation. **Example:** You want to run AMP and ARG screening but you don't need the DeepARG tool of the ARG workflow and the Macrel tool of the AMP workflow. Your command would be: @@ -76,7 +77,7 @@ nf-core/funcscan takes FASTA files as input, typically contigs or whole genome s The input samplesheet has to be a comma-separated file (`.csv`) with 2 (`sample`, and `fasta`) or 4 columns (`sample`, `fasta`, `protein`, `gbk`), and a header row as shown in the examples below. -If you already have annotated contigs with peptide sequences and an annotation file in Genbank format (`.gbk.` or `.gbff`), you can supply these to the pipeline using the optional `protein` and `gbk` columns. If these additional columns are supplied, pipeline annotation (i.e. with bakta, prodigal, pyrodigal or prokka) will be skipped and the corresponding annotation files used instead. +If you already have annotated contigs with peptide sequences and an annotation file in Genbank format (`.gbk.` or `.gbff`), you can supply these to the pipeline using the optional `protein` and `gbk` columns. If these additional columns are supplied, pipeline annotation (i.e. with bakta, prodigal, pyrodigal or prokka) will be skipped and your corresponding annotation files used instead. For two columns (without pre-annotated data): @@ -106,7 +107,7 @@ An [example samplesheet](../assets/samplesheet.csv) has been provided with the p :::danger We highly recommend performing quality control on input contigs before running the pipeline. You may not receive results for some tools if none of the contigs in a FASTA file reach certain thresholds. Check parameter documentation for relevant minimum contig parameters. -For example, ideally BGC screening requires contigs of at least 3,000 bp else downstream tools may crash. +For example, ideally BGC screening requires contigs of at least 3,000 bp, otherwise downstream tools may crash. ::: ## Notes on screening tools, taxonomic and functional classifications @@ -125,7 +126,7 @@ MMseqs2 is currently the only taxonomic classification tool used in the pipeline The contents of the directory should have files such as `.version` and `.taxonomy` in the top level. -- An MMseqs2 ready database. These databases were compiled by the developers of MMseqs2 and can be called using their labels. All available options can be found [here](https://github.com/soedinglab/MMseqs2/wiki#downloading-databases). Only use those databases that have taxonomy files available (i.e., Taxonomy == Yes). By default mmseqs2 in the pipeline uses '[Kalamari](https://github.com/lskatz/Kalamari)', and runs an aminoacid based alignment. However, if the user requires a more comprehensive taxonomic classification, we recommend the use of [GTDB](https://gtdb.ecogenomic.org/), but for that please remember to increase the memory, CPU threads and time required for the process `MMSEQS_TAXONOMY`. +- An MMseqs2 ready database. These databases were compiled by the developers of MMseqs2 and can be called using their labels. All available options can be found [here](https://github.com/soedinglab/MMseqs2/wiki#downloading-databases). Only use those databases that have taxonomy files available (i.e. Taxonomy column shows "yes"). By default MMseqs2 in the pipeline uses '[Kalamari](https://github.com/lskatz/Kalamari)', and runs an aminoacid-based alignment. However, if the user requires a more comprehensive taxonomic classification, we recommend the use of [GTDB](https://gtdb.ecogenomic.org/), but for that please remember to increase the memory, CPU threads and time required for the process `MMSEQS_TAXONOMY`. ```bash --taxa_classification_mmseqs_db_id 'Kalamari' @@ -145,19 +146,19 @@ By default, the databases used by InterProScan is set as `PANTHER,ProSiteProfile ### antiSMASH -antiSMASH has a minimum contig parameter, in which only contigs of a certain length (or longer) will be screened. In cases where no hits are found in these, the tool ends successfully without hits. However if no contigs in an input file reach that minimum threshold, the tool will end with a 'failure' code, and cause the pipeline to crash. +antiSMASH has a minimum contig parameter, in which only contigs of a certain length (or longer) will be screened. If no contigs in an input file reach that minimum threshold, the tool will end with a 'failure' code, and cause the pipeline to crash. When the annotation is run with Prokka, the resulting `.gbk` file passed to antiSMASH may produce the error `translation longer than location allows` and end the pipeline run. This Prokka bug has been reported before (see [discussion on GitHub](https://github.com/antismash/antismash/discussions/450)) and is not likely to be fixed soon. :::warning -If antiSMASH is run for BGC detection, we recommend to **not** run Prokka for annotation but instead use the default annotation tool (Pyrodigal) or switch to Prodigal, or (for bacteria only!) Bakta. +If antiSMASH is run for BGC detection, we recommend to **not** run Prokka for annotation but instead use the default annotation tool (Pyrodigal), or switch to Prodigal or (for bacteria only!) Bakta. ::: ## Databases and reference files Various tools of nf-core/funcscan use databases and reference files to operate. -nf-core/funcscan offers the functionality to auto-download databases for you, and as these databases can be very large, and we suggest to store these files in a central place from where you can reuse them across pipeline runs. +nf-core/funcscan offers the functionality to auto-download databases for you, and as these databases can be very large, we suggest to store these files in a central place from where you can reuse them across pipeline runs. If your infrastructure has internet access (particularly on compute nodes), we **highly recommend** allowing the pipeline to download these databases for you on a first run, saving these to your results directory with `--save_db`, then moving these to a different location (in case you wish to delete the results directory of this first run). An exception to this is HMM files where no auto-downloading functionality is possible. @@ -233,16 +234,16 @@ wget https://github.com/nf-core/funcscan/raw//bin/ampcombi_dow python3 ampcombi_download.py ``` -In addition to [DRAMP](http://dramp.cpu-bioinfor.org/), two more reference databases can be used to classify the recovered AMPs in the AMP workflow; [APD](https://aps.unmc.edu/) and [UniRef100](https://academic.oup.com/bioinformatics/article/23/10/1282/197795). Only one database can be used at a time using `--amp_ampcombi_db database_name`. +In addition to [DRAMP](http://dramp.cpu-bioinfor.org/), two more reference databases can be used to classify the recovered AMPs in the AMP workflow; [APD](https://aps.unmc.edu/) and [UniRef100](https://academic.oup.com/bioinformatics/article/23/10/1282/197795). Only one database can be used at a time using `--amp_ampcombi_db_id `. However, the user can also supply their own custom AMP database by following the guidelines in [AMPcombi](https://ampcombi.readthedocs.io/en/main/). This can then be passed to the pipeline with: ```bash ---amp_ampcombi_db_dir_path '/// +--amp_ampcombi_db '/// ``` -The contents of the directory should have files such as `*.fasta` and `*.tsv` in the top level; a fasta file and the corresponding table with structural, functional and (if reported) taxonomic classifications. AMPcombi will then generate the corresponding `mmseqs2` directory, in which all binary files are prepared for downstream alignment of the recovered AMPs with [MMseqs2](https://github.com/soedinglab/MMseqs2). These can also be provided by the user by setting up an mmseqs2 compatible database using `mmseqs createdb *.fasta` in a directory called `mmseqs2`. An example file structure for [DRAMP](http://dramp.cpu-bioinfor.org/) used as the reference database: +The contents of the directory should have files such as `*.fasta` and `*.tsv` in the top level; a fasta file and the corresponding table with structural, functional and (if reported) taxonomic classifications. AMPcombi will then generate the corresponding `mmseqs2` directory, in which all binary files are prepared for downstream alignment of the recovered AMPs with [MMseqs2](https://github.com/soedinglab/MMseqs2). These can also be provided by the user by setting up an MMseqs2-compatible database using `mmseqs createdb *.fasta` in a directory called `mmseqs2`. An example file structure for [DRAMP](http://dramp.cpu-bioinfor.org/) used as the reference database: ```bash amp_DRAMP_database/ @@ -260,7 +261,7 @@ amp_DRAMP_database/ ``` :::note{.fa-whale} -For both [DRAMP](http://dramp.cpu-bioinfor.org/) and [APD](https://aps.unmc.edu/), AMPcombi removes entries that contains any non amino acid residues by default. +For both [DRAMP](http://dramp.cpu-bioinfor.org/) and [APD](https://aps.unmc.edu/), AMPcombi removes entries that contain any non-amino-acid residues by default. ::: :::warning @@ -270,9 +271,9 @@ This is due to an incompatibility issue of Prodigal's output `.gbk` file with mu :::tip -- If `--run_protein_annotation` is activated, protein and domain classifications of the coding regions are generated and then used by the `ampcombi2/parsetables` module to create a table for every sample and the complete summary files e.g., `Ampcombi_summary.tsv`. - -In some cases when the AMP and the taxonomic classification subworkflows are turned on, it can happen that only summary files per sample are created in the output folder with **no** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster.tsv` files with no taxonomic classifications merged. This can occur if some AMP prediction parameters are 'too strict' or only one AMP tool is run, which can lead to no AMP hits found in any of the samples or in only one sample. Look out for the warning `[nf-core/funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.` in the stdout or `.nextflow.log` file. In that case we recommend to lower the AMP prediction thresholds and run more than one AMP prediction tool. +- If `--run_protein_annotation` is activated, protein and domain classifications of the coding regions are generated and then used by the `ampcombi2/parsetables` module to create a table for every sample and afterwards the combined summary files, e.g. `Ampcombi_summary.tsv`. +- In some cases when the AMP and the taxonomic classification subworkflows are turned on, it can happen that only summary files per sample are created in the output folder with **no** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster.tsv` files with no taxonomic classifications merged. This can occur if some AMP prediction parameters are 'too strict' or only one AMP tool is run, which can lead to no AMP hits found in any of the samples or in only one sample. Look out for the warning `[nf-core/funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.` in the stdout or `.nextflow.log` file. In that case we recommend to lower the AMP prediction thresholds and run more than one AMP prediction tool. +::: ### ABRicate @@ -385,10 +386,7 @@ conda activate deeparg 2. Run `deeparg download_data -o ////` -Or download the files directly from - -1. the [DeepARG FTP site](https://bench.cs.vt.edu/ftp/data/gustavo1/deeparg/database/) -2. the [DeepARG database Zenodo archive](https://zenodo.org/record/8280582) +Or download the files directly from the [DeepARG database Zenodo archive](https://zenodo.org/record/8280582). Note that more recent database versions maybe available from the [ARGMiner service](https://bench.cs.vt.edu/argminer/#/home). @@ -482,7 +480,6 @@ conda activate antismash-lite --bgc_antismash_installdir '/////antismash' ``` -Note that the names of the supplied folders must differ from each other (e.g. `antismash_db` and `antismash_dir`). The contents of the database directory should include directories such as `as-js/`, `clusterblast/`, `clustercompare/` etc. in the top level. The contents of the installation directory should include directories such as `common/` `config/` and files such as `custom_typing.py` `custom_typing.pyi` etc. in the top level. @@ -500,7 +497,7 @@ The flag `--save_db` saves the pipeline-downloaded databases in your results dir ### DeepBGC DeepBGC relies on trained models and Pfams to run its analysis. -nf-core/funcscan will download these databases for you. If the flag `--save_db` is set, the downloaded files will be stored in the output directory under `databases/deepbgc/`. +nf-core/funcscan will download these databases for you. If the flag `--save_db` is set, the downloaded files will be stored in the output directory under `/databases/deepbgc/`. Alternatively, you can download the database locally with: @@ -526,9 +523,9 @@ deepbgc_db/ ### InterProScan -[InterProScan](https://github.com/ebi-pf-team/interproscan) is used to provide more information about the proteins annotated on the contigs. By default, turning on this subworkflow with `--run_protein_annotation` will download and unzip the [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.72-103.0/) version 5.72-103.0. The database can be saved in the output directory `/databases/interproscan/` if the `--save_db` is turned on. Note: the huge database download (5.5GB) can take up to 4 hours depending on the bandwidth. +[InterProScan](https://github.com/ebi-pf-team/interproscan) is used to provide more information about the proteins annotated on the contigs. By default, turning on this subworkflow with `--run_protein_annotation` will download and unzip the [InterPro database](http://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.72-103.0/) version 5.72-103.0. The database can be saved in the output directory `/databases/interproscan/` if the `--save_db` is turned on. Note: the huge database download (5.5GB) can take up to 4 hours depending on the bandwidth. -A local version of the database can be supplied to the pipeline by passing the InterProScan database directory to `--protein_annotation_interproscan_db `. The directory can be created by running (e.g. for database version 5.67-99.0): +A local version of the database can be supplied to the pipeline by passing the InterProScan database directory to `--protein_annotation_interproscan_db `. The directory can be created by running (e.g. for database version 5.72-103.0): ``` curl -L https://ftp.ebi.ac.uk/pub/software/unix/iprscan/5/5.72-103.0/interproscan-5.72-103.0-64-bit.tar.gz -o interproscan_db/interproscan-5.72-103.0-64-bit.tar.gz @@ -565,7 +562,7 @@ interproscan_db/ ## Updating the pipeline -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: +When you run the below 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 nf-core/funcscan diff --git a/nextflow_schema.json b/nextflow_schema.json index e5674eee..4fb7d2af 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -66,7 +66,7 @@ "fa_icon": "fas fa-check-circle" } }, - "fa_icon": "fa fa-list-ol" + "fa_icon": "fa fa-list" }, "taxonomic_classification_general_options": { "title": "Taxonomic classification: general options", @@ -523,8 +523,7 @@ "type": "boolean", "fa_icon": "fa fa-star-of-life", "description": "This forces Pyrodigal to append asterisks (`*`) as stop codon indicators. Do not use when running AMP workflow.", - "help_text": "Some downstream tools like AMPlify cannot process sequences containing non-sequence characters like the stop codon indicator `*`. Thus, this flag is deactivated by default. Activate this flag to revert the behaviour and have Pyrodigal append `*` as stop codon indicator to annotated sequences.\n\nFor more information check the Pyrodigal [documentation](https://pyrodigal.readthedocs.io).\n\n> Modifies tool parameter(s):\n> - PYRODIGAL: `--no-stop-codon`", - "default": false + "help_text": "Some downstream tools like AMPlify cannot process sequences containing non-sequence characters like the stop codon indicator `*`. Thus, this flag is deactivated by default. Activate this flag to revert the behaviour and have Pyrodigal append `*` as stop codon indicator to annotated sequences.\n\nFor more information check the Pyrodigal [documentation](https://pyrodigal.readthedocs.io).\n\n> Modifies tool parameter(s):\n> - PYRODIGAL: `--no-stop-codon`" } }, "fa_icon": "fas fa-file-signature" @@ -604,7 +603,7 @@ "fa_icon": "fas fa-ban" } }, - "fa_icon": "fa fa-plus-square" + "fa_icon": "fas fa-plus" }, "amp_ampir": { "title": "AMP: ampir", @@ -633,7 +632,7 @@ "fa_icon": "fas fa-ruler-horizontal" } }, - "fa_icon": "fa fa-plus-square" + "fa_icon": "fas fa-plus" }, "amp_hmmsearch": { "title": "AMP: hmmsearch", @@ -672,7 +671,7 @@ "fa_icon": "fas fa-save" } }, - "fa_icon": "fa fa-plus-square", + "fa_icon": "fas fa-plus", "help_text": "HMMER/hmmsearch is used for searching sequence databases for sequence homologs, and for making sequence alignments. It implements methods using probabilistic models called profile hidden Markov models (profile HMMs). `hmmsearch` is used to search one or more profiles against a sequence database.\n\nFor more information check the HMMER [documentation](http://hmmer.org/).\n\n" }, "amp_macrel": { @@ -687,7 +686,7 @@ "fa_icon": "fas fa-ban" } }, - "fa_icon": "fa fa-plus-square" + "fa_icon": "fas fa-plus" }, "amp_ampcombi2_parsetables": { "title": "AMP: ampcombi2 parsetables", @@ -785,7 +784,7 @@ "fa_icon": "fas fa-address-card" } }, - "fa_icon": "fa fa-plus-square" + "fa_icon": "fas fa-plus" }, "amp_ampcombi2_cluster": { "title": "AMP: ampcombi2 cluster", @@ -842,7 +841,7 @@ "fa_icon": "fas fa-book-dead" } }, - "fa_icon": "fa fa-plus-square" + "fa_icon": "fas fa-plus" }, "arg_amrfinderplus": { "title": "ARG: AMRFinderPlus", @@ -1182,7 +1181,7 @@ "type": "object", "description": "These parameters influence general BGC settings like minimum input sequence length.", "default": "", - "fa_icon": "fa fa-sliders", + "fa_icon": "fas fa-angle-double-right", "properties": { "bgc_mincontiglength": { "type": "integer", @@ -1293,7 +1292,7 @@ "fa_icon": "fas fa-search" } }, - "fa_icon": "fa fa-sliders" + "fa_icon": "fas fa-angle-double-right" }, "bgc_deepbgc": { "title": "BGC: DeepBGC", @@ -1375,7 +1374,7 @@ "help_text": "DeepBGC classification score threshold for assigning classes to BGCs.\n\nFor more information see the DeepBGC [documentation](https://github.com/Merck/deepbgc).\n\n> Modifies tool parameter(s)\n> - DeepBGC: `--classifier-score`" } }, - "fa_icon": "fa fa-sliders" + "fa_icon": "fas fa-angle-double-right" }, "bgc_gecco": { "title": "BGC: GECCO", @@ -1423,7 +1422,7 @@ "fa_icon": "fas fa-ruler-horizontal" } }, - "fa_icon": "fa fa-sliders" + "fa_icon": "fas fa-angle-double-right" }, "bgc_hmmsearch": { "title": "BGC: hmmsearch", @@ -1462,7 +1461,7 @@ "fa_icon": "fas fa-save" } }, - "fa_icon": "fa fa-sliders" + "fa_icon": "fas fa-angle-double-right" }, "institutional_config_options": { "title": "Institutional config options", From efa164a512d19c53a92b0574a18fbd14800dc62a Mon Sep 17 00:00:00 2001 From: jasmezz Date: Tue, 11 Feb 2025 17:39:45 +0100 Subject: [PATCH 142/175] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e9721f26..8c823cad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#446](https://github.com/nf-core/funcscan/pull/446) Updated antiSMASH modules to fix apptainer execution. (by @jasmezz and @jfy133) - [#448](https://github.com/nf-core/funcscan/pull/448) Fixed taxonomy merge to work with output from GTDB/SILVA/KALAMARI. (by @darcy220606) - [#447](https://github.com/nf-core/funcscan/pull/447) Added `--annotation_pyrodigal_usespecialstopcharacter` parameter to improve AMPlify screening. (by @jasmezz) +- [#452](https://github.com/nf-core/funcscan/pull/452) Updated all documentation and parameter pages. (by @jasmezz) ### `Dependencies` From 26927ca76ccf012efcc694135c00ff8faf29659f Mon Sep 17 00:00:00 2001 From: jasmezz Date: Tue, 11 Feb 2025 17:45:25 +0100 Subject: [PATCH 143/175] Fix linting --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 920d8f33..18e1c710 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -273,7 +273,7 @@ This is due to an incompatibility issue of Prodigal's output `.gbk` file with mu - If `--run_protein_annotation` is activated, protein and domain classifications of the coding regions are generated and then used by the `ampcombi2/parsetables` module to create a table for every sample and afterwards the combined summary files, e.g. `Ampcombi_summary.tsv`. - In some cases when the AMP and the taxonomic classification subworkflows are turned on, it can happen that only summary files per sample are created in the output folder with **no** `Ampcombi_summary.tsv` and `Ampcombi_summary_cluster.tsv` files with no taxonomic classifications merged. This can occur if some AMP prediction parameters are 'too strict' or only one AMP tool is run, which can lead to no AMP hits found in any of the samples or in only one sample. Look out for the warning `[nf-core/funcscan] AMPCOMBI2: 0/1 file passed. Skipping AMPCOMBI2_COMPLETE, AMPCOMBI2_CLUSTER, and TAXONOMY MERGING steps.` in the stdout or `.nextflow.log` file. In that case we recommend to lower the AMP prediction thresholds and run more than one AMP prediction tool. -::: + ::: ### ABRicate From b82d49820f1e0fb36159b233ee0e3f1020b3fcd5 Mon Sep 17 00:00:00 2001 From: Jasmin Frangenberg <73216762+jasmezz@users.noreply.github.com> Date: Wed, 12 Feb 2025 10:30:52 +0000 Subject: [PATCH 144/175] Apply suggestions from code review Co-authored-by: James A. Fellows Yates --- README.md | 2 +- docs/usage.md | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 9fedfa94..6d12d5a9 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ The nf-core/funcscan AWS full test dataset are contigs generated by the MGnify s 1. Quality control of input sequences with [`SeqKit`](https://bioinf.shenwei.me/seqkit/) 2. Taxonomic classification of contigs of **prokaryotic origin** with [`MMseqs2`](https://github.com/soedinglab/MMseqs2) 3. Annotation of assembled prokaryotic contigs with [`Prodigal`](https://github.com/hyattpd/Prodigal), [`Pyrodigal`](https://github.com/althonos/pyrodigal), [`Prokka`](https://github.com/tseemann/prokka), or [`Bakta`](https://github.com/oschwengers/bakta) -4. Annotation of coding sequences from 3. to obtain protein families and domains with [`InterProScan`](https://github.com/ebi-pf-team/interproscan) +4. Annotation of coding sequences from 3. to obtain general protein families and domains with [`InterProScan`](https://github.com/ebi-pf-team/interproscan) 5. Screening contigs for antimicrobial peptide-like sequences with [`ampir`](https://cran.r-project.org/web/packages/ampir/index.html), [`Macrel`](https://github.com/BigDataBiology/macrel), [`HMMER`](http://hmmer.org/), [`AMPlify`](https://github.com/bcgsc/AMPlify) 6. Screening contigs for antibiotic resistant gene-like sequences with [`ABRicate`](https://github.com/tseemann/abricate), [`AMRFinderPlus`](https://github.com/ncbi/amr), [`fARGene`](https://github.com/fannyhb/fargene), [`RGI`](https://card.mcmaster.ca/analyze/rgi), [`DeepARG`](https://bench.cs.vt.edu/deeparg). [`argNorm`](https://github.com/BigDataBiology/argNorm) is used to map the outputs of `DeepARG`, `AMRFinderPlus`, and `ABRicate` to the [`Antibiotic Resistance Ontology`](https://www.ebi.ac.uk/ols4/ontologies/aro) for consistent ARG classification terms. 7. Screening contigs for biosynthetic gene cluster-like sequences with [`antiSMASH`](https://antismash.secondarymetabolites.org), [`DeepBGC`](https://github.com/Merck/deepbgc), [`GECCO`](https://gecco.embl.de/), [`HMMER`](http://hmmer.org/) diff --git a/docs/usage.md b/docs/usage.md index 18e1c710..0d3800ec 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -23,8 +23,8 @@ To run any of the three screening workflows (AMP, ARG, and/or BGC), taxonomic cl - `--run_amp_screening` - `--run_arg_screening` - `--run_bgc_screening` -- `--run_taxa_classification` (for additional taxonomic annotations) -- `--run_protein_annotation` (for additional protein family and domain annotation) +- `--run_taxa_classification` (for optional additional taxonomic annotations) +- `--run_protein_annotation` (for optional additional protein family and domain annotation) When switched on, all tools of the given workflow will be run by default. If you don't need specific tools, you can explicitly skip them. The exception is HMMsearch, which needs to be explicitly switched on and provided with HMM screening files (AMP and BGC workflows, see [parameter documentation](/funcscan/parameters)). For the taxonomic classification, MMseqs2 is currently the only tool implemented in the pipeline. Likewise, InterProScan is the only tool for protein sequence annotation. @@ -126,7 +126,7 @@ MMseqs2 is currently the only taxonomic classification tool used in the pipeline The contents of the directory should have files such as `.version` and `.taxonomy` in the top level. -- An MMseqs2 ready database. These databases were compiled by the developers of MMseqs2 and can be called using their labels. All available options can be found [here](https://github.com/soedinglab/MMseqs2/wiki#downloading-databases). Only use those databases that have taxonomy files available (i.e. Taxonomy column shows "yes"). By default MMseqs2 in the pipeline uses '[Kalamari](https://github.com/lskatz/Kalamari)', and runs an aminoacid-based alignment. However, if the user requires a more comprehensive taxonomic classification, we recommend the use of [GTDB](https://gtdb.ecogenomic.org/), but for that please remember to increase the memory, CPU threads and time required for the process `MMSEQS_TAXONOMY`. +- An MMseqs2 ready database. These databases were compiled by the developers of MMseqs2 and can be called using their labels. All available options can be found [here](https://github.com/soedinglab/MMseqs2/wiki#downloading-databases). Only use those databases that have taxonomy files available (i.e. Taxonomy column shows "yes"). By default MMseqs2 in the pipeline uses '[Kalamari](https://github.com/lskatz/Kalamari)', and runs an amino acid-based alignment. However, if the user requires a more comprehensive taxonomic classification, we recommend the use of [GTDB](https://gtdb.ecogenomic.org/), but for that please remember to increase the memory, CPU threads and time required for the process `MMSEQS_TAXONOMY`. ```bash --taxa_classification_mmseqs_db_id 'Kalamari' @@ -261,7 +261,7 @@ amp_DRAMP_database/ ``` :::note{.fa-whale} -For both [DRAMP](http://dramp.cpu-bioinfor.org/) and [APD](https://aps.unmc.edu/), AMPcombi removes entries that contain any non-amino-acid residues by default. +For both [DRAMP](http://dramp.cpu-bioinfor.org/) and [APD](https://aps.unmc.edu/), AMPcombi removes entries that contain any non-amino acid residues by default. ::: :::warning From 129a1c15b8f4ada0afd950d307e280f7414a5761 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 12 Feb 2025 14:40:25 +0100 Subject: [PATCH 145/175] Add 2.1 metromap --- docs/images/funcscan_metro_workflow.png | Bin 544852 -> 657079 bytes docs/images/funcscan_metro_workflow.svg | 684 +++++--- docs/images/funcscan_metro_workflow_dark.png | Bin 503305 -> 546843 bytes docs/images/funcscan_metro_workflow_dark.svg | 1612 ++++++++++-------- 4 files changed, 1373 insertions(+), 923 deletions(-) diff --git a/docs/images/funcscan_metro_workflow.png b/docs/images/funcscan_metro_workflow.png index 7fda27569626cf0e1f20293e1c817c3d6dc1c48d..0fd853e61005683a86e8ca3cc5fcad1a8224c742 100644 GIT binary patch literal 657079 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%0A?0sD#?tAzzdP~ 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 z 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⪼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

    if1aAAq0va&0P>Ps-NQPqjI0Cy%8H82WqDP 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

    O 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 B+H?Q_ diff --git a/docs/images/funcscan_metro_workflow.svg b/docs/images/funcscan_metro_workflow.svg index c9d291fb..a0d0f7bf 100644 --- a/docs/images/funcscan_metro_workflow.svg +++ b/docs/images/funcscan_metro_workflow.svg @@ -3,8 +3,8 @@ hAMRonizationhAMRonizationABRicateAMRFinderPlusDeepARGfARGeneRGIgunzipgunzipMMseqs2SeqKitSeqKitProkkaProdigalPyrodigalBaktaBaktaAMPcombiAMPcombicomBGCcomBGCSummaryDeepBGCInterProScanhmmsearchhmmsearchv2.0v2.1LEGENDLEGENDTaxonomic ClassificationAnnotation (Taxonomic, Protein) + y="133.87894" /> diff --git a/docs/images/funcscan_metro_workflow_dark.png b/docs/images/funcscan_metro_workflow_dark.png index 7656d59599ab391a6234f2099a8d5449e573a5ee..3175053e20bc1fe863c6bfefd0527f5a9468ca3a 100644 GIT binary patch literal 546843 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 aLW)SQO`>;|m2mbkyxDsohWQh7 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 dnt{xI4|G+ErhcNH=X8k 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

    *fnJB`vA~~ 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 e*`jU6OQGrS;X@RO-jA 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 literal 544852 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

    diff --git a/docs/usage.md b/docs/usage.md index b4581b6d..0964dc6a 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -85,9 +85,9 @@ The above pipeline run specified with a params file in yaml format: nextflow run nf-core/funcscan -profile docker -params-file params.yaml ``` -with `params.yaml` containing: +with: -```yaml +```yaml title="params.yaml" input: './samplesheet.csv' outdir: './results/' genome: 'GRCh37' @@ -199,14 +199,6 @@ See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config If you have any questions or issues please send us a message on [Slack](https://nf-co.re/join/slack) on the [`#configs` channel](https://nfcore.slack.com/channels/configs). -## Azure Resource Requests - -To be used with the `azurebatch` profile by specifying the `-profile azurebatch`. -We recommend providing a compute `params.vm_type` of `Standard_D16_v3` VMs by default but these options can be changed if required. - -Note that the choice of VM size depends on your quota and the overall workload during the analysis. -For a thorough list, please refer the [Azure Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes). - ## Running in the background Nextflow handles job submissions and supervises the running jobs. The Nextflow process must run until the pipeline is finished. diff --git a/main.nf b/main.nf index 310f8408..98ea263b 100644 --- a/main.nf +++ b/main.nf @@ -9,8 +9,6 @@ ---------------------------------------------------------------------------------------- */ -nextflow.enable.dsl = 2 - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS / WORKFLOWS @@ -20,7 +18,6 @@ nextflow.enable.dsl = 2 include { FUNCSCAN } from './workflows/funcscan' include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_funcscan_pipeline' include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_funcscan_pipeline' - include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_funcscan_pipeline' /* @@ -56,10 +53,8 @@ workflow NFCORE_FUNCSCAN { FUNCSCAN ( samplesheet ) - emit: multiqc_report = FUNCSCAN.out.multiqc_report // channel: /path/to/multiqc_report.html - } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -70,27 +65,24 @@ workflow NFCORE_FUNCSCAN { workflow { main: - // // SUBWORKFLOW: Run initialisation tasks // PIPELINE_INITIALISATION ( params.version, - params.help, params.validate_params, params.monochrome_logs, args, params.outdir, params.input ) - + // // WORKFLOW: Run main workflow // NFCORE_FUNCSCAN ( PIPELINE_INITIALISATION.out.samplesheet ) - // // SUBWORKFLOW: Run completion tasks // diff --git a/modules.json b/modules.json index 33e1e5c7..27f92084 100644 --- a/modules.json +++ b/modules.json @@ -7,12 +7,12 @@ "nf-core": { "fastqc": { "branch": "master", - "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] } } @@ -21,17 +21,17 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "d20fb2a9cc3e2835e9d067d1046a63252eb17352", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "92de218a329bfc9a9033116eb5f65fd270e72ba3", + "git_sha": "2fdce49d30c0254f76bc0f13c55c17455c1251ab", "installed_by": ["subworkflows"] }, - "utils_nfvalidation_plugin": { + "utils_nfschema_plugin": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "bbd5a41f4535a8defafe6080e00ea74c45f4f96c", "installed_by": ["subworkflows"] } } diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml index 1787b38a..691d4c76 100644 --- a/modules/nf-core/fastqc/environment.yml +++ b/modules/nf-core/fastqc/environment.yml @@ -1,7 +1,5 @@ -name: fastqc channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::fastqc=0.12.1 diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index d79f1c86..d8989f48 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -26,7 +26,10 @@ process FASTQC { def rename_to = old_new_pairs*.join(' ').join(' ') def renamed_files = old_new_pairs.collect{ old_name, new_name -> new_name }.join(' ') - def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') + // The total amount of allocated RAM by FastQC is equal to the number of threads defined (--threads) time the amount of RAM defined (--memory) + // https://github.com/s-andrews/FastQC/blob/1faeea0412093224d7f6a07f777fad60a5650795/fastqc#L211-L222 + // Dividing the task.memory by task.cpu allows to stick to requested amount of RAM in the label + def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') / task.cpus // FastQC memory value allowed range (100 - 10000) def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb) diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml index ee5507e0..4827da7a 100644 --- a/modules/nf-core/fastqc/meta.yml +++ b/modules/nf-core/fastqc/meta.yml @@ -16,35 +16,44 @@ tools: homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ licence: ["GPL-2.0-only"] + identifier: biotools:fastqc input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - html: - type: file - description: FastQC report - pattern: "*_{fastqc.html}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.html": + type: file + description: FastQC report + pattern: "*_{fastqc.html}" - zip: - type: file - description: FastQC report archive - pattern: "*_{fastqc.zip}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.zip": + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@grst" diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test index 70edae4d..e9d79a07 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ b/modules/nf-core/fastqc/tests/main.nf.test @@ -23,17 +23,14 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. - // looks like this:
    Mon 2 Oct 2023
    test.gz
    - // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_single") } + { assert process.success }, + // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. + // looks like this:
    Mon 2 Oct 2023
    test.gz
    + // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -54,16 +51,14 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_paired") } + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -83,13 +78,11 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_interleaved") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -109,13 +102,11 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_bam") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -138,22 +129,20 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, - { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, - { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][2]).text.contains("File typeConventional base calls") }, - { assert path(process.out.html[0][1][3]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_multiple") } + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, + { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, + { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][1]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][2]).text.contains("File typeConventional base calls") }, + { assert path(process.out.html[0][1][3]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -173,21 +162,18 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_custom_prefix") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("File typeConventional base calls") }, + { assert snapshot(process.out.versions).match() } ) } } test("sarscov2 single-end [fastq] - stub") { - options "-stub" - + options "-stub" when { process { """ @@ -201,12 +187,123 @@ nextflow_process { then { assertAll ( - { assert process.success }, - { assert snapshot(process.out.html.collect { file(it[1]).getName() } + - process.out.zip.collect { file(it[1]).getName() } + - process.out.versions ).match("fastqc_stub") } + { assert process.success }, + { assert snapshot(process.out).match() } ) } } + test("sarscov2 paired-end [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 interleaved [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 paired-end [bam] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 multiple [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 custom_prefix - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'mysample', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } } diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap index 86f7c311..d5db3092 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ b/modules/nf-core/fastqc/tests/main.nf.test.snap @@ -1,88 +1,392 @@ { - "fastqc_versions_interleaved": { + "sarscov2 custom_prefix": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:07.293713" + "timestamp": "2024-07-22T11:02:16.374038" }, - "fastqc_stub": { + "sarscov2 single-end [fastq] - stub": { "content": [ - [ - "test.html", - "test.zip", - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:24.993809" + }, + "sarscov2 custom_prefix - stub": { + "content": [ + { + "0": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:31:01.425198" + "timestamp": "2024-07-22T11:03:10.93942" }, - "fastqc_versions_multiple": { + "sarscov2 interleaved [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:55.797907" + "timestamp": "2024-07-22T11:01:42.355718" }, - "fastqc_versions_bam": { + "sarscov2 paired-end [bam]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:26.795862" + "timestamp": "2024-07-22T11:01:53.276274" }, - "fastqc_versions_single": { + "sarscov2 multiple [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:39:27.043675" + "timestamp": "2024-07-22T11:02:05.527626" }, - "fastqc_versions_paired": { + "sarscov2 paired-end [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:31.188871" + }, + "sarscov2 paired-end [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:34.273566" + }, + "sarscov2 multiple [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:39:47.584191" + "timestamp": "2024-07-22T11:03:02.304411" }, - "fastqc_versions_custom_prefix": { + "sarscov2 single-end [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:19.095607" + }, + "sarscov2 interleaved [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:44.640184" + }, + "sarscov2 paired-end [bam] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:41:14.576531" + "timestamp": "2024-07-22T11:02:53.550742" } } \ No newline at end of file diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index ca39fb67..f1cd99b0 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -1,7 +1,5 @@ -name: multiqc channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::multiqc=1.21 + - bioconda::multiqc=1.24.1 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 47ac352f..b9ccebdb 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,14 +3,16 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.21--pyhdfd78af_0' : - 'biocontainers/multiqc:1.21--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.25--pyhdfd78af_0' : + 'biocontainers/multiqc:1.25--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" path(multiqc_config) path(extra_multiqc_config) path(multiqc_logo) + path(replace_names) + path(sample_names) output: path "*multiqc_report.html", emit: report @@ -23,16 +25,22 @@ process MULTIQC { script: def args = task.ext.args ?: '' + def prefix = task.ext.prefix ? "--filename ${task.ext.prefix}.html" : '' def config = multiqc_config ? "--config $multiqc_config" : '' def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : '' - def logo = multiqc_logo ? /--cl-config 'custom_logo: "${multiqc_logo}"'/ : '' + def logo = multiqc_logo ? "--cl-config 'custom_logo: \"${multiqc_logo}\"'" : '' + def replace = replace_names ? "--replace-names ${replace_names}" : '' + def samples = sample_names ? "--sample-names ${sample_names}" : '' """ multiqc \\ --force \\ $args \\ $config \\ + $prefix \\ $extra_config \\ $logo \\ + $replace \\ + $samples \\ . cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index 45a9bc35..b16c1879 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -1,5 +1,6 @@ name: multiqc -description: Aggregate results from bioinformatics analyses across many samples into a single report +description: Aggregate results from bioinformatics analyses across many samples into + a single report keywords: - QC - bioinformatics tools @@ -12,40 +13,59 @@ tools: homepage: https://multiqc.info/ documentation: https://multiqc.info/docs/ 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: - type: file - description: Optional logo file for MultiQC - pattern: "*.{png}" + - - 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: + type: file + description: Optional logo file for MultiQC + pattern: "*.{png}" + - - 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}" + - - sample_names: + type: file + description: | + Optional TSV file with headers, passed to the MultiQC --sample_names + argument. + pattern: "*.{tsv}" output: - report: - type: file - description: MultiQC report file - pattern: "multiqc_report.html" + - "*multiqc_report.html": + type: file + description: MultiQC report file + pattern: "multiqc_report.html" - data: - type: directory - description: MultiQC data dir - pattern: "multiqc_data" + - "*_data": + type: directory + description: MultiQC data dir + pattern: "multiqc_data" - plots: - type: file - description: Plots created by MultiQC - pattern: "*_data" + - "*_plots": + type: file + description: Plots created by MultiQC + pattern: "*_data" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@abhi18av" - "@bunop" diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test index f1c4242e..33316a7d 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test +++ b/modules/nf-core/multiqc/tests/main.nf.test @@ -8,6 +8,8 @@ nextflow_process { tag "modules_nfcore" tag "multiqc" + config "./nextflow.config" + test("sarscov2 single-end [fastqc]") { when { @@ -17,6 +19,8 @@ nextflow_process { input[1] = [] input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } @@ -41,6 +45,8 @@ nextflow_process { input[1] = Channel.of(file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true)) input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } @@ -66,6 +72,8 @@ nextflow_process { input[1] = [] input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index bfebd802..b779e469 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,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:48:55.657331" + "timestamp": "2024-07-10T12:41:34.562023" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:49:49.071937" + "timestamp": "2024-07-10T11:27:11.933869532" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:49:25.457567" + "timestamp": "2024-07-10T11:26:56.709849369" } -} \ No newline at end of file +} diff --git a/modules/nf-core/multiqc/tests/nextflow.config b/modules/nf-core/multiqc/tests/nextflow.config new file mode 100644 index 00000000..c537a6a3 --- /dev/null +++ b/modules/nf-core/multiqc/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'MULTIQC' { + ext.prefix = null + } +} diff --git a/nextflow.config b/nextflow.config index d8b2fb67..c6216936 100644 --- a/nextflow.config +++ b/nextflow.config @@ -16,7 +16,6 @@ params { genome = null igenomes_base = 's3://ngi-igenomes/igenomes/' igenomes_ignore = false - // MultiQC options multiqc_config = null multiqc_title = null @@ -33,48 +32,26 @@ params { 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/' - // 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 - - // Max resource options - // Defaults only, expecting to be overwritten - max_memory = '128.GB' - max_cpus = 16 - max_time = '240.h' - // Schema validation default options - validationFailUnrecognisedParams = false - validationLenientMode = false - validationSchemaIgnoreParams = 'genomes,igenomes_base' - validationShowHiddenParams = false - validate_params = true - + validate_params = true + } // Load base.config by default for all pipelines includeConfig 'conf/base.config' -// Load nf-core custom profiles from different Institutions -try { - includeConfig "${params.custom_config_base}/nfcore_custom.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") -} - -// Load nf-core/funcscan custom profiles from different institutions. -try { - includeConfig "${params.custom_config_base}/pipeline/funcscan.config" -} catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config/funcscan profiles: ${params.custom_config_base}/pipeline/funcscan.config") -} profiles { debug { dumpHashes = true @@ -89,7 +66,7 @@ profiles { podman.enabled = false shifter.enabled = false charliecloud.enabled = false - conda.channels = ['conda-forge', 'bioconda', 'defaults'] + conda.channels = ['conda-forge', 'bioconda'] apptainer.enabled = false } mamba { @@ -178,25 +155,23 @@ profiles { test_full { includeConfig 'conf/test_full.config' } } -// Set default registry for Apptainer, Docker, Podman and Singularity independent of -profile -// Will not be used unless Apptainer / Docker / Podman / Singularity are enabled -// Set to your registry if you have a mirror of containers -apptainer.registry = 'quay.io' -docker.registry = 'quay.io' -podman.registry = 'quay.io' -singularity.registry = 'quay.io' +// 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" -// Nextflow plugins -plugins { - id 'nf-validation@1.1.3' // Validation of pipeline parameters and creation of an input channel from a sample sheet -} +// Load nf-core/funcscan 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/funcscan.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 +// Set to your registry if you have a mirror of containers +apptainer.registry = 'quay.io' +docker.registry = 'quay.io' +podman.registry = 'quay.io' +singularity.registry = 'quay.io' +charliecloud.registry = 'quay.io' // Load igenomes.config if required -if (!params.igenomes_ignore) { - includeConfig 'conf/igenomes.config' -} else { - params.genomes = [:] -} +includeConfig !params.igenomes_ignore ? 'conf/igenomes.config' : 'conf/igenomes_ignored.config' // Export these variables to prevent local Python/R libraries from conflicting with those in the container // The JULIA depot path has been adjusted to a fixed path `/usr/local/share/julia` that needs to be used for packages in the container. // See https://apeltzer.github.io/post/03-julia-lang-nextflow/ for details on that. Once we have a common agreement on where to keep Julia packages, this is adjustable. @@ -208,8 +183,15 @@ env { JULIA_DEPOT_PATH = "/usr/local/share/julia" } -// Capture exit codes from upstream processes when piping -process.shell = ['/bin/bash', '-euo', 'pipefail'] +// 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. +""" // Disable process selector warnings by default. Use debug profile to enable warnings. nextflow.enable.configProcessNamesValidation = false @@ -238,43 +220,47 @@ manifest { homePage = 'https://github.com/nf-core/funcscan' description = """Pipeline for screening for functional components of assembled contigs""" mainScript = 'main.nf' - nextflowVersion = '!>=23.04.0' - version = '1.2.0dev' + nextflowVersion = '!>=24.04.2' + version = '2.1.0dev' doi = '' } -// Load modules.config for DSL2 module specific options -includeConfig 'conf/modules.config' +// Nextflow plugins +plugins { + id 'nf-schema@2.1.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet +} + +validation { + defaultIgnoreParams = ["genomes"] + help { + enabled = true + command = "nextflow run $manifest.name -profile --input samplesheet.csv --outdir " + fullParameter = "help_full" + showHiddenParameter = "show_hidden" + beforeText = """ +-\033[2m----------------------------------------------------\033[0m- + \033[0;32m,--.\033[0;30m/\033[0;32m,-.\033[0m +\033[0;34m ___ __ __ __ ___ \033[0;32m/,-._.--~\'\033[0m +\033[0;34m |\\ | |__ __ / ` / \\ |__) |__ \033[0;33m} {\033[0m +\033[0;34m | \\| | \\__, \\__/ | \\ |___ \033[0;32m\\`-._,-`-,\033[0m + \033[0;32m`._,._,\'\033[0m +\033[0;35m ${manifest.name} ${manifest.version}\033[0m +-\033[2m----------------------------------------------------\033[0m- +""" + afterText = """${manifest.doi ? "* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""} +* The nf-core framework + https://doi.org/10.1038/s41587-020-0439-x -// Function to ensure that resource requirements don't go beyond -// a maximum limit -def check_max(obj, type) { - if (type == 'memory') { - try { - if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) - return params.max_memory as nextflow.util.MemoryUnit - else - return obj - } catch (all) { - println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'time') { - try { - if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) - return params.max_time as nextflow.util.Duration - else - return obj - } catch (all) { - println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'cpus') { - try { - return Math.min( obj, params.max_cpus as int ) - } catch (all) { - println " ### ERROR ### Max cpus '${params.max_cpus}' is not valid! Using default value: $obj" - return obj - } +* Software dependencies + https://github.com/${manifest.name}/blob/master/CITATIONS.md +""" + } + summary { + beforeText = validation.help.beforeText + afterText = validation.help.afterText } } + +// Load modules.config for DSL2 module specific options +includeConfig 'conf/modules.config' + diff --git a/nextflow_schema.json b/nextflow_schema.json index 7aab9ce6..e536a9d2 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1,10 +1,10 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/funcscan/master/nextflow_schema.json", "title": "nf-core/funcscan pipeline parameters", "description": "Pipeline for screening for functional components of assembled contigs", "type": "object", - "definitions": { + "$defs": { "input_output_options": { "title": "Input/output options", "type": "object", @@ -71,6 +71,14 @@ "fa_icon": "fas fa-ban", "hidden": true, "help_text": "Do not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config`." + }, + "igenomes_base": { + "type": "string", + "format": "directory-path", + "description": "The base path to the igenomes reference files", + "fa_icon": "fas fa-ban", + "hidden": true, + "default": "s3://ngi-igenomes/igenomes/" } } }, @@ -122,41 +130,6 @@ } } }, - "max_job_request_options": { - "title": "Max job request options", - "type": "object", - "fa_icon": "fab fa-acquisitions-incorporated", - "description": "Set the top limit for requested resources for any single job.", - "help_text": "If you are running on a smaller system, a pipeline step requesting more resources than are available may cause the Nextflow to stop the run with an error. These options allow you to cap the maximum resources requested by any single job so that the pipeline will run on your system.\n\nNote that you can not _increase_ the resources requested by any job using these options. For that you will need your own configuration file. See [the nf-core website](https://nf-co.re/usage/configuration) for details.", - "properties": { - "max_cpus": { - "type": "integer", - "description": "Maximum number of CPUs that can be requested for any single job.", - "default": 16, - "fa_icon": "fas fa-microchip", - "hidden": true, - "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`" - }, - "max_memory": { - "type": "string", - "description": "Maximum amount of memory that can be requested for any single job.", - "default": "128.GB", - "fa_icon": "fas fa-memory", - "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", - "hidden": true, - "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" - }, - "max_time": { - "type": "string", - "description": "Maximum amount of time that can be requested for any single job.", - "default": "240.h", - "fa_icon": "far fa-clock", - "pattern": "^(\\d+\\.?\\s*(s|m|h|d|day)\\s*)+$", - "hidden": true, - "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" - } - } - }, "generic_options": { "title": "Generic options", "type": "object", @@ -164,12 +137,6 @@ "description": "Less common options for the pipeline, typically set in a config file.", "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.", "properties": { - "help": { - "type": "boolean", - "description": "Display help text.", - "fa_icon": "fas fa-question-circle", - "hidden": true - }, "version": { "type": "boolean", "description": "Display version and exit.", @@ -245,27 +212,6 @@ "fa_icon": "fas fa-check-square", "hidden": true }, - "validationShowHiddenParams": { - "type": "boolean", - "fa_icon": "far fa-eye-slash", - "description": "Show all params when using `--help`", - "hidden": true, - "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." - }, - "validationFailUnrecognisedParams": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters fails when an unrecognised parameter is found.", - "hidden": true, - "help_text": "By default, when an unrecognised parameter is found, it returns a warinig." - }, - "validationLenientMode": { - "type": "boolean", - "fa_icon": "far fa-check-circle", - "description": "Validation of parameters in lenient more.", - "hidden": true, - "help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)." - }, "pipelines_testdata_base_path": { "type": "string", "fa_icon": "far fa-check-circle", @@ -278,19 +224,16 @@ }, "allOf": [ { - "$ref": "#/definitions/input_output_options" - }, - { - "$ref": "#/definitions/reference_genome_options" + "$ref": "#/$defs/input_output_options" }, { - "$ref": "#/definitions/institutional_config_options" + "$ref": "#/$defs/reference_genome_options" }, { - "$ref": "#/definitions/max_job_request_options" + "$ref": "#/$defs/institutional_config_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/$defs/generic_options" } ] } diff --git a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf index 5523e4c8..2f940c68 100644 --- a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf @@ -8,17 +8,14 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { UTILS_NFVALIDATION_PLUGIN } from '../../nf-core/utils_nfvalidation_plugin' -include { paramsSummaryMap } from 'plugin/nf-validation' -include { fromSamplesheet } from 'plugin/nf-validation' -include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' +include { UTILS_NFSCHEMA_PLUGIN } from '../../nf-core/utils_nfschema_plugin' +include { paramsSummaryMap } from 'plugin/nf-schema' +include { samplesheetToList } from 'plugin/nf-schema' include { completionEmail } from '../../nf-core/utils_nfcore_pipeline' include { completionSummary } from '../../nf-core/utils_nfcore_pipeline' -include { dashedLine } from '../../nf-core/utils_nfcore_pipeline' -include { nfCoreLogo } from '../../nf-core/utils_nfcore_pipeline' include { imNotification } from '../../nf-core/utils_nfcore_pipeline' include { UTILS_NFCORE_PIPELINE } from '../../nf-core/utils_nfcore_pipeline' -include { workflowCitation } from '../../nf-core/utils_nfcore_pipeline' +include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' /* ======================================================================================== @@ -30,7 +27,6 @@ workflow PIPELINE_INITIALISATION { take: version // boolean: Display version and exit - help // boolean: Display help text validate_params // boolean: Boolean whether to validate parameters against the schema at runtime monochrome_logs // boolean: Do not use coloured log outputs nextflow_cli_args // array: List of positional nextflow CLI args @@ -51,20 +47,16 @@ workflow PIPELINE_INITIALISATION { workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1 ) + // // Validate parameters and generate parameter summary to stdout // - pre_help_text = nfCoreLogo(monochrome_logs) - post_help_text = '\n' + workflowCitation() + '\n' + dashedLine(monochrome_logs) - def String workflow_command = "nextflow run ${workflow.manifest.name} -profile --input samplesheet.csv --outdir " - UTILS_NFVALIDATION_PLUGIN ( - help, - workflow_command, - pre_help_text, - post_help_text, + UTILS_NFSCHEMA_PLUGIN ( + workflow, validate_params, - "nextflow_schema.json" + null ) + // // Check config provided to the pipeline @@ -80,8 +72,9 @@ workflow PIPELINE_INITIALISATION { // // Create channel from input file provided through params.input // + Channel - .fromSamplesheet("input") + .fromList(samplesheetToList(params.input, "${projectDir}/assets/schema_input.json")) .map { meta, fastq_1, fastq_2 -> if (!fastq_2) { @@ -91,8 +84,8 @@ workflow PIPELINE_INITIALISATION { } } .groupTuple() - .map { - validateInputSamplesheet(it) + .map { samplesheet -> + validateInputSamplesheet(samplesheet) } .map { meta, fastqs -> @@ -117,13 +110,13 @@ workflow PIPELINE_COMPLETION { email // string: email address email_on_fail // string: email address sent on pipeline failure plaintext_email // boolean: Send plain-text email instead of HTML + outdir // path: Path to output directory where results will be published monochrome_logs // boolean: Disable ANSI colour codes in log output hook_url // string: hook URL for notifications multiqc_report // string: Path to MultiQC report main: - summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") // @@ -131,11 +124,18 @@ workflow PIPELINE_COMPLETION { // workflow.onComplete { if (email || email_on_fail) { - completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs, multiqc_report.toList()) + completionEmail( + summary_params, + email, + email_on_fail, + plaintext_email, + outdir, + monochrome_logs, + multiqc_report.toList() + ) } completionSummary(monochrome_logs) - if (hook_url) { imNotification(summary_params, hook_url) } @@ -165,7 +165,7 @@ def validateInputSamplesheet(input) { def (metas, fastqs) = input[1..2] // Check that multiple runs of the same sample are of the same datatype i.e. single-end / paired-end - def endedness_ok = metas.collect{ it.single_end }.unique().size == 1 + def endedness_ok = metas.collect{ meta -> meta.single_end }.unique().size == 1 if (!endedness_ok) { error("Please check input samplesheet -> Multiple runs of a sample must be of the same datatype i.e. single-end or paired-end: ${metas[0].id}") } @@ -197,7 +197,6 @@ def genomeExistsError() { error(error_string) } } - // // Generate methods description for MultiQC // @@ -239,8 +238,10 @@ def methodsDescriptionText(mqc_methods_yaml) { // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers // Removing ` ` since the manifest.doi is a string and not a proper list def temp_doi_ref = "" - String[] manifest_doi = meta.manifest_map.doi.tokenize(",") - for (String doi_ref: manifest_doi) temp_doi_ref += "(doi:
    ${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), " + def manifest_doi = meta.manifest_map.doi.tokenize(",") + manifest_doi.each { doi_ref -> + temp_doi_ref += "(doi: ${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), " + } meta["doi_text"] = temp_doi_ref.substring(0, temp_doi_ref.length() - 2) } else meta["doi_text"] = "" meta["nodoi_text"] = meta.manifest_map.doi ? "" : "
  • If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used.
  • " @@ -261,3 +262,4 @@ def methodsDescriptionText(mqc_methods_yaml) { return description_html.toString() } + diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index ac31f28f..28e32b20 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -2,10 +2,6 @@ // Subworkflow with functionality that may be useful for any Nextflow pipeline // -import org.yaml.snakeyaml.Yaml -import groovy.json.JsonOutput -import nextflow.extension.FilesEx - /* ======================================================================================== SUBWORKFLOW DEFINITION @@ -58,7 +54,7 @@ workflow UTILS_NEXTFLOW_PIPELINE { // Generate version string // def getWorkflowVersion() { - String version_string = "" + def version_string = "" as String if (workflow.manifest.version) { def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' version_string += "${prefix_v}${workflow.manifest.version}" @@ -79,10 +75,10 @@ def dumpParametersToJSON(outdir) { def timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') def filename = "params_${timestamp}.json" def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") - def jsonStr = JsonOutput.toJson(params) - temp_pf.text = JsonOutput.prettyPrint(jsonStr) + def jsonStr = groovy.json.JsonOutput.toJson(params) + temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) - FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") + nextflow.extension.FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") temp_pf.delete() } @@ -90,7 +86,7 @@ def dumpParametersToJSON(outdir) { // When running with -profile conda, warn if channels have not been set-up appropriately // def checkCondaChannels() { - Yaml parser = new Yaml() + def parser = new org.yaml.snakeyaml.Yaml() def channels = [] try { def config = parser.load("conda config --show channels".execute().text) @@ -102,14 +98,16 @@ def checkCondaChannels() { // Check that all channels are present // This channel list is ordered by required channel priority. - def required_channels_in_order = ['conda-forge', 'bioconda', 'defaults'] + def required_channels_in_order = ['conda-forge', 'bioconda'] def channels_missing = ((required_channels_in_order as Set) - (channels as Set)) as Boolean // Check that they are in the right order def channel_priority_violation = false - def n = required_channels_in_order.size() - for (int i = 0; i < n - 1; i++) { - channel_priority_violation |= !(channels.indexOf(required_channels_in_order[i]) < channels.indexOf(required_channels_in_order[i+1])) + + required_channels_in_order.eachWithIndex { channel, index -> + if (index < required_channels_in_order.size() - 1) { + channel_priority_violation |= !(channels.indexOf(channel) < channels.indexOf(required_channels_in_order[index+1])) + } } if (channels_missing | channel_priority_violation) { diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config b/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config index d0a926bf..a09572e5 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config @@ -3,7 +3,7 @@ manifest { author = """nf-core""" homePage = 'https://127.0.0.1' description = """Dummy pipeline""" - nextflowVersion = '!>=23.04.0' + nextflowVersion = '!>=23.04.0' version = '9.9.9' doi = 'https://doi.org/10.5281/zenodo.5070524' } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index 14558c39..cbd8495b 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -2,9 +2,6 @@ // Subworkflow with utility functions specific to the nf-core pipeline template // -import org.yaml.snakeyaml.Yaml -import nextflow.extension.FilesEx - /* ======================================================================================== SUBWORKFLOW DEFINITION @@ -34,7 +31,7 @@ workflow UTILS_NFCORE_PIPELINE { // Warn if a -profile or Nextflow config has not been provided to run the pipeline // def checkConfigProvided() { - valid_config = true + def valid_config = true as Boolean if (workflow.profile == 'standard' && workflow.configFiles.size() <= 1) { log.warn "[$workflow.manifest.name] You are attempting to run the pipeline without any custom configuration!\n\n" + "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + @@ -66,11 +63,13 @@ def checkProfileProvided(nextflow_cli_args) { // def workflowCitation() { def temp_doi_ref = "" - String[] manifest_doi = workflow.manifest.doi.tokenize(",") + def manifest_doi = workflow.manifest.doi.tokenize(",") // Using a loop to handle multiple DOIs // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers // Removing ` ` since the manifest.doi is a string and not a proper list - for (String doi_ref: manifest_doi) temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" + manifest_doi.each { doi_ref -> + temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" + } return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + "* The pipeline\n" + temp_doi_ref + "\n" + @@ -84,7 +83,7 @@ def workflowCitation() { // Generate workflow version string // def getWorkflowVersion() { - String version_string = "" + def version_string = "" as String if (workflow.manifest.version) { def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' version_string += "${prefix_v}${workflow.manifest.version}" @@ -102,8 +101,8 @@ def getWorkflowVersion() { // Get software versions for pipeline // def processVersionsFromYAML(yaml_file) { - Yaml yaml = new Yaml() - versions = yaml.load(yaml_file).collectEntries { k, v -> [ k.tokenize(':')[-1], v ] } + def yaml = new org.yaml.snakeyaml.Yaml() + def versions = yaml.load(yaml_file).collectEntries { k, v -> [ k.tokenize(':')[-1], v ] } return yaml.dumpAsMap(versions).trim() } @@ -124,7 +123,7 @@ def workflowVersionToYAML() { def softwareVersionsToYAML(ch_versions) { return ch_versions .unique() - .map { processVersionsFromYAML(it) } + .map { version -> processVersionsFromYAML(version) } .unique() .mix(Channel.of(workflowVersionToYAML())) } @@ -134,19 +133,19 @@ def softwareVersionsToYAML(ch_versions) { // def paramsSummaryMultiqc(summary_params) { def summary_section = '' - for (group in summary_params.keySet()) { + summary_params.keySet().each { group -> def group_params = summary_params.get(group) // This gets the parameters of that particular group if (group_params) { summary_section += "

    $group

    \n" summary_section += "
    \n" - for (param in group_params.keySet()) { + group_params.keySet().sort().each { param -> summary_section += "
    $param
    ${group_params.get(param) ?: 'N/A'}
    \n" } summary_section += "
    \n" } } - String yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" + def yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" as String yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" @@ -161,7 +160,7 @@ def paramsSummaryMultiqc(summary_params) { // nf-core logo // def nfCoreLogo(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map String.format( """\n ${dashedLine(monochrome_logs)} @@ -180,7 +179,7 @@ def nfCoreLogo(monochrome_logs=true) { // Return dashed line // def dashedLine(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map return "-${colors.dim}----------------------------------------------------${colors.reset}-" } @@ -188,7 +187,7 @@ def dashedLine(monochrome_logs=true) { // ANSII colours used for terminal logging // def logColours(monochrome_logs=true) { - Map colorcodes = [:] + def colorcodes = [:] as Map // Reset / Meta colorcodes['reset'] = monochrome_logs ? '' : "\033[0m" @@ -287,7 +286,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi } def summary = [:] - for (group in summary_params.keySet()) { + summary_params.keySet().sort().each { group -> summary << summary_params[group] } @@ -344,10 +343,10 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi def sendmail_html = sendmail_template.toString() // Send the HTML e-mail - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map if (email_address) { try { - if (plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } + if (plaintext_email) { throw new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') } // Try to send HTML e-mail using sendmail def sendmail_tf = new File(workflow.launchDir.toString(), ".sendmail_tmp.html") sendmail_tf.withWriter { w -> w << sendmail_html } @@ -364,13 +363,13 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi // Write summary e-mail HTML to a file def output_hf = new File(workflow.launchDir.toString(), ".pipeline_report.html") output_hf.withWriter { w -> w << email_html } - FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html"); + nextflow.extension.FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html"); output_hf.delete() // Write summary e-mail TXT to a file def output_tf = new File(workflow.launchDir.toString(), ".pipeline_report.txt") output_tf.withWriter { w -> w << email_txt } - FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt"); + nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt"); output_tf.delete() } @@ -378,7 +377,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi // Print pipeline summary on completion // def completionSummary(monochrome_logs=true) { - Map colors = logColours(monochrome_logs) + def colors = logColours(monochrome_logs) as Map if (workflow.success) { if (workflow.stats.ignoredCount == 0) { log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" @@ -395,7 +394,7 @@ def completionSummary(monochrome_logs=true) { // def imNotification(summary_params, hook_url) { def summary = [:] - for (group in summary_params.keySet()) { + summary_params.keySet().sort().each { group -> summary << summary_params[group] } diff --git a/subworkflows/nf-core/utils_nfschema_plugin/main.nf b/subworkflows/nf-core/utils_nfschema_plugin/main.nf new file mode 100644 index 00000000..4994303e --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf @@ -0,0 +1,46 @@ +// +// Subworkflow that uses the nf-schema plugin to validate parameters and render the parameter summary +// + +include { paramsSummaryLog } from 'plugin/nf-schema' +include { validateParameters } from 'plugin/nf-schema' + +workflow UTILS_NFSCHEMA_PLUGIN { + + take: + input_workflow // workflow: the workflow object used by nf-schema to get metadata from the workflow + validate_params // boolean: validate the parameters + parameters_schema // string: path to the parameters JSON schema. + // this has to be the same as the schema given to `validation.parametersSchema` + // 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 + + main: + + // + // Print parameter summary to stdout. This will display the parameters + // that differ from the default given in the JSON schema + // + if(parameters_schema) { + log.info paramsSummaryLog(input_workflow, parameters_schema:parameters_schema) + } else { + log.info paramsSummaryLog(input_workflow) + } + + // + // Validate the parameters using nextflow_schema.json or the schema + // given via the validation.parametersSchema configuration option + // + if(validate_params) { + if(parameters_schema) { + validateParameters(parameters_schema:parameters_schema) + } else { + validateParameters() + } + } + + emit: + dummy_emit = true +} + diff --git a/subworkflows/nf-core/utils_nfschema_plugin/meta.yml b/subworkflows/nf-core/utils_nfschema_plugin/meta.yml new file mode 100644 index 00000000..f7d9f028 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/meta.yml @@ -0,0 +1,35 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "utils_nfschema_plugin" +description: Run nf-schema to validate parameters and create a summary of changed parameters +keywords: + - validation + - JSON schema + - plugin + - parameters + - summary +components: [] +input: + - input_workflow: + type: object + description: | + The workflow object of the used pipeline. + This object contains meta data used to create the params summary log + - validate_params: + type: boolean + description: Validate the parameters and error if invalid. + - parameters_schema: + type: string + description: | + Path to the parameters JSON schema. + This has to be the same as the schema given to the `validation.parametersSchema` config + option. When this input is empty it will automatically use the configured schema or + "${projectDir}/nextflow_schema.json" as default. The schema should not be given in this way + for meta pipelines. +output: + - dummy_emit: + type: boolean + description: Dummy emit to make nf-core subworkflows lint happy +authors: + - "@nvnieuwk" +maintainers: + - "@nvnieuwk" diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test new file mode 100644 index 00000000..842dc432 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test @@ -0,0 +1,117 @@ +nextflow_workflow { + + name "Test Subworkflow UTILS_NFSCHEMA_PLUGIN" + script "../main.nf" + workflow "UTILS_NFSCHEMA_PLUGIN" + + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/utils_nfschema_plugin" + tag "plugin/nf-schema" + + config "./nextflow.config" + + test("Should run nothing") { + + when { + + params { + test_data = '' + } + + workflow { + """ + validate_params = false + input[0] = workflow + input[1] = validate_params + input[2] = "" + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should validate params") { + + when { + + params { + test_data = '' + outdir = 1 + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "" + """ + } + } + + then { + assertAll( + { assert workflow.failed }, + { assert workflow.stdout.any { it.contains('ERROR ~ Validation of pipeline parameters failed!') } } + ) + } + } + + test("Should run nothing - custom schema") { + + when { + + params { + test_data = '' + } + + workflow { + """ + validate_params = false + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should validate params - custom schema") { + + when { + + params { + test_data = '' + outdir = 1 + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + """ + } + } + + then { + assertAll( + { assert workflow.failed }, + { assert workflow.stdout.any { it.contains('ERROR ~ Validation of pipeline parameters failed!') } } + ) + } + } +} diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config new file mode 100644 index 00000000..0907ac58 --- /dev/null +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config @@ -0,0 +1,8 @@ +plugins { + id "nf-schema@2.1.0" +} + +validation { + parametersSchema = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + monochromeLogs = true +} \ No newline at end of file diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json similarity index 95% rename from subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json rename to subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json index 7626c1c9..331e0d2f 100644 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json @@ -1,10 +1,10 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/./master/nextflow_schema.json", "title": ". pipeline parameters", "description": "", "type": "object", - "definitions": { + "$defs": { "input_output_options": { "title": "Input/output options", "type": "object", @@ -87,10 +87,10 @@ }, "allOf": [ { - "$ref": "#/definitions/input_output_options" + "$ref": "#/$defs/input_output_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/$defs/generic_options" } ] } diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf b/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf deleted file mode 100644 index 2585b65d..00000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf +++ /dev/null @@ -1,62 +0,0 @@ -// -// Subworkflow that uses the nf-validation plugin to render help text and parameter summary -// - -/* -======================================================================================== - IMPORT NF-VALIDATION PLUGIN -======================================================================================== -*/ - -include { paramsHelp } from 'plugin/nf-validation' -include { paramsSummaryLog } from 'plugin/nf-validation' -include { validateParameters } from 'plugin/nf-validation' - -/* -======================================================================================== - SUBWORKFLOW DEFINITION -======================================================================================== -*/ - -workflow UTILS_NFVALIDATION_PLUGIN { - - take: - print_help // boolean: print help - workflow_command // string: default commmand used to run pipeline - pre_help_text // string: string to be printed before help text and summary log - post_help_text // string: string to be printed after help text and summary log - validate_params // boolean: validate parameters - schema_filename // path: JSON schema file, null to use default value - - main: - - log.debug "Using schema file: ${schema_filename}" - - // Default values for strings - pre_help_text = pre_help_text ?: '' - post_help_text = post_help_text ?: '' - workflow_command = workflow_command ?: '' - - // - // Print help message if needed - // - if (print_help) { - log.info pre_help_text + paramsHelp(workflow_command, parameters_schema: schema_filename) + post_help_text - System.exit(0) - } - - // - // Print parameter summary to stdout - // - log.info pre_help_text + paramsSummaryLog(workflow, parameters_schema: schema_filename) + post_help_text - - // - // Validate parameters relative to the parameter JSON schema - // - if (validate_params){ - validateParameters(parameters_schema: schema_filename) - } - - emit: - dummy_emit = true -} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml b/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml deleted file mode 100644 index 3d4a6b04..00000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml +++ /dev/null @@ -1,44 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json -name: "UTILS_NFVALIDATION_PLUGIN" -description: Use nf-validation to initiate and validate a pipeline -keywords: - - utility - - pipeline - - initialise - - validation -components: [] -input: - - print_help: - type: boolean - description: | - Print help message and exit - - workflow_command: - type: string - description: | - The command to run the workflow e.g. "nextflow run main.nf" - - pre_help_text: - type: string - description: | - Text to print before the help message - - post_help_text: - type: string - description: | - Text to print after the help message - - validate_params: - type: boolean - description: | - Validate the parameters and error if invalid. - - schema_filename: - type: string - description: | - The filename of the schema to validate against. -output: - - dummy_emit: - type: boolean - description: | - Dummy emit to make nf-core subworkflows lint happy -authors: - - "@adamrtalbot" -maintainers: - - "@adamrtalbot" - - "@maxulysse" diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test deleted file mode 100644 index 5784a33f..00000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test +++ /dev/null @@ -1,200 +0,0 @@ -nextflow_workflow { - - name "Test Workflow UTILS_NFVALIDATION_PLUGIN" - script "../main.nf" - workflow "UTILS_NFVALIDATION_PLUGIN" - tag "subworkflows" - tag "subworkflows_nfcore" - tag "plugin/nf-validation" - tag "'plugin/nf-validation'" - tag "utils_nfvalidation_plugin" - tag "subworkflows/utils_nfvalidation_plugin" - - test("Should run nothing") { - - when { - - params { - monochrome_logs = true - test_data = '' - } - - workflow { - """ - help = false - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success } - ) - } - } - - test("Should run help") { - - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } } - ) - } - } - - test("Should run help with command") { - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = "nextflow run noorg/doesntexist" - pre_help_text = null - post_help_text = null - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('nextflow run noorg/doesntexist') } }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } } - ) - } - } - - test("Should run help with extra text") { - - - when { - - params { - monochrome_logs = true - test_data = '' - } - workflow { - """ - help = true - workflow_command = "nextflow run noorg/doesntexist" - pre_help_text = "pre-help-text" - post_help_text = "post-help-text" - validate_params = false - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.success }, - { assert workflow.exitStatus == 0 }, - { assert workflow.stdout.any { it.contains('pre-help-text') } }, - { assert workflow.stdout.any { it.contains('nextflow run noorg/doesntexist') } }, - { assert workflow.stdout.any { it.contains('Input/output options') } }, - { assert workflow.stdout.any { it.contains('--outdir') } }, - { assert workflow.stdout.any { it.contains('post-help-text') } } - ) - } - } - - test("Should validate params") { - - when { - - params { - monochrome_logs = true - test_data = '' - outdir = 1 - } - workflow { - """ - help = false - workflow_command = null - pre_help_text = null - post_help_text = null - validate_params = true - schema_filename = "$moduleTestDir/nextflow_schema.json" - - input[0] = help - input[1] = workflow_command - input[2] = pre_help_text - input[3] = post_help_text - input[4] = validate_params - input[5] = schema_filename - """ - } - } - - then { - assertAll( - { assert workflow.failed }, - { assert workflow.stdout.any { it.contains('ERROR ~ ERROR: Validation of pipeline parameters failed!') } } - ) - } - } -} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml deleted file mode 100644 index 60b1cfff..00000000 --- a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nfvalidation_plugin: - - subworkflows/nf-core/utils_nfvalidation_plugin/** diff --git a/workflows/funcscan.nf b/workflows/funcscan.nf index 7c478655..95aa43f7 100644 --- a/workflows/funcscan.nf +++ b/workflows/funcscan.nf @@ -3,10 +3,9 @@ IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - include { FASTQC } from '../modules/nf-core/fastqc/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' -include { paramsSummaryMap } from 'plugin/nf-validation' +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_funcscan_pipeline' @@ -21,12 +20,10 @@ workflow FUNCSCAN { take: ch_samplesheet // channel: samplesheet read in from --input - main: ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() - // // MODULE: Run FastQC // @@ -42,11 +39,12 @@ workflow FUNCSCAN { softwareVersionsToYAML(ch_versions) .collectFile( storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_pipeline_software_mqc_versions.yml', + name: 'nf_core_' + 'pipeline_software_' + 'mqc_' + 'versions.yml', sort: true, newLine: true ).set { ch_collated_versions } + // // MODULE: MultiQC // @@ -59,18 +57,19 @@ workflow FUNCSCAN { 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( + 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( methodsDescriptionText(ch_multiqc_custom_methods_description)) - ch_multiqc_files = ch_multiqc_files.mix( - ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) ch_multiqc_files = ch_multiqc_files.mix( ch_methods_description.collectFile( @@ -83,12 +82,14 @@ workflow FUNCSCAN { ch_multiqc_files.collect(), ch_multiqc_config.toList(), ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList() + ch_multiqc_logo.toList(), + [], + [] ) - emit: - multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html + emit:multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html versions = ch_versions // channel: [ path(versions.yml) ] + } /* From 01c5e490d95b1de54286e1024ece4c4e6c29ba67 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Wed, 9 Oct 2024 11:05:17 +0000 Subject: [PATCH 003/175] Template update for nf-core/tools version 3.0.1 --- .editorconfig | 4 - .github/CONTRIBUTING.md | 2 +- .github/workflows/awsfulltest.yml | 6 +- .github/workflows/linting.yml | 4 +- .nf-core.yml | 2 +- .prettierignore | 1 - docs/output.md | 1 - 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 | 26 +- nextflow.config | 8 +- .../utils_nfcore_funcscan_pipeline/main.nf | 12 +- .../nf-core/utils_nextflow_pipeline/main.nf | 46 ++- .../nf-core/utils_nfcore_pipeline/main.nf | 279 ++++++++++-------- 15 files changed, 209 insertions(+), 194 deletions(-) diff --git a/.editorconfig b/.editorconfig index e1058815..72dda289 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,7 +11,6 @@ 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 @@ -26,12 +25,9 @@ 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 diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 867f8876..8f39e21b 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -90,7 +90,7 @@ Once there, use `nf-core pipelines schema build` to add to `nextflow_schema.json ### Default processes resource requirements -Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/master/nf_core/pipeline-template/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. +Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/main/nf_core/pipeline-template/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. The process resources can be passed on to the tool dynamically within the process with the `${task.cpus}` and `${task.memory}` variables in the `script:` block. diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 7d1f54ce..cb53debf 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -14,16 +14,18 @@ on: jobs: run-platform: name: Run AWS full tests - if: github.repository == 'nf-core/funcscan' && github.event.review.state == 'approved' + # run only if the PR is approved by at least 2 reviewers and against the master branch or manually triggered + if: github.repository == 'nf-core/funcscan' && github.event.review.state == 'approved' && github.event.pull_request.base.ref == 'master' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest steps: - uses: octokit/request-action@v2.x id: check_approvals with: - route: GET /repos/${{ github.repository }}/pulls/${{ github.event.review.number }}/reviews + route: GET /repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - id: test_variables + if: github.event_name != 'workflow_dispatch' run: | JSON_RESPONSE='${{ steps.check_approvals.outputs.data }}' CURRENT_APPROVALS_COUNT=$(echo $JSON_RESPONSE | jq -c '[.[] | select(.state | contains("APPROVED")) ] | length') diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index b882838a..a502573c 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -42,10 +42,10 @@ jobs: architecture: "x64" - name: read .nf-core.yml - uses: pietrobolcato/action-read-yaml@1.0.0 + uses: pietrobolcato/action-read-yaml@1.1.0 id: read_yml with: - config: ${{ github.workspace }}/.nf-core.yaml + config: ${{ github.workspace }}/.nf-core.yml - name: Install dependencies run: | diff --git a/.nf-core.yml b/.nf-core.yml index 98117c52..908c03d5 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,7 +1,7 @@ bump_version: null lint: actions_ci: false -nf_core_version: 3.0.0 +nf_core_version: 3.0.1 org_path: null repository_type: pipeline template: diff --git a/.prettierignore b/.prettierignore index 610e5069..437d763d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,3 @@ - email_template.html adaptivecard.json slackreport.json diff --git a/docs/output.md b/docs/output.md index 642c4ff9..875a444a 100644 --- a/docs/output.md +++ b/docs/output.md @@ -14,7 +14,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [FastQC](#fastqc) - Raw read QC - [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution ### FastQC diff --git a/modules.json b/modules.json index 27f92084..e046cc65 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "multiqc": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "b8d36829fa84b6e404364abff787e8b07f6d058c", "installed_by": ["modules"] } } @@ -21,12 +21,12 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "d20fb2a9cc3e2835e9d067d1046a63252eb17352", + "git_sha": "9d05360da397692321d377b6102d2fb22507c6ef", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "2fdce49d30c0254f76bc0f13c55c17455c1251ab", + "git_sha": "772684d9d66f37b650c8ba5146ac1ee3ecba2acb", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index f1cd99b0..6f5b867b 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.24.1 + - bioconda::multiqc=1.25.1 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index b9ccebdb..9724d2f3 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--pyhdfd78af_0' : - 'biocontainers/multiqc:1.25--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.25.1--pyhdfd78af_0' : + 'biocontainers/multiqc:1.25.1--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 b779e469..2fcbb5ff 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,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T12:41:34.562023" + "timestamp": "2024-10-02T17:51:46.317523" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T11:27:11.933869532" + "timestamp": "2024-10-02T17:52:20.680978" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T11:26:56.709849369" + "timestamp": "2024-10-02T17:52:09.185842" } -} +} \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index c6216936..a59a284f 100644 --- a/nextflow.config +++ b/nextflow.config @@ -12,10 +12,12 @@ params { // TODO nf-core: Specify your pipeline's command line flags // Input options input = null + // References genome = null igenomes_base = 's3://ngi-igenomes/igenomes/' igenomes_ignore = false + // MultiQC options multiqc_config = null multiqc_title = null @@ -36,6 +38,7 @@ params { show_hidden = false version = false pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' + // Config options config_profile_name = null config_profile_description = null @@ -44,9 +47,9 @@ params { 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 - } // Load base.config by default for all pipelines @@ -161,6 +164,7 @@ includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${pa // Load nf-core/funcscan 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/funcscan.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 // Set to your registry if you have a mirror of containers @@ -172,6 +176,7 @@ charliecloud.registry = 'quay.io' // Load igenomes.config if required includeConfig !params.igenomes_ignore ? 'conf/igenomes.config' : 'conf/igenomes_ignored.config' + // Export these variables to prevent local Python/R libraries from conflicting with those in the container // The JULIA depot path has been adjusted to a fixed path `/usr/local/share/julia` that needs to be used for packages in the container. // See https://apeltzer.github.io/post/03-julia-lang-nextflow/ for details on that. Once we have a common agreement on where to keep Julia packages, this is adjustable. @@ -263,4 +268,3 @@ validation { // Load modules.config for DSL2 module specific options includeConfig 'conf/modules.config' - diff --git a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf index 2f940c68..8063833b 100644 --- a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf @@ -18,9 +18,9 @@ include { UTILS_NFCORE_PIPELINE } from '../../nf-core/utils_nfcore_pipeline' include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW TO INITIALISE PIPELINE -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow PIPELINE_INITIALISATION { @@ -99,9 +99,9 @@ workflow PIPELINE_INITIALISATION { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW FOR PIPELINE COMPLETION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow PIPELINE_COMPLETION { @@ -147,9 +147,9 @@ workflow PIPELINE_COMPLETION { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // // Check and validate pipeline parameters diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index 28e32b20..2b0dc67a 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -3,13 +3,12 @@ // /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NEXTFLOW_PIPELINE { - take: print_version // boolean: print version dump_parameters // boolean: dump parameters @@ -22,7 +21,7 @@ workflow UTILS_NEXTFLOW_PIPELINE { // Print workflow version and exit on --version // if (print_version) { - log.info "${workflow.manifest.name} ${getWorkflowVersion()}" + log.info("${workflow.manifest.name} ${getWorkflowVersion()}") System.exit(0) } @@ -45,9 +44,9 @@ workflow UTILS_NEXTFLOW_PIPELINE { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // @@ -72,11 +71,11 @@ def getWorkflowVersion() { // Dump pipeline parameters to a JSON file // def dumpParametersToJSON(outdir) { - def timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') - def filename = "params_${timestamp}.json" - def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") - def jsonStr = groovy.json.JsonOutput.toJson(params) - temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) + def timestamp = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') + def filename = "params_${timestamp}.json" + def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") + def jsonStr = groovy.json.JsonOutput.toJson(params) + temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr) nextflow.extension.FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") temp_pf.delete() @@ -91,9 +90,14 @@ def checkCondaChannels() { try { def config = parser.load("conda config --show channels".execute().text) channels = config.channels - } catch(NullPointerException | IOException e) { - log.warn "Could not verify conda channel configuration." - return + } + catch (NullPointerException e) { + log.warn("Could not verify conda channel configuration.") + return null + } + catch (IOException e) { + log.warn("Could not verify conda channel configuration.") + return null } // Check that all channels are present @@ -106,19 +110,13 @@ def checkCondaChannels() { required_channels_in_order.eachWithIndex { channel, index -> if (index < required_channels_in_order.size() - 1) { - channel_priority_violation |= !(channels.indexOf(channel) < channels.indexOf(required_channels_in_order[index+1])) + channel_priority_violation |= !(channels.indexOf(channel) < channels.indexOf(required_channels_in_order[index + 1])) } } if (channels_missing | channel_priority_violation) { - log.warn "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + - " There is a problem with your Conda configuration!\n\n" + - " You will need to set-up the conda-forge and bioconda channels correctly.\n" + - " Please refer to https://bioconda.github.io/\n" + - " The observed channel order is \n" + - " ${channels}\n" + - " but the following channel order is required:\n" + - " ${required_channels_in_order}\n" + - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + log.warn( + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + " There is a problem with your Conda configuration!\n\n" + " You will need to set-up the conda-forge and bioconda channels correctly.\n" + " Please refer to https://bioconda.github.io/\n" + " The observed channel order is \n" + " ${channels}\n" + " but the following channel order is required:\n" + " ${required_channels_in_order}\n" + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + ) } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index cbd8495b..b78273ca 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -3,13 +3,12 @@ // /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NFCORE_PIPELINE { - take: nextflow_cli_args @@ -22,9 +21,9 @@ workflow UTILS_NFCORE_PIPELINE { } /* -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -======================================================================================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // @@ -33,12 +32,9 @@ workflow UTILS_NFCORE_PIPELINE { def checkConfigProvided() { def valid_config = true as Boolean if (workflow.profile == 'standard' && workflow.configFiles.size() <= 1) { - log.warn "[$workflow.manifest.name] You are attempting to run the pipeline without any custom configuration!\n\n" + - "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + - " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + - " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + - " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + - "Please refer to the quick start section and usage docs for the pipeline.\n " + log.warn( + "[${workflow.manifest.name}] You are attempting to run the pipeline without any custom configuration!\n\n" + "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + "Please refer to the quick start section and usage docs for the pipeline.\n " + ) valid_config = false } return valid_config @@ -49,12 +45,14 @@ def checkConfigProvided() { // def checkProfileProvided(nextflow_cli_args) { if (workflow.profile.endsWith(',')) { - error "The `-profile` option cannot end with a trailing comma, please remove it and re-run the pipeline!\n" + - "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + error( + "The `-profile` option cannot end with a trailing comma, please remove it and re-run the pipeline!\n" + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + ) } if (nextflow_cli_args[0]) { - log.warn "nf-core pipelines do not accept positional arguments. The positional argument `${nextflow_cli_args[0]}` has been detected.\n" + - "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + log.warn( + "nf-core pipelines do not accept positional arguments. The positional argument `${nextflow_cli_args[0]}` has been detected.\n" + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + ) } } @@ -70,13 +68,7 @@ def workflowCitation() { manifest_doi.each { doi_ref -> temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n" } - return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + - "* The pipeline\n" + - temp_doi_ref + "\n" + - "* The nf-core framework\n" + - " https://doi.org/10.1038/s41587-020-0439-x\n\n" + - "* Software dependencies\n" + - " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" + return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + "* The pipeline\n" + temp_doi_ref + "\n" + "* The nf-core framework\n" + " https://doi.org/10.1038/s41587-020-0439-x\n\n" + "* Software dependencies\n" + " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" } // @@ -102,7 +94,7 @@ def getWorkflowVersion() { // def processVersionsFromYAML(yaml_file) { def yaml = new org.yaml.snakeyaml.Yaml() - def versions = yaml.load(yaml_file).collectEntries { k, v -> [ k.tokenize(':')[-1], v ] } + def versions = yaml.load(yaml_file).collectEntries { k, v -> [k.tokenize(':')[-1], v] } return yaml.dumpAsMap(versions).trim() } @@ -112,8 +104,8 @@ def processVersionsFromYAML(yaml_file) { def workflowVersionToYAML() { return """ Workflow: - $workflow.manifest.name: ${getWorkflowVersion()} - Nextflow: $workflow.nextflow.version + ${workflow.manifest.name}: ${getWorkflowVersion()} + Nextflow: ${workflow.nextflow.version} """.stripIndent().trim() } @@ -121,11 +113,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())) } // @@ -133,25 +121,31 @@ def softwareVersionsToYAML(ch_versions) { // def paramsSummaryMultiqc(summary_params) { def summary_section = '' - summary_params.keySet().each { group -> - def group_params = summary_params.get(group) // This gets the parameters of that particular group - if (group_params) { - summary_section += "

    $group

    \n" - summary_section += "
    \n" - group_params.keySet().sort().each { param -> - summary_section += "
    $param
    ${group_params.get(param) ?: 'N/A'}
    \n" + summary_params + .keySet() + .each { group -> + def group_params = summary_params.get(group) + // This gets the parameters of that particular group + if (group_params) { + summary_section += "

    ${group}

    \n" + summary_section += "
    \n" + group_params + .keySet() + .sort() + .each { param -> + summary_section += "
    ${param}
    ${group_params.get(param) ?: 'N/A'}
    \n" + } + summary_section += "
    \n" } - summary_section += "
    \n" } - } - def yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" as String - yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" - yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" - yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" - yaml_file_text += "plot_type: 'html'\n" - yaml_file_text += "data: |\n" - yaml_file_text += "${summary_section}" + def yaml_file_text = "id: '${workflow.manifest.name.replace('/', '-')}-summary'\n" as String + yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" + yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" + yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" + yaml_file_text += "plot_type: 'html'\n" + yaml_file_text += "data: |\n" + yaml_file_text += "${summary_section}" return yaml_file_text } @@ -199,54 +193,54 @@ def logColours(monochrome_logs=true) { colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m" // Regular Colors - colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" - colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" - colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" - colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" - colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" - colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" - colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" - colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" + colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" + colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" + colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" + colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" + colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" + colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" + colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" + colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" // Bold - colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" - colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" - colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" - colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" - colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" - colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" - colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" - colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" + colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" + colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" + colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" + colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" + colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" + colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" + colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" + colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" // Underline - colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" - colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" - colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" - colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" - colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" - colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" - colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" - colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" + colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" + colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" + colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" + colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" + colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" + colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" + colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" + colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" // High Intensity - colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" - colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" - colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" - colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" - colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" - colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" - colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" - colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" + colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" + colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" + colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" + colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" + colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" + colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" + colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" + colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" // Bold High Intensity - colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" - colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" - colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" - colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" - colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" - colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" - colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" - colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" + colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" + colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" + colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" + colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" + colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" + colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" + colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" + colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" return colorcodes } @@ -261,14 +255,15 @@ def attachMultiqcReport(multiqc_report) { mqc_report = multiqc_report.getVal() if (mqc_report.getClass() == ArrayList && mqc_report.size() >= 1) { if (mqc_report.size() > 1) { - log.warn "[$workflow.manifest.name] Found multiple reports from process 'MULTIQC', will use only one" + log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one") } mqc_report = mqc_report[0] } } - } catch (all) { + } + catch (Exception all) { if (multiqc_report) { - log.warn "[$workflow.manifest.name] Could not attach MultiQC report to summary email" + log.warn("[${workflow.manifest.name}] Could not attach MultiQC report to summary email") } } return mqc_report @@ -280,26 +275,35 @@ def attachMultiqcReport(multiqc_report) { def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs=true, multiqc_report=null) { // Set up the e-mail variables - def subject = "[$workflow.manifest.name] Successful: $workflow.runName" + def subject = "[${workflow.manifest.name}] Successful: ${workflow.runName}" if (!workflow.success) { - subject = "[$workflow.manifest.name] FAILED: $workflow.runName" + subject = "[${workflow.manifest.name}] FAILED: ${workflow.runName}" } def summary = [:] - summary_params.keySet().sort().each { group -> - summary << summary_params[group] - } + summary_params + .keySet() + .sort() + .each { group -> + summary << summary_params[group] + } def misc_fields = [:] misc_fields['Date Started'] = workflow.start misc_fields['Date Completed'] = workflow.complete misc_fields['Pipeline script file path'] = workflow.scriptFile misc_fields['Pipeline script hash ID'] = workflow.scriptId - if (workflow.repository) misc_fields['Pipeline repository Git URL'] = workflow.repository - if (workflow.commitId) misc_fields['Pipeline repository Git Commit'] = workflow.commitId - if (workflow.revision) misc_fields['Pipeline Git branch/tag'] = workflow.revision - misc_fields['Nextflow Version'] = workflow.nextflow.version - misc_fields['Nextflow Build'] = workflow.nextflow.build + if (workflow.repository) { + misc_fields['Pipeline repository Git URL'] = workflow.repository + } + if (workflow.commitId) { + misc_fields['Pipeline repository Git Commit'] = workflow.commitId + } + if (workflow.revision) { + misc_fields['Pipeline Git branch/tag'] = workflow.revision + } + misc_fields['Nextflow Version'] = workflow.nextflow.version + misc_fields['Nextflow Build'] = workflow.nextflow.build misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp def email_fields = [:] @@ -337,7 +341,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi // Render the sendmail template def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as nextflow.util.MemoryUnit - def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes() ] + def smail_fields = [email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()] def sf = new File("${workflow.projectDir}/assets/sendmail_template.txt") def sendmail_template = engine.createTemplate(sf).make(smail_fields) def sendmail_html = sendmail_template.toString() @@ -346,30 +350,32 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi def colors = logColours(monochrome_logs) as Map if (email_address) { try { - if (plaintext_email) { throw new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') } + if (plaintext_email) { +new org.codehaus.groovy.GroovyException('Send plaintext e-mail, not HTML') } // Try to send HTML e-mail using sendmail def sendmail_tf = new File(workflow.launchDir.toString(), ".sendmail_tmp.html") sendmail_tf.withWriter { w -> w << sendmail_html } - [ 'sendmail', '-t' ].execute() << sendmail_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (sendmail)-" - } catch (all) { + ['sendmail', '-t'].execute() << sendmail_html + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (sendmail)-") + } + catch (Exception all) { // Catch failures and try with plaintext - def mail_cmd = [ 'mail', '-s', subject, '--content-type=text/html', email_address ] + def mail_cmd = ['mail', '-s', subject, '--content-type=text/html', email_address] mail_cmd.execute() << email_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (mail)-" + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (mail)-") } } // Write summary e-mail HTML to a file def output_hf = new File(workflow.launchDir.toString(), ".pipeline_report.html") output_hf.withWriter { w -> w << email_html } - nextflow.extension.FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html"); + nextflow.extension.FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html") output_hf.delete() // Write summary e-mail TXT to a file def output_tf = new File(workflow.launchDir.toString(), ".pipeline_report.txt") output_tf.withWriter { w -> w << email_txt } - nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt"); + nextflow.extension.FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt") output_tf.delete() } @@ -380,12 +386,14 @@ def completionSummary(monochrome_logs=true) { def colors = logColours(monochrome_logs) as Map if (workflow.success) { if (workflow.stats.ignoredCount == 0) { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Pipeline completed successfully${colors.reset}-") + } + else { + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-") } - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed with errors${colors.reset}-" + } + else { + log.info("-${colors.purple}[${workflow.manifest.name}]${colors.red} Pipeline completed with errors${colors.reset}-") } } @@ -394,21 +402,30 @@ def completionSummary(monochrome_logs=true) { // def imNotification(summary_params, hook_url) { def summary = [:] - summary_params.keySet().sort().each { group -> - summary << summary_params[group] - } + summary_params + .keySet() + .sort() + .each { group -> + summary << summary_params[group] + } def misc_fields = [:] - misc_fields['start'] = workflow.start - misc_fields['complete'] = workflow.complete - misc_fields['scriptfile'] = workflow.scriptFile - misc_fields['scriptid'] = workflow.scriptId - if (workflow.repository) misc_fields['repository'] = workflow.repository - if (workflow.commitId) misc_fields['commitid'] = workflow.commitId - if (workflow.revision) misc_fields['revision'] = workflow.revision - misc_fields['nxf_version'] = workflow.nextflow.version - misc_fields['nxf_build'] = workflow.nextflow.build - misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp + misc_fields['start'] = workflow.start + misc_fields['complete'] = workflow.complete + misc_fields['scriptfile'] = workflow.scriptFile + misc_fields['scriptid'] = workflow.scriptId + if (workflow.repository) { + misc_fields['repository'] = workflow.repository + } + if (workflow.commitId) { + misc_fields['commitid'] = workflow.commitId + } + if (workflow.revision) { + misc_fields['revision'] = workflow.revision + } + misc_fields['nxf_version'] = workflow.nextflow.version + misc_fields['nxf_build'] = workflow.nextflow.build + misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp def msg_fields = [:] msg_fields['version'] = getWorkflowVersion() @@ -433,13 +450,13 @@ def imNotification(summary_params, hook_url) { def json_message = json_template.toString() // POST - def post = new URL(hook_url).openConnection(); + def post = new URL(hook_url).openConnection() post.setRequestMethod("POST") post.setDoOutput(true) post.setRequestProperty("Content-Type", "application/json") - post.getOutputStream().write(json_message.getBytes("UTF-8")); - def postRC = post.getResponseCode(); - if (! postRC.equals(200)) { - log.warn(post.getErrorStream().getText()); + post.getOutputStream().write(json_message.getBytes("UTF-8")) + def postRC = post.getResponseCode() + if (!postRC.equals(200)) { + log.warn(post.getErrorStream().getText()) } } From 10b698e1dad663446a20903e1c6a96ccfa02287c Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Fri, 11 Oct 2024 12:34:14 +0000 Subject: [PATCH 004/175] Template update for nf-core/tools version 3.0.2 --- .github/workflows/ci.yml | 60 +++++++++++++------ .../workflows/template_version_comment.yml | 21 ++++--- .gitignore | 1 + .nf-core.yml | 2 +- main.nf | 2 +- modules.json | 6 +- modules/nf-core/multiqc/main.nf | 2 +- nextflow.config | 4 +- .../utils_nfcore_funcscan_pipeline/main.nf | 4 +- .../nf-core/utils_nextflow_pipeline/main.nf | 30 +++++----- .../nf-core/utils_nfcore_pipeline/main.nf | 10 ++-- workflows/funcscan.nf | 2 - 12 files changed, 86 insertions(+), 58 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c29a55c3..e6930d68 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,6 +11,8 @@ on: 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 }}" @@ -18,7 +20,7 @@ concurrency: jobs: test: - name: Run pipeline with test data + 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 == 'nf-core/funcscan') }}" runs-on: ubuntu-latest @@ -27,33 +29,57 @@ jobs: 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@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 - - name: Install Nextflow + - name: Set up Nextflow uses: nf-core/setup-nextflow@v2 with: version: "${{ matrix.NXF_VER }}" - - name: Disk space cleanup - uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 + - name: Set up Apptainer + if: matrix.profile == 'singularity' + uses: eWaterCycle/setup-apptainer@main - - name: Run pipeline with test data (docker) - # TODO nf-core: You can customise CI pipeline run tests as required - # For example: adding multiple test runs with different parameters - # Remember that you can parallelise this by using strategy.matrix + - name: Set up Singularity + if: matrix.profile == 'singularity' run: | - nextflow run ${GITHUB_WORKSPACE} -profile test,docker --outdir ./results + 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: Run pipeline with test data (singularity) - # TODO nf-core: You can customise CI pipeline run tests as required + - name: Set up Conda + if: matrix.profile == 'conda' run: | - nextflow run ${GITHUB_WORKSPACE} -profile test,singularity --outdir ./results - if: "${{ github.base_ref == 'master' }}" + 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 (conda) - # TODO nf-core: You can customise CI pipeline run tests as required + - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" run: | - nextflow run ${GITHUB_WORKSPACE} -profile test,conda --outdir ./results - if: "${{ github.base_ref == 'master' }}" + nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} --outdir ./results diff --git a/.github/workflows/template_version_comment.yml b/.github/workflows/template_version_comment.yml index 9dea41f0..e8aafe44 100644 --- a/.github/workflows/template_version_comment.yml +++ b/.github/workflows/template_version_comment.yml @@ -10,9 +10,11 @@ jobs: steps: - name: Check out pipeline code uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 + with: + ref: ${{ github.event.pull_request.head.sha }} - name: Read template version from .nf-core.yml - uses: pietrobolcato/action-read-yaml@1.0.0 + uses: nichmor/minimal-read-yaml@v0.0.2 id: read_yml with: config: ${{ github.workspace }}/.nf-core.yml @@ -24,20 +26,21 @@ jobs: - name: Check nf-core outdated id: nf_core_outdated - run: pip list --outdated | grep nf-core + run: echo "OUTPUT=$(pip list --outdated | grep nf-core)" >> ${GITHUB_ENV} - name: Post nf-core template version comment uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2 if: | - ${{ steps.nf_core_outdated.outputs.stdout }} =~ 'nf-core' + contains(env.OUTPUT, 'nf-core') with: repo-token: ${{ secrets.NF_CORE_BOT_AUTH_TOKEN }} allow-repeats: false message: | - ## :warning: Newer version of the nf-core template is available. - - Your pipeline is using an old version of the nf-core template: ${{ steps.read_yml.outputs['nf_core_version'] }}. - Please update your pipeline to the latest version. - - For more documentation on how to update your pipeline, please see the [nf-core documentation](https://github.com/nf-core/tools?tab=readme-ov-file#sync-a-pipeline-with-the-template) and [Synchronisation documentation](https://nf-co.re/docs/contributing/sync). + > [!WARNING] + > Newer version of the nf-core template is available. + > + > Your pipeline is using an old version of the nf-core template: ${{ steps.read_yml.outputs['nf_core_version'] }}. + > Please update your pipeline to the latest version. + > + > For more documentation on how to update your pipeline, please see the [nf-core documentation](https://github.com/nf-core/tools?tab=readme-ov-file#sync-a-pipeline-with-the-template) and [Synchronisation documentation](https://nf-co.re/docs/contributing/sync). # diff --git a/.gitignore b/.gitignore index 5124c9ac..a42ce016 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ results/ testing/ testing* *.pyc +null/ diff --git a/.nf-core.yml b/.nf-core.yml index 908c03d5..4267fd77 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,7 +1,7 @@ bump_version: null lint: actions_ci: false -nf_core_version: 3.0.1 +nf_core_version: 3.0.2 org_path: null repository_type: pipeline template: diff --git a/main.nf b/main.nf index 98ea263b..0dc68a48 100644 --- a/main.nf +++ b/main.nf @@ -76,7 +76,7 @@ workflow { params.outdir, params.input ) - + // // WORKFLOW: Run main workflow // diff --git a/modules.json b/modules.json index e046cc65..cfc0ad65 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "multiqc": { "branch": "master", - "git_sha": "b8d36829fa84b6e404364abff787e8b07f6d058c", + "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", "installed_by": ["modules"] } } @@ -21,12 +21,12 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "9d05360da397692321d377b6102d2fb22507c6ef", + "git_sha": "3aa0aec1d52d492fe241919f0c6100ebf0074082", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "772684d9d66f37b650c8ba5146ac1ee3ecba2acb", + "git_sha": "1b6b9a3338d011367137808b49b923515080e3ba", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 9724d2f3..cc0643e1 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -52,7 +52,7 @@ process MULTIQC { stub: """ mkdir multiqc_data - touch multiqc_plots + mkdir multiqc_plots touch multiqc_report.html cat <<-END_VERSIONS > versions.yml diff --git a/nextflow.config b/nextflow.config index a59a284f..c9f36266 100644 --- a/nextflow.config +++ b/nextflow.config @@ -254,10 +254,10 @@ validation { """ afterText = """${manifest.doi ? "* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""} * The nf-core framework - https://doi.org/10.1038/s41587-020-0439-x + https://doi.org/10.1038/s41587-020-0439-x * Software dependencies - https://github.com/${manifest.name}/blob/master/CITATIONS.md + https://github.com/${manifest.name}/blob/master/CITATIONS.md """ } summary { diff --git a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf index 8063833b..7264f1d4 100644 --- a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf @@ -47,7 +47,6 @@ workflow PIPELINE_INITIALISATION { workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1 ) - // // Validate parameters and generate parameter summary to stdout // @@ -56,7 +55,6 @@ workflow PIPELINE_INITIALISATION { validate_params, null ) - // // Check config provided to the pipeline @@ -64,6 +62,7 @@ workflow PIPELINE_INITIALISATION { UTILS_NFCORE_PIPELINE ( nextflow_cli_args ) + // // Custom validation for pipeline parameters // @@ -110,7 +109,6 @@ workflow PIPELINE_COMPLETION { email // string: email address email_on_fail // string: email address sent on pipeline failure plaintext_email // boolean: Send plain-text email instead of HTML - outdir // path: Path to output directory where results will be published monochrome_logs // boolean: Disable ANSI colour codes in log output hook_url // string: hook URL for notifications diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf index 2b0dc67a..0fcbf7b3 100644 --- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -3,9 +3,9 @@ // /* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NEXTFLOW_PIPELINE { @@ -44,9 +44,9 @@ workflow UTILS_NEXTFLOW_PIPELINE { } /* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // @@ -106,17 +106,19 @@ def checkCondaChannels() { def channels_missing = ((required_channels_in_order as Set) - (channels as Set)) as Boolean // Check that they are in the right order - def channel_priority_violation = false - - required_channels_in_order.eachWithIndex { channel, index -> - if (index < required_channels_in_order.size() - 1) { - channel_priority_violation |= !(channels.indexOf(channel) < channels.indexOf(required_channels_in_order[index + 1])) - } - } + def channel_priority_violation = required_channels_in_order != channels.findAll { ch -> ch in required_channels_in_order } if (channels_missing | channel_priority_violation) { - log.warn( - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + " There is a problem with your Conda configuration!\n\n" + " You will need to set-up the conda-forge and bioconda channels correctly.\n" + " Please refer to https://bioconda.github.io/\n" + " The observed channel order is \n" + " ${channels}\n" + " but the following channel order is required:\n" + " ${required_channels_in_order}\n" + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" - ) + log.warn """\ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + There is a problem with your Conda configuration! + You will need to set-up the conda-forge and bioconda channels correctly. + Please refer to https://bioconda.github.io/ + The observed channel order is + ${channels} + but the following channel order is required: + ${required_channels_in_order} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + """.stripIndent(true) } } diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index b78273ca..5cb7bafe 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -3,9 +3,9 @@ // /* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUBWORKFLOW DEFINITION -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ workflow UTILS_NFCORE_PIPELINE { @@ -21,9 +21,9 @@ workflow UTILS_NFCORE_PIPELINE { } /* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTIONS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // @@ -62,7 +62,7 @@ def checkProfileProvided(nextflow_cli_args) { def workflowCitation() { def temp_doi_ref = "" def manifest_doi = workflow.manifest.doi.tokenize(",") - // Using a loop to handle multiple DOIs + // Handling multiple DOIs // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers // Removing ` ` since the manifest.doi is a string and not a proper list manifest_doi.each { doi_ref -> diff --git a/workflows/funcscan.nf b/workflows/funcscan.nf index 95aa43f7..8a25159c 100644 --- a/workflows/funcscan.nf +++ b/workflows/funcscan.nf @@ -57,13 +57,11 @@ workflow FUNCSCAN { 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( 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) From 2f48508b7655443dfa535537bec55f1718d2a4a7 Mon Sep 17 00:00:00 2001 From: Jasmin Frangenberg <73216762+jasmezz@users.noreply.github.com> Date: Fri, 11 Oct 2024 13:35:00 +0000 Subject: [PATCH 005/175] Update antismash, argnorm, rgi citations --- CITATIONS.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CITATIONS.md b/CITATIONS.md index 80493194..426cd614 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -26,13 +26,13 @@ > Feldgarden, M., Brover, V., Gonzalez-Escalona, N., Frye, J. G., Haendiges, J., Haft, D. H., Hoffmann, M., Pettengill, J. B., Prasad, A. B., Tillman, G. E., Tyson, G. H., & Klimke, W. (2021). AMRFinderPlus and the Reference Gene Catalog facilitate examination of the genomic links among antimicrobial resistance, stress response, and virulence. Scientific reports, 11(1), 12728. [DOI: 10.1038/s41598-021-91456-0](https://doi.org/10.1038/s41598-021-91456-0) -- [AntiSMASH](https://doi.org/10.1093/nar/gkab335) +- [AntiSMASH](https://doi.org/10.1093/nar/gkad344) - > Blin, K., Shaw, S., Kloosterman, A. M., Charlop-Powers, Z., van Wezel, G. P., Medema, M. H., & Weber, T. (2021). antiSMASH 6.0: improving cluster detection and comparison capabilities. Nucleic acids research, 49(W1), W29–W35. [DOI: 10.1093/nar/gkab335](https://doi.org/10.1093/nar/gkab335) + > Blin, K., Shaw, S., Augustijn, H. E., Reitz, Z. L., Biermann, F., Alanjary, M., Fetter, A., Terlouw B. R., Metcalf, W. W., Helfrich, E. J. N., van Wezel, G. P., Medema, M. H., & Weber, T. (2023). antiSMASH 7.0: new and improved predictions for detection, regulation, chemical structures and visualisation. Nucleic acids research, 51(W1), W46–W50. [DOI: 10.1093/nar/gkad344](https://doi.org/10.1093/nar/gkad344) -- [argNorm](https://github.com/BigDataBiology/argNorm) +- [argNorm](https://doi.org/10.5204/rep.eprints.252448) - > Perovic, S. U., Ramji, V., Chong, H., Duan, Y., Maguire, F., Coelho, L. P. (2024). BigDataBiology/argNorm. [DOI: 10.5281/zenodo.10963591](https://zenodo.org/doi/10.5281/zenodo.10963591) + > Ugarcina Perovic, S., Ramji, V., Chong, H., Duan, Y., Maguire, F., Coelho, L. P. (2024). argNorm: Normalization of antibiotic resistance gene annotations to the Antibiotic Resistance Ontology (ARO). [Preprint] (Unpublished) [DOI: 10.5204/rep.eprints.252448](https://doi.org/10.5204/rep.eprints.252448) - [Bakta](https://doi.org/10.1099/mgen.0.000685) @@ -90,7 +90,7 @@ > Larralde, M. (2022). Pyrodigal: Python bindings and interface to Prodigal, an efficient method for gene prediction in prokaryotes. Journal of Open Source Software, 7(72), 4296. [DOI: 10.21105/joss.04296](https://doi.org/10.21105/joss.04296) -- [RGI](https://doi.org/10.1093/nar/gkz935) +- [RGI](https://doi.org/10.1093/nar/gkac920) > Alcock, B. P., Huynh, W., Chalil, R., Smith, K. W., Raphenya, A. R., Wlodarski, M. A., Edalatmand, A., Petkau, A., Syed, S. A., Tsang, K. K., Baker, S. J. C., Dave, M., McCarthy, M. C., Mukiri, K. M., Nasir, J. A., Golbon, B., Imtiaz, H., Jiang, X., Kaur, K., Kwong, M., Liang, Z. C., Niu, K. C., Shan, P., Yang, J. Y. J., Gray, K. L., Hoad, G. R., Jia, B., Bhando, T., Carfrae, L. A., Farha, M. A., French, S., Gordzevich, R., Rachwalski, K., Tu, M. M., Bordeleau, E., Dooley, D., Griffiths, E., Zubyk, H. L., Brown, E. D., Maguire, F., Beiko, R. G., Hsiao, W. W. L., Brinkman F. S. L., Van Domselaar, G., McArthur, A. G. (2023). CARD 2023: expanded curation, support for machine learning, and resistome prediction at the Comprehensive Antibiotic Resistance Database. Nucleic acids research, 51(D1):D690-D699. [DOI: 10.1093/nar/gkac920](https://doi.org/10.1093/nar/gkac920) From b5e346e873ea6a3575ddd15629419d842eb744a4 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 23 Oct 2024 11:30:32 +0200 Subject: [PATCH 006/175] Skip igenomes and fastqc becuase no reads nor reference genome --- .nf-core.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.nf-core.yml b/.nf-core.yml index 4267fd77..a8716c4b 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -13,6 +13,8 @@ template: name: funcscan org: nf-core outdir: . - skip_features: null + skip_features: + - igenomes + - fastqc version: 2.1.0dev update: null From 57762a7f103244dd7d32f3c8ded1179ab4399168 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 23 Oct 2024 11:33:52 +0200 Subject: [PATCH 007/175] Remove max_ params for all other profiles --- conf/test_bakta.config | 17 ++++--- conf/test_bgc_bakta.config | 18 +++++--- conf/test_bgc_prokka.config | 28 +++++++----- conf/test_bgc_pyrodigal.config | 28 +++++++----- conf/test_nothing.config | 70 ++++++++++++++++------------- conf/test_preannotated.config | 28 +++++++----- conf/test_preannotated_bgc.config | 28 +++++++----- conf/test_prokka.config | 28 +++++++----- conf/test_taxonomy_bakta.config | 27 ++++++----- conf/test_taxonomy_prokka.config | 27 ++++++----- conf/test_taxonomy_pyrodigal.config | 27 ++++++----- 11 files changed, 200 insertions(+), 126 deletions(-) diff --git a/conf/test_bakta.config b/conf/test_bakta.config index 72c540c5..4cd2dacb 100644 --- a/conf/test_bakta.config +++ b/conf/test_bakta.config @@ -10,14 +10,17 @@ ---------------------------------------------------------------------------------------- */ -params { - config_profile_name = 'AMP/ARG Bakta test profile' - config_profile_description = 'Minimal test dataset to check pipeline function' +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '8.GB' - max_time = '6.h' +params { + config_profile_name = 'AMP/ARG Bakta test profile' + config_profile_description = 'Minimal test dataset to check pipeline function' // Input data input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' diff --git a/conf/test_bgc_bakta.config b/conf/test_bgc_bakta.config index d879fe38..1535df77 100644 --- a/conf/test_bgc_bakta.config +++ b/conf/test_bgc_bakta.config @@ -10,14 +10,22 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + params { - config_profile_name = 'BGC Bakta test profile' - config_profile_description = 'Minimal test dataset to check BGC workflow function' + config_profile_name = 'BGC Bakta test profile' + config_profile_description = 'Minimal test dataset to check BGC workflow function' // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '8.GB' - max_time = '6.h' + max_cpus = 2 + max_memory = '8.GB' + max_time = '6.h' // Input data input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' diff --git a/conf/test_bgc_prokka.config b/conf/test_bgc_prokka.config index 0a7b4e18..4d63b9c9 100644 --- a/conf/test_bgc_prokka.config +++ b/conf/test_bgc_prokka.config @@ -10,24 +10,32 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + params { config_profile_name = 'BGC Prokka test profile' config_profile_description = 'Minimal test dataset to check BGC workflow function' // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '8.GB' - max_time = '6.h' + max_cpus = 2 + max_memory = '8.GB' + max_time = '6.h' // Input data - input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' + input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' - annotation_tool = 'prokka' + annotation_tool = 'prokka' - run_arg_screening = false - run_amp_screening = false - run_bgc_screening = true + run_arg_screening = false + run_amp_screening = false + run_bgc_screening = true - bgc_run_hmmsearch = true - bgc_hmmsearch_models = 'https://raw.githubusercontent.com/antismash/antismash/fd61de057e082fbf071732ac64b8b2e8883de32f/antismash/detection/hmm_detection/data/ToyB.hmm' + bgc_run_hmmsearch = true + bgc_hmmsearch_models = 'https://raw.githubusercontent.com/antismash/antismash/fd61de057e082fbf071732ac64b8b2e8883de32f/antismash/detection/hmm_detection/data/ToyB.hmm' } diff --git a/conf/test_bgc_pyrodigal.config b/conf/test_bgc_pyrodigal.config index f5ef07a9..7169c35d 100644 --- a/conf/test_bgc_pyrodigal.config +++ b/conf/test_bgc_pyrodigal.config @@ -10,24 +10,32 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + params { config_profile_name = 'BGC Pyrodigal test profile' config_profile_description = 'Minimal test dataset to check BGC workflow function' // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '8.GB' - max_time = '6.h' + max_cpus = 2 + max_memory = '8.GB' + max_time = '6.h' // Input data - input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' + input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' - annotation_tool = 'pyrodigal' + annotation_tool = 'pyrodigal' - run_arg_screening = false - run_amp_screening = false - run_bgc_screening = true + run_arg_screening = false + run_amp_screening = false + run_bgc_screening = true - bgc_run_hmmsearch = true - bgc_hmmsearch_models = 'https://raw.githubusercontent.com/antismash/antismash/fd61de057e082fbf071732ac64b8b2e8883de32f/antismash/detection/hmm_detection/data/ToyB.hmm' + bgc_run_hmmsearch = true + bgc_hmmsearch_models = 'https://raw.githubusercontent.com/antismash/antismash/fd61de057e082fbf071732ac64b8b2e8883de32f/antismash/detection/hmm_detection/data/ToyB.hmm' } diff --git a/conf/test_nothing.config b/conf/test_nothing.config index 87a2e06b..b14314af 100644 --- a/conf/test_nothing.config +++ b/conf/test_nothing.config @@ -12,42 +12,50 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + params { config_profile_name = 'Test nothing profile' config_profile_description = 'Minimal test dataset to check pipeline function' // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '8.GB' - max_time = '6.h' + max_cpus = 2 + max_memory = '8.GB' + max_time = '6.h' // Input data - input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' - amp_hmmsearch_models = params.pipelines_testdata_base_path + 'funcscan/hmms/mybacteriocin.hmm' - bgc_hmmsearch_models = 'https://raw.githubusercontent.com/antismash/antismash/fd61de057e082fbf071732ac64b8b2e8883de32f/antismash/detection/hmm_detection/data/ToyB.hmm' - - annotation_tool = 'pyrodigal' - - run_arg_screening = false - run_amp_screening = false - run_bgc_screening = false - - arg_fargene_hmmmodel = 'class_a,class_b_1_2' - - amp_skip_amplify = true - amp_skip_macrel = true - amp_skip_ampir = true - amp_run_hmmsearch = false - - arg_skip_deeparg = true - arg_skip_fargene = true - arg_skip_rgi = true - arg_skip_amrfinderplus = true - arg_skip_deeparg = true - arg_skip_abricate = true - - bgc_skip_antismash = true - bgc_skip_deepbgc = true - bgc_skip_gecco = true - bgc_run_hmmsearch = false + input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' + amp_hmmsearch_models = params.pipelines_testdata_base_path + 'funcscan/hmms/mybacteriocin.hmm' + bgc_hmmsearch_models = 'https://raw.githubusercontent.com/antismash/antismash/fd61de057e082fbf071732ac64b8b2e8883de32f/antismash/detection/hmm_detection/data/ToyB.hmm' + + annotation_tool = 'pyrodigal' + + run_arg_screening = false + run_amp_screening = false + run_bgc_screening = false + + arg_fargene_hmmmodel = 'class_a,class_b_1_2' + + amp_skip_amplify = true + amp_skip_macrel = true + amp_skip_ampir = true + amp_run_hmmsearch = false + + arg_skip_deeparg = true + arg_skip_fargene = true + arg_skip_rgi = true + arg_skip_amrfinderplus = true + arg_skip_deeparg = true + arg_skip_abricate = true + + bgc_skip_antismash = true + bgc_skip_deepbgc = true + bgc_skip_gecco = true + bgc_run_hmmsearch = false } diff --git a/conf/test_preannotated.config b/conf/test_preannotated.config index 38a5e1d1..fb7df238 100644 --- a/conf/test_preannotated.config +++ b/conf/test_preannotated.config @@ -10,24 +10,32 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + params { config_profile_name = 'ARG/AMP test profile - preannotated input' config_profile_description = 'Minimal test dataset to check pipeline function' // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' + max_cpus = 2 + max_memory = '6.GB' + max_time = '6.h' // Input data - input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_preannotated.csv' + input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_preannotated.csv' - annotation_tool = 'pyrodigal' + annotation_tool = 'pyrodigal' - run_arg_screening = true - arg_fargene_hmmmodel = 'class_a,class_b_1_2' + run_arg_screening = true + arg_fargene_hmmmodel = 'class_a,class_b_1_2' - run_amp_screening = true - amp_run_hmmsearch = true - amp_hmmsearch_models = params.pipelines_testdata_base_path + 'funcscan/hmms/mybacteriocin.hmm' + run_amp_screening = true + amp_run_hmmsearch = true + amp_hmmsearch_models = params.pipelines_testdata_base_path + 'funcscan/hmms/mybacteriocin.hmm' } diff --git a/conf/test_preannotated_bgc.config b/conf/test_preannotated_bgc.config index 039656d3..9ff5fe17 100644 --- a/conf/test_preannotated_bgc.config +++ b/conf/test_preannotated_bgc.config @@ -10,24 +10,32 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + params { config_profile_name = 'BGC test profile - preannotated input' config_profile_description = 'Minimal test dataset to check BGC workflow function' // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' + max_cpus = 2 + max_memory = '6.GB' + max_time = '6.h' // Input data - input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_preannotated.csv' + input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_preannotated.csv' - annotation_tool = 'pyrodigal' + annotation_tool = 'pyrodigal' - run_arg_screening = false - run_amp_screening = false - run_bgc_screening = true + run_arg_screening = false + run_amp_screening = false + run_bgc_screening = true - bgc_run_hmmsearch = true - bgc_hmmsearch_models = 'https://raw.githubusercontent.com/antismash/antismash/fd61de057e082fbf071732ac64b8b2e8883de32f/antismash/detection/hmm_detection/data/ToyB.hmm' + bgc_run_hmmsearch = true + bgc_hmmsearch_models = 'https://raw.githubusercontent.com/antismash/antismash/fd61de057e082fbf071732ac64b8b2e8883de32f/antismash/detection/hmm_detection/data/ToyB.hmm' } diff --git a/conf/test_prokka.config b/conf/test_prokka.config index eb346bcb..9dbdd212 100644 --- a/conf/test_prokka.config +++ b/conf/test_prokka.config @@ -10,24 +10,32 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + params { config_profile_name = 'AMP/ARG Prokka test profile' config_profile_description = 'Minimal test dataset to check pipeline function' // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '8.GB' - max_time = '6.h' + max_cpus = 2 + max_memory = '8.GB' + max_time = '6.h' // Input data - input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' + input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' - annotation_tool = 'prokka' + annotation_tool = 'prokka' - run_arg_screening = true - arg_fargene_hmmmodel = 'class_a,class_b_1_2' + run_arg_screening = true + arg_fargene_hmmmodel = 'class_a,class_b_1_2' - run_amp_screening = true - amp_run_hmmsearch = true - amp_hmmsearch_models = params.pipelines_testdata_base_path + 'funcscan/hmms/mybacteriocin.hmm' + run_amp_screening = true + amp_run_hmmsearch = true + amp_hmmsearch_models = params.pipelines_testdata_base_path + 'funcscan/hmms/mybacteriocin.hmm' } diff --git a/conf/test_taxonomy_bakta.config b/conf/test_taxonomy_bakta.config index e7bc923d..a81a76f5 100644 --- a/conf/test_taxonomy_bakta.config +++ b/conf/test_taxonomy_bakta.config @@ -10,14 +10,25 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] + withName: MMSEQS_DATABASES { + memory = '14.GB' + } +} + params { - config_profile_name = 'Taxonomic classification test profile' - config_profile_description = 'Minimal test dataset to check taxonomic classification workflow function' + config_profile_name = 'Taxonomic classification test profile' + config_profile_description = 'Minimal test dataset to check taxonomic classification workflow function' // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '14.GB' - max_time = '6.h' + max_cpus = 2 + max_memory = '14.GB' + max_time = '6.h' // Input data input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' @@ -42,9 +53,3 @@ params { bgc_antismash_contigminlength = 1000 bgc_run_hmmsearch = true } - -process { - withName: MMSEQS_DATABASES { - memory = '14.GB' - } -} diff --git a/conf/test_taxonomy_prokka.config b/conf/test_taxonomy_prokka.config index 39eefdfc..2ce0203b 100644 --- a/conf/test_taxonomy_prokka.config +++ b/conf/test_taxonomy_prokka.config @@ -10,14 +10,25 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] + withName: MMSEQS_DATABASES { + memory = '14.GB' + } +} + params { - config_profile_name = 'Taxonomic classification test profile' - config_profile_description = 'Minimal test dataset to check taxonomic classification workflow function' + config_profile_name = 'Taxonomic classification test profile' + config_profile_description = 'Minimal test dataset to check taxonomic classification workflow function' // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '14.GB' - max_time = '6.h' + max_cpus = 2 + max_memory = '14.GB' + max_time = '6.h' // Input data input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' @@ -41,9 +52,3 @@ params { bgc_antismash_contigminlength = 1000 bgc_run_hmmsearch = true } - -process { - withName: MMSEQS_DATABASES { - memory = '14.GB' - } -} diff --git a/conf/test_taxonomy_pyrodigal.config b/conf/test_taxonomy_pyrodigal.config index 4ad970f9..8438e476 100644 --- a/conf/test_taxonomy_pyrodigal.config +++ b/conf/test_taxonomy_pyrodigal.config @@ -10,14 +10,25 @@ ---------------------------------------------------------------------------------------- */ +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] + withName: MMSEQS_DATABASES { + memory = '14.GB' + } +} + params { - config_profile_name = 'Taxonomic classification test profile' - config_profile_description = 'Minimal test dataset to check taxonomic classification workflow function' + config_profile_name = 'Taxonomic classification test profile' + config_profile_description = 'Minimal test dataset to check taxonomic classification workflow function' // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '14.GB' - max_time = '6.h' + max_cpus = 2 + max_memory = '14.GB' + max_time = '6.h' // Input data input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' @@ -41,9 +52,3 @@ params { bgc_antismash_contigminlength = 1000 bgc_run_hmmsearch = true } - -process { - withName: MMSEQS_DATABASES { - memory = '14.GB' - } -} From d744c9987de22c9d9d8c5a480a917489e5b01fb9 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 23 Oct 2024 13:07:55 +0200 Subject: [PATCH 008/175] Fix linting errors --- conf/test_bgc_bakta.config | 5 - modules.json | 2 +- modules/nf-core/multiqc/main.nf | 43 +- .../nf-core/multiqc/tests/main.nf.test.snap | 2 +- nextflow.config | 4 +- workflows/funcscan.nf | 453 +++++++++--------- 6 files changed, 253 insertions(+), 256 deletions(-) diff --git a/conf/test_bgc_bakta.config b/conf/test_bgc_bakta.config index 1535df77..fba6c3ea 100644 --- a/conf/test_bgc_bakta.config +++ b/conf/test_bgc_bakta.config @@ -22,11 +22,6 @@ params { config_profile_name = 'BGC Bakta test profile' config_profile_description = 'Minimal test dataset to check BGC workflow function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '8.GB' - max_time = '6.h' - // Input data input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' diff --git a/modules.json b/modules.json index ee131f48..776a696d 100644 --- a/modules.json +++ b/modules.json @@ -167,7 +167,7 @@ }, "multiqc": { "branch": "master", - "git_sha": "878d2adbb911aa6e15c06a4d1e93d01bd6f26c74", + "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", "installed_by": ["modules"] }, "prodigal": { diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 392b33cf..cc0643e1 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -1,23 +1,24 @@ process MULTIQC { label 'process_single' + 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'}" + 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' }" input: - path multiqc_files, stageAs: "?/*" - path multiqc_config - path extra_multiqc_config - path multiqc_logo - path replace_names - path sample_names + path multiqc_files, stageAs: "?/*" + path(multiqc_config) + path(extra_multiqc_config) + path(multiqc_logo) + path(replace_names) + path(sample_names) output: path "*multiqc_report.html", emit: report - path "*_data", emit: data - path "*_plots", optional: true, emit: plots - path "versions.yml", emit: versions + path "*_data" , emit: data + path "*_plots" , optional:true, emit: plots + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -25,21 +26,21 @@ process MULTIQC { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ? "--filename ${task.ext.prefix}.html" : '' - def config = multiqc_config ? "--config ${multiqc_config}" : '' - def extra_config = extra_multiqc_config ? "--config ${extra_multiqc_config}" : '' + def config = multiqc_config ? "--config $multiqc_config" : '' + def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : '' def logo = multiqc_logo ? "--cl-config 'custom_logo: \"${multiqc_logo}\"'" : '' def replace = replace_names ? "--replace-names ${replace_names}" : '' def samples = sample_names ? "--sample-names ${sample_names}" : '' """ multiqc \\ --force \\ - ${args} \\ - ${config} \\ - ${prefix} \\ - ${extra_config} \\ - ${logo} \\ - ${replace} \\ - ${samples} \\ + $args \\ + $config \\ + $prefix \\ + $extra_config \\ + $logo \\ + $replace \\ + $samples \\ . cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index 261dc0fa..2fcbb5ff 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -38,4 +38,4 @@ }, "timestamp": "2024-10-02T17:52:09.185842" } -} +} \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 2444843c..584820fd 100644 --- a/nextflow.config +++ b/nextflow.config @@ -33,9 +33,6 @@ params { version = false pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' - // To stop the random warning coming from nf-validation, remove on upgrade to nf-schema - monochromeLogs = null - // Taxonomy classification options run_taxa_classification = false taxa_classification_tool = 'mmseqs2' @@ -433,6 +430,7 @@ manifest { mainScript = 'main.nf' nextflowVersion = '!>=24.04.2' version = '2.1.0dev' + doi = '10.5281/zenodo.7643099' } // Nextflow plugins diff --git a/workflows/funcscan.nf b/workflows/funcscan.nf index 567a6670..e0db12c0 100644 --- a/workflows/funcscan.nf +++ b/workflows/funcscan.nf @@ -4,23 +4,11 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -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_funcscan_pipeline' -include { paramsSummaryMap; validateParameters; paramsHelp; paramsSummaryLog; fromSamplesheet } from 'plugin/nf-validation' - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - CONFIG FILES -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -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() -ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath( params.multiqc_logo, checkIfExists: true ) : Channel.empty() -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) +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_funcscan_pipeline' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -31,11 +19,11 @@ ch_multiqc_custom_methods_description = params.multiqc_methods_description ? fil // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // -include { ANNOTATION } from '../subworkflows/local/annotation' -include { AMP } from '../subworkflows/local/amp' -include { ARG } from '../subworkflows/local/arg' -include { BGC } from '../subworkflows/local/bgc' -include { TAXA_CLASS } from '../subworkflows/local/taxa_class' +include { ANNOTATION } from '../subworkflows/local/annotation' +include { AMP } from '../subworkflows/local/amp' +include { ARG } from '../subworkflows/local/arg' +include { BGC } from '../subworkflows/local/bgc' +include { TAXA_CLASS } from '../subworkflows/local/taxa_class' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -46,8 +34,8 @@ include { TAXA_CLASS } from '../subworkflows/local/taxa_class' // // MODULE: Installed directly from nf-core/modules // -include { GUNZIP as GUNZIP_INPUT_PREP } from '../modules/nf-core/gunzip/main' -include { SEQKIT_SEQ } from '../modules/nf-core/seqkit/seq/main' +include { GUNZIP as GUNZIP_INPUT_PREP } from '../modules/nf-core/gunzip/main' +include { SEQKIT_SEQ } from '../modules/nf-core/seqkit/seq/main' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -56,63 +44,75 @@ include { SEQKIT_SEQ } from '../modules/nf-core/seqkit/seq/m */ workflow FUNCSCAN { - take: ch_samplesheet // channel: samplesheet read in from --input + main: ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() + /* + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CONFIG FILES + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + + 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() + ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath(params.multiqc_logo, checkIfExists: true) : Channel.empty() + 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) + + // Some tools require uncompressed input ch_input_prep = ch_samplesheet - .map{ meta, fasta, faa, gbk -> [meta + [category: 'all'], [fasta, faa, gbk]] } - .transpose() - .branch { - compressed: it[1].toString().endsWith('.gz') - uncompressed: it[1] - } + .map { meta, fasta, faa, gbk -> [meta + [category: 'all'], [fasta, faa, gbk]] } + .transpose() + .branch { + compressed: it[1].toString().endsWith('.gz') + uncompressed: it[1] + } - GUNZIP_INPUT_PREP ( ch_input_prep.compressed ) - ch_versions = ch_versions.mix( GUNZIP_INPUT_PREP.out.versions ) + GUNZIP_INPUT_PREP(ch_input_prep.compressed) + ch_versions = ch_versions.mix(GUNZIP_INPUT_PREP.out.versions) // Merge all the already uncompressed and newly compressed FASTAs here into // a single input channel for downstream ch_intermediate_input = GUNZIP_INPUT_PREP.out.gunzip - .mix( ch_input_prep.uncompressed ) - .groupTuple() - .map{ - meta, files -> - def fasta_found = files.find{it.toString().tokenize('.').last().matches('fasta|fas|fna|fa')} - def faa_found = files.find{it.toString().endsWith('.faa')} - def gbk_found = files.find{it.toString().tokenize('.').last().matches('gbk|gbff')} - def fasta = fasta_found != null ? fasta_found : [] - def faa = faa_found != null ? faa_found : [] - def gbk = gbk_found != null ? gbk_found : [] - - [meta, fasta, faa, gbk] - } - .branch { - meta, fasta, faa, gbk -> - preannotated: gbk != [] - fastas: true - } + .mix(ch_input_prep.uncompressed) + .groupTuple() + .map { meta, files -> + def fasta_found = files.find { it.toString().tokenize('.').last().matches('fasta|fas|fna|fa') } + def faa_found = files.find { it.toString().endsWith('.faa') } + def gbk_found = files.find { it.toString().tokenize('.').last().matches('gbk|gbff') } + def fasta = fasta_found != null ? fasta_found : [] + def faa = faa_found != null ? faa_found : [] + def gbk = gbk_found != null ? gbk_found : [] + + [meta, fasta, faa, gbk] + } + .branch { meta, fasta, faa, gbk -> + preannotated: gbk != [] + fastas: true + } // Duplicate and filter the duplicated file for long contigs only for BGC // This is to speed up BGC run and prevent 'no hits found' fails - if ( params.run_bgc_screening ){ - SEQKIT_SEQ ( ch_intermediate_input.fastas.map{meta, fasta, faa, gbk -> [ meta, fasta ]} ) + if (params.run_bgc_screening) { + SEQKIT_SEQ(ch_intermediate_input.fastas.map { meta, fasta, faa, gbk -> [meta, fasta] }) ch_input_for_annotation = ch_intermediate_input.fastas - .map { meta, fasta, protein, gbk -> [ meta, fasta ] } - .mix( SEQKIT_SEQ.out.fastx.map{ meta, fasta -> [ meta + [category: 'long'], fasta ] } ) - .filter { - meta, fasta -> - if ( fasta != [] && fasta.isEmpty() ) log.warn("[nf-core/funcscan] Sample ${meta.id} does not have contigs longer than ${params.bgc_mincontiglength} bp. Will not be screened for BGCs.") - !fasta.isEmpty() + .map { meta, fasta, protein, gbk -> [meta, fasta] } + .mix(SEQKIT_SEQ.out.fastx.map { meta, fasta -> [meta + [category: 'long'], fasta] }) + .filter { meta, fasta -> + if (fasta != [] && fasta.isEmpty()) { + log.warn("[nf-core/funcscan] Sample ${meta.id} does not have contigs longer than ${params.bgc_mincontiglength} bp. Will not be screened for BGCs.") + } + !fasta.isEmpty() } - ch_versions = ch_versions.mix( SEQKIT_SEQ.out.versions ) - } else { - ch_input_for_annotation = ch_intermediate_input.fastas.map { meta, fasta, protein, gbk -> [ meta, fasta ] } + ch_versions = ch_versions.mix(SEQKIT_SEQ.out.versions) + } + else { + ch_input_for_annotation = ch_intermediate_input.fastas.map { meta, fasta, protein, gbk -> [meta, fasta] } } /* @@ -120,40 +120,38 @@ workflow FUNCSCAN { */ // Some tools require annotated FASTAs - if ( ( params.run_arg_screening && !params.arg_skip_deeparg ) || ( params.run_amp_screening ) || ( params.run_bgc_screening ) ) { - ANNOTATION( ch_input_for_annotation ) - ch_versions = ch_versions.mix( ANNOTATION.out.versions ) + if ((params.run_arg_screening && !params.arg_skip_deeparg) || params.run_amp_screening || params.run_bgc_screening) { + ANNOTATION(ch_input_for_annotation) + ch_versions = ch_versions.mix(ANNOTATION.out.versions) ch_new_annotation = ch_input_for_annotation - .join( ANNOTATION.out.faa ) - .join( ANNOTATION.out.gbk ) - - } else { + .join(ANNOTATION.out.faa) + .join(ANNOTATION.out.gbk) + } + else { ch_new_annotation = ch_intermediate_input.fastas } // Mix back the preannotated samples with the newly annotated ones ch_prepped_input = ch_new_annotation - .filter { meta, fasta, faa, gbk -> meta.category != 'long' } - .mix( ch_intermediate_input.preannotated ) - .multiMap { - meta, fasta, faa, gbk -> - fastas: [meta, fasta] - faas: [meta, faa] - gbks: [meta, gbk] - } - - if ( params.run_bgc_screening ){ - - ch_prepped_input_long = ch_new_annotation - .filter { meta, fasta, faa, gbk -> meta.category == 'long'} - .mix( ch_intermediate_input.preannotated ) - .multiMap { - meta, fasta, faa, gbk -> - fastas: [meta, fasta] - faas: [meta, faa] - gbks: [meta, gbk] - } + .filter { meta, fasta, faa, gbk -> meta.category != 'long' } + .mix(ch_intermediate_input.preannotated) + .multiMap { meta, fasta, faa, gbk -> + fastas: [meta, fasta] + faas: [meta, faa] + gbks: [meta, gbk] + } + + if (params.run_bgc_screening) { + + ch_prepped_input_long = ch_new_annotation + .filter { meta, fasta, faa, gbk -> meta.category == 'long' } + .mix(ch_intermediate_input.preannotated) + .multiMap { meta, fasta, faa, gbk -> + fastas: [meta, fasta] + faas: [meta, faa] + gbks: [meta, gbk] + } } /* @@ -163,17 +161,17 @@ workflow FUNCSCAN { // The final subworkflow reports need taxonomic classification. // This can be either on NT or AA level depending on annotation. // TODO: Only NT at the moment. AA tax. classification will be added only when its PR is merged. - if ( params.run_taxa_classification ) { - TAXA_CLASS ( ch_prepped_input.fastas ) - ch_versions = ch_versions.mix( TAXA_CLASS.out.versions ) - ch_taxonomy_tsv = TAXA_CLASS.out.sample_taxonomy - - } else { + if (params.run_taxa_classification) { + TAXA_CLASS(ch_prepped_input.fastas) + ch_versions = ch_versions.mix(TAXA_CLASS.out.versions) + ch_taxonomy_tsv = TAXA_CLASS.out.sample_taxonomy + } + else { - ch_mmseqs_db = Channel.empty() - ch_taxonomy_querydb = Channel.empty() - ch_taxonomy_querydb_taxdb = Channel.empty() - ch_taxonomy_tsv = Channel.empty() + ch_mmseqs_db = Channel.empty() + ch_taxonomy_querydb = Channel.empty() + ch_taxonomy_querydb_taxdb = Channel.empty() + ch_taxonomy_tsv = Channel.empty() } /* @@ -183,139 +181,143 @@ workflow FUNCSCAN { /* AMPs */ - if ( params.run_amp_screening && !params.run_taxa_classification ) { - AMP ( + if (params.run_amp_screening && !params.run_taxa_classification) { + AMP( ch_prepped_input.fastas, - ch_prepped_input.faas - .filter { - meta, file -> - if ( file != [] && file.isEmpty() ) log.warn("[nf-core/funcscan] Annotation of following sample produced an empty FAA file. AMP screening tools requiring this file will not be executed: ${meta.id}") - !file.isEmpty() - - }, + ch_prepped_input.faas.filter { meta, file -> + if (file != [] && file.isEmpty()) { + log.warn("[nf-core/funcscan] Annotation of following sample produced an empty FAA file. AMP screening tools requiring this file will not be executed: ${meta.id}") + } + !file.isEmpty() + }, ch_taxonomy_tsv, ch_prepped_input.gbks ) ch_versions = ch_versions.mix(AMP.out.versions) - } else if ( params.run_amp_screening && params.run_taxa_classification ) { - AMP ( + } + else if (params.run_amp_screening && params.run_taxa_classification) { + AMP( ch_prepped_input.fastas, - ch_prepped_input.faas - .filter { - meta, file -> - if ( file != [] && file.isEmpty() ) log.warn("[nf-core/funcscan] Annotation of following sample produced an empty FAA file. AMP screening tools requiring this file will not be executed: ${meta.id}") - !file.isEmpty() - }, - ch_taxonomy_tsv - .filter { - meta, file -> - if ( file != [] && file.isEmpty() ) log.warn("[nf-core/funcscan] Taxonomy classification of the following sample produced an empty TSV file. Taxonomy merging will not be executed: ${meta.id}") - !file.isEmpty() - }, + ch_prepped_input.faas.filter { meta, file -> + if (file != [] && file.isEmpty()) { + log.warn("[nf-core/funcscan] Annotation of following sample produced an empty FAA file. AMP screening tools requiring this file will not be executed: ${meta.id}") + } + !file.isEmpty() + }, + ch_taxonomy_tsv.filter { meta, file -> + if (file != [] && file.isEmpty()) { + log.warn("[nf-core/funcscan] Taxonomy classification of the following sample produced an empty TSV file. Taxonomy merging will not be executed: ${meta.id}") + } + !file.isEmpty() + }, ch_prepped_input.gbks ) - ch_versions = ch_versions.mix( AMP.out.versions ) + ch_versions = ch_versions.mix(AMP.out.versions) } /* ARGs */ - if ( params.run_arg_screening && !params.run_taxa_classification ) { - if ( params.arg_skip_deeparg ) { - ARG ( + if (params.run_arg_screening && !params.run_taxa_classification) { + if (params.arg_skip_deeparg) { + ARG( ch_prepped_input.fastas, [], ch_taxonomy_tsv - ) - } else { - ARG ( + ) + } + else { + ARG( ch_prepped_input.fastas, - ch_prepped_input.faas - .filter { - meta, file -> - if ( file.isEmpty() ) log.warn("[nf-core/funcscan] Annotation of following sample produced an empty FAA file. ARG screening tools requiring this file will not be executed: ${meta.id}") - !file.isEmpty() - }, + ch_prepped_input.faas.filter { meta, file -> + if (file.isEmpty()) { + log.warn("[nf-core/funcscan] Annotation of following sample produced an empty FAA file. ARG screening tools requiring this file will not be executed: ${meta.id}") + } + !file.isEmpty() + }, ch_taxonomy_tsv ) } - ch_versions = ch_versions.mix( ARG.out.versions ) - } else if ( params.run_arg_screening && params.run_taxa_classification ) { - if ( params.arg_skip_deeparg ) { - ARG ( + ch_versions = ch_versions.mix(ARG.out.versions) + } + else if (params.run_arg_screening && params.run_taxa_classification) { + if (params.arg_skip_deeparg) { + ARG( ch_prepped_input.fastas, [], - ch_taxonomy_tsv - .filter { - meta, file -> - if ( file.isEmpty() ) log.warn("[nf-core/funcscan] Taxonomy classification of the following sample produced an empty TSV file. Taxonomy merging will not be executed: ${meta.id}") - !file.isEmpty() + ch_taxonomy_tsv.filter { meta, file -> + if (file.isEmpty()) { + log.warn("[nf-core/funcscan] Taxonomy classification of the following sample produced an empty TSV file. Taxonomy merging will not be executed: ${meta.id}") } - ) - } else { - ARG ( + !file.isEmpty() + } + ) + } + else { + ARG( ch_prepped_input.fastas, - ch_prepped_input.faas - .filter { - meta, file -> - if ( file.isEmpty() ) log.warn("[nf-core/funcscan] Annotation of following sample produced an empty FAA file. ARG screening tools requiring this file will not be executed: ${meta.id}") - !file.isEmpty() - }, - ch_taxonomy_tsv - .filter { - meta, file -> - if ( file.isEmpty() ) log.warn("[nf-core/funcscan] Taxonomy classification of the following sample produced an empty TSV file. Taxonomy merging will not be executed: ${meta.id}") - !file.isEmpty() + ch_prepped_input.faas.filter { meta, file -> + if (file.isEmpty()) { + log.warn("[nf-core/funcscan] Annotation of following sample produced an empty FAA file. ARG screening tools requiring this file will not be executed: ${meta.id}") + } + !file.isEmpty() + }, + ch_taxonomy_tsv.filter { meta, file -> + if (file.isEmpty()) { + log.warn("[nf-core/funcscan] Taxonomy classification of the following sample produced an empty TSV file. Taxonomy merging will not be executed: ${meta.id}") + } + !file.isEmpty() } ) } - ch_versions = ch_versions.mix( ARG.out.versions ) + ch_versions = ch_versions.mix(ARG.out.versions) } /* BGCs */ - if ( params.run_bgc_screening && !params.run_taxa_classification ) { - BGC ( + if (params.run_bgc_screening && !params.run_taxa_classification) { + BGC( ch_prepped_input_long.fastas, - ch_prepped_input_long.faas - .filter { - meta, file -> - if ( file != [] && file.isEmpty() ) log.warn("[nf-core/funcscan] Annotation of following sample produced an empty GFF file. BGC screening tools requiring this file will not be executed: ${meta.id}") - !file.isEmpty() - }, - ch_prepped_input_long.gbks - .filter { - meta, file -> - if ( file != [] && file.isEmpty() ) log.warn("[nf-core/funcscan] Annotation of following sample produced an empty FAA file. BGC screening tools requiring this file will not be executed: ${meta.id}") - !file.isEmpty() - }, + ch_prepped_input_long.faas.filter { meta, file -> + if (file != [] && file.isEmpty()) { + log.warn("[nf-core/funcscan] Annotation of following sample produced an empty GFF file. BGC screening tools requiring this file will not be executed: ${meta.id}") + } + !file.isEmpty() + }, + ch_prepped_input_long.gbks.filter { meta, file -> + if (file != [] && file.isEmpty()) { + log.warn("[nf-core/funcscan] Annotation of following sample produced an empty FAA file. BGC screening tools requiring this file will not be executed: ${meta.id}") + } + !file.isEmpty() + }, ch_taxonomy_tsv ) - ch_versions = ch_versions.mix( BGC.out.versions ) - } else if ( params.run_bgc_screening && params.run_taxa_classification ) { - BGC ( + ch_versions = ch_versions.mix(BGC.out.versions) + } + else if (params.run_bgc_screening && params.run_taxa_classification) { + BGC( ch_prepped_input_long.fastas, - ch_prepped_input_long.faas - .filter { - meta, file -> - if ( file.isEmpty() ) log.warn("[nf-core/funcscan] Annotation of following sample produced an empty FAA file. BGC screening tools requiring this file will not be executed: ${meta.id}") - !file.isEmpty() - }, - ch_prepped_input_long.gbks - .filter { - meta, file -> - if ( file.isEmpty() ) log.warn("[nf-core/funcscan] Annotation of following sample produced an empty GBK file. BGC screening tools requiring this file will not be executed: ${meta.id}") - !file.isEmpty() - }, - ch_taxonomy_tsv - .filter { - meta, file -> - if ( file.isEmpty() ) log.warn("[nf-core/funcscan] Taxonomy classification of the following sample produced an empty TSV file. Taxonomy merging will not be executed: ${meta.id}") - !file.isEmpty() + ch_prepped_input_long.faas.filter { meta, file -> + if (file.isEmpty()) { + log.warn("[nf-core/funcscan] Annotation of following sample produced an empty FAA file. BGC screening tools requiring this file will not be executed: ${meta.id}") + } + !file.isEmpty() + }, + ch_prepped_input_long.gbks.filter { meta, file -> + if (file.isEmpty()) { + log.warn("[nf-core/funcscan] Annotation of following sample produced an empty GBK file. BGC screening tools requiring this file will not be executed: ${meta.id}") + } + !file.isEmpty() + }, + ch_taxonomy_tsv.filter { meta, file -> + if (file.isEmpty()) { + log.warn("[nf-core/funcscan] Taxonomy classification of the following sample produced an empty TSV file. Taxonomy merging will not be executed: ${meta.id}") } + !file.isEmpty() + } ) - ch_versions = ch_versions.mix( BGC.out.versions ) + ch_versions = ch_versions.mix(BGC.out.versions) } // @@ -324,34 +326,41 @@ workflow FUNCSCAN { softwareVersionsToYAML(ch_versions) .collectFile( storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_' + 'pipeline_software_' + 'mqc_' + 'versions.yml', + name: 'nf_core_' + 'pipeline_software_' + 'mqc_' + 'versions.yml', sort: true, newLine: true - ).set { ch_collated_versions } + ) + .set { ch_collated_versions } // // MODULE: MultiQC // - 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() - ch_multiqc_logo = params.multiqc_logo ? - Channel.fromPath(params.multiqc_logo, checkIfExists: true) : - Channel.fromPath("${workflow.projectDir}/docs/images/nf-core-funcscan_logo_light.png", checkIfExists: true) - - summary_params = paramsSummaryMap( - workflow, parameters_schema: "nextflow_schema.json") + 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() + ch_multiqc_logo = params.multiqc_logo + ? Channel.fromPath(params.multiqc_logo, checkIfExists: true) + : Channel.fromPath("${workflow.projectDir}/docs/images/nf-core-funcscan_logo_light.png", checkIfExists: true) + + 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( - methodsDescriptionText(ch_multiqc_custom_methods_description)) + 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( + methodsDescriptionText(ch_multiqc_custom_methods_description) + ) ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) ch_multiqc_files = ch_multiqc_files.mix( @@ -361,11 +370,11 @@ workflow FUNCSCAN { ) ) - if ( ( params.run_arg_screening && !params.arg_skip_deeparg ) || ( params.run_amp_screening && ( params.amp_run_hmmsearch || !params.amp_skip_amplify || !params.amp_skip_ampir ) ) || ( params.run_bgc_screening ) ) { - ch_multiqc_files = ch_multiqc_files.mix( ANNOTATION.out.multiqc_files.collect{it[1]} ) + if ((params.run_arg_screening && !params.arg_skip_deeparg) || (params.run_amp_screening && (params.amp_run_hmmsearch || !params.amp_skip_amplify || !params.amp_skip_ampir)) || params.run_bgc_screening) { + ch_multiqc_files = ch_multiqc_files.mix(ANNOTATION.out.multiqc_files.collect { it[1] }) } - MULTIQC ( + MULTIQC( ch_multiqc_files.collect(), ch_multiqc_config.toList(), ch_multiqc_custom_config.toList(), @@ -374,13 +383,7 @@ workflow FUNCSCAN { [] ) - 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) ] } - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - THE END -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ From d6d38f9c91f8ffadbbe9f1c0d1e55097dea83e0d Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 23 Oct 2024 13:13:15 +0200 Subject: [PATCH 009/175] Fix schema linting errors --- nextflow.config | 4 ++-- nextflow_schema.json | 13 +++++-------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/nextflow.config b/nextflow.config index 584820fd..49f88337 100644 --- a/nextflow.config +++ b/nextflow.config @@ -45,8 +45,8 @@ params { taxa_classification_mmseqs_taxonomy_searchtype = 2 taxa_classification_mmseqs_taxonomy_lcaranks = 'kingdom,phylum,class,order,family,genus,species' taxa_classification_mmseqs_taxonomy_taxlineage = 1 - taxa_classification_mmseqs_taxonomy_sensitivity = '5.0' - taxa_classification_mmseqs_taxonomy_orffilters = '2.0' + taxa_classification_mmseqs_taxonomy_sensitivity = 5.0 + taxa_classification_mmseqs_taxonomy_orffilters = 2.0 taxa_classification_mmseqs_taxonomy_lcamode = 3 taxa_classification_mmseqs_taxonomy_votemode = 1 diff --git a/nextflow_schema.json b/nextflow_schema.json index 4dedaa10..6b56c8f1 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -152,15 +152,15 @@ "fa_icon": "fab fa-audible" }, "taxa_classification_mmseqs_taxonomy_sensitivity": { - "type": "string", - "default": "5.0", - "help_text": "This flag specifies the speed and sensitivity of the taxonomic search. It stands for how many kmers should be produced during the preliminary seeding stage. A very fast search requires a low value e.g. '1.0' and a a very sensitive search requires e.g. '7.0'. More details can be found in the [documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - mmseqs taxonomy: `--s`", + "type": "number", + "default": 5.0, + "help_text": "This flag specifies the speed and sensitivity of the taxonomic search. It stands for how many kmers should be produced during the preliminary seeding stage. A very fast search requires a low value e.g. '1.0' and a a very sensitive search requires e.g. '7.0'. More details can be found in the [documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - mmseqs taxonomy: `-s`", "description": "Specify the speed and sensitivity for taxonomy assignment.", "fa_icon": "fas fa-history" }, "taxa_classification_mmseqs_taxonomy_orffilters": { - "type": "string", - "default": "2.0", + "type": "number", + "default": 2.0, "help_text": "This flag specifies the sensitivity used for prefiltering the query ORF. Before the taxonomy-assigning step, MMseqs2 searches the predicted ORFs against the provided database. This value influences the speed with which the search is carried out. More details can be found in the [documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - mmseqs taxonomy: `--orf-filter-s`", "description": "Specify the ORF search sensitivity in the prefilter step.", "fa_icon": "fas fa-history" @@ -1192,14 +1192,12 @@ }, "bgc_antismash_pfam2go": { "type": "boolean", - "default": false, "description": "Run Pfam to Gene Ontology mapping module.", "help_text": "This maps the proteins to Pfam database to annotate BGC modules with functional information based on the protein families they contain. For more information see the antiSMASH [documentation](https://docs.antismash.secondarymetabolites.org/).\n\n> Modifies tool parameter(s):\n> - antiSMASH: `--pfam2go`", "fa_icon": "fas fa-search" }, "bgc_antismash_rre": { "type": "boolean", - "default": false, "description": "Run RREFinder precision mode on all RiPP gene clusters.", "help_text": "This enables the prediction of regulatory elements on the BGC that help in the control of protein expression. For more information see the antiSMASH [documentation](https://docs.antismash.secondarymetabolites.org/).\n\n> Modifies tool parameter(s):\n> - antiSMASH: `--rre`", "fa_icon": "fas fa-search" @@ -1214,7 +1212,6 @@ }, "bgc_antismash_tfbs": { "type": "boolean", - "default": false, "description": "Run TFBS finder on all gene clusters.", "help_text": "This enables the prediction of transcription factor binding sites which control the gene expression. For more information see the antiSMASH [documentation](https://docs.antismash.secondarymetabolites.org/).\n\n> Modifies tool parameter(s):\n> - antiSMASH: `--tfbs`", "fa_icon": "fas fa-search" From 0f893df1cd21fef33e30929a689b66f0c1247c68 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 23 Oct 2024 13:20:25 +0200 Subject: [PATCH 010/175] Update all modules --- modules.json | 78 ++--- modules/nf-core/abricate/run/environment.yml | 2 - modules/nf-core/abricate/run/meta.yml | 54 ++-- .../ampcombi2/complete/environment.yml | 2 - modules/nf-core/ampcombi2/complete/meta.yml | 42 +-- .../ampcombi2/parsetables/environment.yml | 2 - .../nf-core/ampcombi2/parsetables/meta.yml | 214 +++++++++----- modules/nf-core/ampir/environment.yml | 2 - modules/nf-core/ampir/meta.yml | 88 +++--- .../nf-core/amplify/predict/environment.yml | 2 - modules/nf-core/amplify/predict/meta.yml | 55 ++-- .../nf-core/amrfinderplus/run/environment.yml | 2 - modules/nf-core/amrfinderplus/run/meta.yml | 80 +++--- .../amrfinderplus/update/environment.yml | 2 - modules/nf-core/amrfinderplus/update/meta.yml | 25 +- .../antismash/antismashlite/environment.yml | 2 - .../nf-core/antismash/antismashlite/meta.yml | 269 ++++++++++++------ .../environment.yml | 2 - .../antismashlitedownloaddatabases/meta.yml | 60 ++-- modules/nf-core/argnorm/environment.yml | 2 - modules/nf-core/argnorm/meta.yml | 70 ++--- modules/nf-core/bakta/bakta/environment.yml | 2 - modules/nf-core/bakta/bakta/meta.yml | 184 ++++++++---- .../bakta/baktadbdownload/environment.yml | 2 - .../nf-core/bakta/baktadbdownload/meta.yml | 17 +- .../deeparg/downloaddata/environment.yml | 2 - modules/nf-core/deeparg/downloaddata/meta.yml | 23 +- .../nf-core/deeparg/predict/environment.yml | 2 - modules/nf-core/deeparg/predict/meta.yml | 106 ++++--- .../nf-core/deepbgc/download/environment.yml | 2 - modules/nf-core/deepbgc/download/meta.yml | 20 +- .../deepbgc/download/tests/main.nf.test | 32 +++ .../deepbgc/download/tests/main.nf.test.snap | 39 +++ .../nf-core/deepbgc/download/tests/tags.yml | 2 + .../nf-core/deepbgc/pipeline/environment.yml | 2 - modules/nf-core/deepbgc/pipeline/meta.yml | 173 +++++++---- modules/nf-core/fargene/environment.yml | 2 - modules/nf-core/fargene/meta.yml | 235 ++++++++++----- modules/nf-core/gecco/run/environment.yml | 2 - modules/nf-core/gecco/run/meta.yml | 117 +++++--- modules/nf-core/gunzip/environment.yml | 2 - modules/nf-core/gunzip/meta.yml | 37 ++- .../hamronization/abricate/environment.yml | 2 - .../nf-core/hamronization/abricate/meta.yml | 87 +++--- .../amrfinderplus/environment.yml | 2 - .../hamronization/amrfinderplus/meta.yml | 87 +++--- .../hamronization/deeparg/environment.yml | 2 - .../nf-core/hamronization/deeparg/meta.yml | 87 +++--- .../hamronization/fargene/environment.yml | 2 - .../nf-core/hamronization/fargene/meta.yml | 87 +++--- .../nf-core/hamronization/rgi/environment.yml | 2 - modules/nf-core/hamronization/rgi/meta.yml | 84 +++--- .../hamronization/summarize/environment.yml | 2 - .../nf-core/hamronization/summarize/meta.yml | 53 ++-- .../nf-core/hmmer/hmmsearch/environment.yml | 2 - modules/nf-core/hmmer/hmmsearch/meta.yml | 110 ++++--- .../nf-core/macrel/contigs/environment.yml | 4 +- modules/nf-core/macrel/contigs/main.nf | 22 +- modules/nf-core/macrel/contigs/meta.yml | 102 ++++--- .../nf-core/macrel/contigs/tests/main.nf.test | 66 +++++ .../macrel/contigs/tests/main.nf.test.snap | 150 ++++++++++ .../nf-core/mmseqs/createdb/environment.yml | 2 - modules/nf-core/mmseqs/createdb/meta.yml | 46 +-- .../nf-core/mmseqs/createtsv/environment.yml | 2 - modules/nf-core/mmseqs/createtsv/meta.yml | 81 +++--- .../nf-core/mmseqs/databases/environment.yml | 2 - modules/nf-core/mmseqs/databases/main.nf | 4 +- modules/nf-core/mmseqs/databases/meta.yml | 26 +- .../mmseqs/databases/tests/main.nf.test | 55 ++++ .../mmseqs/databases/tests/main.nf.test.snap | 74 +++++ .../nf-core/mmseqs/taxonomy/environment.yml | 2 - modules/nf-core/mmseqs/taxonomy/meta.yml | 52 ++-- modules/nf-core/prodigal/environment.yml | 2 - modules/nf-core/prodigal/meta.yml | 93 +++--- modules/nf-core/prokka/meta.yml | 191 +++++++++---- modules/nf-core/pyrodigal/environment.yml | 2 - modules/nf-core/pyrodigal/meta.yml | 98 ++++--- .../rgi/cardannotation/environment.yml | 2 - modules/nf-core/rgi/cardannotation/meta.yml | 43 +-- modules/nf-core/rgi/main/environment.yml | 2 - modules/nf-core/rgi/main/meta.yml | 109 ++++--- modules/nf-core/seqkit/seq/environment.yml | 2 - modules/nf-core/seqkit/seq/meta.yml | 47 +-- modules/nf-core/tabix/bgzip/environment.yml | 5 +- modules/nf-core/tabix/bgzip/meta.yml | 53 ++-- modules/nf-core/untar/environment.yml | 2 - modules/nf-core/untar/meta.yml | 43 +-- modules/nf-core/untar/untar.diff | 6 + 88 files changed, 2627 insertions(+), 1430 deletions(-) create mode 100644 modules/nf-core/deepbgc/download/tests/main.nf.test create mode 100644 modules/nf-core/deepbgc/download/tests/main.nf.test.snap create mode 100644 modules/nf-core/deepbgc/download/tests/tags.yml create mode 100644 modules/nf-core/macrel/contigs/tests/main.nf.test create mode 100644 modules/nf-core/macrel/contigs/tests/main.nf.test.snap create mode 100644 modules/nf-core/mmseqs/databases/tests/main.nf.test create mode 100644 modules/nf-core/mmseqs/databases/tests/main.nf.test.snap diff --git a/modules.json b/modules.json index 776a696d..05d5e9fa 100644 --- a/modules.json +++ b/modules.json @@ -7,7 +7,7 @@ "nf-core": { "abricate/run": { "branch": "master", - "git_sha": "9837ac7d7bb2e2362c021e8dc08efa96190b49a4", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "ampcombi2/cluster": { @@ -17,152 +17,152 @@ }, "ampcombi2/complete": { "branch": "master", - "git_sha": "900f6c970712e41b783e21e5dfc30f052174b5cd", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "ampcombi2/parsetables": { "branch": "master", - "git_sha": "900f6c970712e41b783e21e5dfc30f052174b5cd", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "ampir": { "branch": "master", - "git_sha": "9bfc81874554e87740bcb3e5e07acf0a153c9ecb", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "amplify/predict": { "branch": "master", - "git_sha": "730f3aee80d5f8d0b5fc532202ac59361414d006", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "amrfinderplus/run": { "branch": "master", - "git_sha": "c0514dfc403fa97c96f549de6abe99f03c78fe8d", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "amrfinderplus/update": { "branch": "master", - "git_sha": "8f4a5d5ad55715f6c905ab73ce49f677cf6092fc", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "antismash/antismashlite": { "branch": "master", - "git_sha": "b20be35facfc5acdc1259f132ed79339d79e989f", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "antismash/antismashlitedownloaddatabases": { "branch": "master", - "git_sha": "4e5f4687318f24ba944a13609d3ea6ebd890737d", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "argnorm": { "branch": "master", - "git_sha": "e4fc46af5ec30070e6aef780aba14f89a28caa88", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bakta/bakta": { "branch": "master", - "git_sha": "52507581f62929f98dd6e6c5c5824583fa6ef94d", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bakta/baktadbdownload": { "branch": "master", - "git_sha": "7c06e6820fa3918bc28a040e794f8a2b39fabadb", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "deeparg/downloaddata": { "branch": "master", - "git_sha": "0af92e0fe6a34f31ee41eae66f04d71850fb4beb", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "deeparg/predict": { "branch": "master", - "git_sha": "90b63cde0f838ca4da3a88a37a5309888cae97b9", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "deepbgc/download": { "branch": "master", - "git_sha": "f315f85d9ac6c321f6e3596493fd61019340df2a", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "deepbgc/pipeline": { "branch": "master", - "git_sha": "34ac993e081b32d2170ab790d0386b74122f9d36", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "fargene": { "branch": "master", - "git_sha": "5e8481d994963871e3faf061d6fbf02fe33d8cad", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gecco/run": { "branch": "master", - "git_sha": "f9707f9499a90a46208873d23440e22ac8ad5ebc", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gunzip": { "branch": "master", - "git_sha": "4e5f4687318f24ba944a13609d3ea6ebd890737d", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "hamronization/abricate": { "branch": "master", - "git_sha": "9837ac7d7bb2e2362c021e8dc08efa96190b49a4", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "hamronization/amrfinderplus": { "branch": "master", - "git_sha": "52ddbb3ad754d870e485bcfcb680fe6a49d83567", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "hamronization/deeparg": { "branch": "master", - "git_sha": "9837ac7d7bb2e2362c021e8dc08efa96190b49a4", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "hamronization/fargene": { "branch": "master", - "git_sha": "9cf6f5e4ad9cc11a670a94d56021f1c4f9a91ec1", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "hamronization/rgi": { "branch": "master", - "git_sha": "483e4838a2a009e826ea14da0dfc6bcaccef5ad1", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "hamronization/summarize": { "branch": "master", - "git_sha": "9837ac7d7bb2e2362c021e8dc08efa96190b49a4", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "hmmer/hmmsearch": { "branch": "master", - "git_sha": "b046a286c8240ebe3412ddf8ae901d47008d1ca7", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "macrel/contigs": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "mmseqs/createdb": { "branch": "master", - "git_sha": "89fe39b745da3dca14ad1a361784812ea3aa3a43", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "mmseqs/createtsv": { "branch": "master", - "git_sha": "89fe39b745da3dca14ad1a361784812ea3aa3a43", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "mmseqs/databases": { "branch": "master", - "git_sha": "151460db852d636979d9ff3ee631e2268060d4c3", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "mmseqs/taxonomy": { "branch": "master", - "git_sha": "89fe39b745da3dca14ad1a361784812ea3aa3a43", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "multiqc": { @@ -172,42 +172,42 @@ }, "prodigal": { "branch": "master", - "git_sha": "5e8481d994963871e3faf061d6fbf02fe33d8cad", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "prokka": { "branch": "master", - "git_sha": "697d97d46d56b12ff46a1a848a36849527cea0b8", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "pyrodigal": { "branch": "master", - "git_sha": "c00055a0b13d622b4f1f51a8e5be31deaf99ded7", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "rgi/cardannotation": { "branch": "master", - "git_sha": "dbbb0c509e044d2680b429ba622049d4a23426dc", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "rgi/main": { "branch": "master", - "git_sha": "4e5f4687318f24ba944a13609d3ea6ebd890737d", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "seqkit/seq": { "branch": "master", - "git_sha": "03fbf6c89e551bd8d77f3b751fb5c955f75b34c5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "tabix/bgzip": { "branch": "master", - "git_sha": "b20be35facfc5acdc1259f132ed79339d79e989f", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "untar": { "branch": "master", - "git_sha": "4e5f4687318f24ba944a13609d3ea6ebd890737d", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"], "patch": "modules/nf-core/untar/untar.diff" } diff --git a/modules/nf-core/abricate/run/environment.yml b/modules/nf-core/abricate/run/environment.yml index 4b2a1d2a..c7a7d199 100644 --- a/modules/nf-core/abricate/run/environment.yml +++ b/modules/nf-core/abricate/run/environment.yml @@ -1,7 +1,5 @@ -name: abricate_run channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::abricate=1.0.1 diff --git a/modules/nf-core/abricate/run/meta.yml b/modules/nf-core/abricate/run/meta.yml index 927c21f6..dce78f3c 100644 --- a/modules/nf-core/abricate/run/meta.yml +++ b/modules/nf-core/abricate/run/meta.yml @@ -11,34 +11,38 @@ tools: documentation: https://github.com/tseemann/abricate tool_dev_url: https://github.com/tseemann/abricate licence: ["GPL v2"] + identifier: biotools:ABRicate input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - assembly: - type: file - description: FASTA, GenBank or EMBL formatted file - pattern: "*.{fa,fasta,fna,fa.gz,fasta.gz,fna.gz,gbk,gbk.gz,embl,embl.gz}" - - databasedir: - type: directory - description: Optional location of local copy of database files, possibly with custom databases set up with `abricate --setupdb` - pattern: "*/" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - assembly: + type: file + description: FASTA, GenBank or EMBL formatted file + pattern: "*.{fa,fasta,fna,fa.gz,fasta.gz,fna.gz,gbk,gbk.gz,embl,embl.gz}" + - - databasedir: + type: directory + description: Optional location of local copy of database files, possibly with + custom databases set up with `abricate --setupdb` + pattern: "*/" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - report: - type: file - description: Tab-delimited report of results - pattern: "*.{txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.txt": + type: file + description: Tab-delimited report of results + pattern: "*.{txt}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@rpetit3" maintainers: diff --git a/modules/nf-core/ampcombi2/complete/environment.yml b/modules/nf-core/ampcombi2/complete/environment.yml index fa640b77..420c955b 100644 --- a/modules/nf-core/ampcombi2/complete/environment.yml +++ b/modules/nf-core/ampcombi2/complete/environment.yml @@ -1,9 +1,7 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "ampcombi2_complete" channels: - conda-forge - bioconda - - defaults dependencies: - "bioconda::ampcombi=0.2.2" diff --git a/modules/nf-core/ampcombi2/complete/meta.yml b/modules/nf-core/ampcombi2/complete/meta.yml index e9ae632c..13a7468b 100644 --- a/modules/nf-core/ampcombi2/complete/meta.yml +++ b/modules/nf-core/ampcombi2/complete/meta.yml @@ -1,7 +1,7 @@ ---- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json name: "ampcombi2_complete" -description: A submodule that merges all output summary tables from ampcombi/parsetables in one summary file. +description: A submodule that merges all output summary tables from ampcombi/parsetables + in one summary file. keywords: - antimicrobial peptides - amps @@ -18,32 +18,38 @@ keywords: - DRAMP tools: - ampcombi2/complete: - description: "This merges the per sample AMPcombi summaries generated by running 'ampcombi2/parsetables'." + description: "This merges the per sample AMPcombi summaries generated by running + 'ampcombi2/parsetables'." homepage: "https://github.com/Darcy220606/AMPcombi" documentation: "https://github.com/Darcy220606/AMPcombi" tool_dev_url: "https://github.com/Darcy220606/AMPcombi/tree/dev" licence: ["MIT"] + identifier: "" input: - - summaries: - type: list - description: The path to the list of files corresponding to each sample as generated by ampcombi2/parsetables. - pattern: "[*_ampcombi.tsv, *_ampcombi.tsv]" - + - - summaries: + type: list + description: The path to the list of files corresponding to each sample as generated + by ampcombi2/parsetables. + pattern: "[*_ampcombi.tsv, *_ampcombi.tsv]" output: - tsv: - type: file - description: A file containing the complete AMPcombi summaries from all processed samples. - pattern: "*.tsv" + - Ampcombi_summary.tsv: + type: file + description: A file containing the complete AMPcombi summaries from all processed + samples. + pattern: "*.tsv" - log: - type: file - description: A log file that captures the standard output for the entire process in a log file. Can be activated by `--log`. - pattern: "*.log" + - Ampcombi_complete.log: + type: file + description: A log file that captures the standard output for the entire process + in a log file. Can be activated by `--log`. + pattern: "*.log" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@darcy220606" maintainers: diff --git a/modules/nf-core/ampcombi2/parsetables/environment.yml b/modules/nf-core/ampcombi2/parsetables/environment.yml index 7a4b37ab..420c955b 100644 --- a/modules/nf-core/ampcombi2/parsetables/environment.yml +++ b/modules/nf-core/ampcombi2/parsetables/environment.yml @@ -1,9 +1,7 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "ampcombi2_parsetables" channels: - conda-forge - bioconda - - defaults dependencies: - "bioconda::ampcombi=0.2.2" diff --git a/modules/nf-core/ampcombi2/parsetables/meta.yml b/modules/nf-core/ampcombi2/parsetables/meta.yml index eeea5586..7159b117 100644 --- a/modules/nf-core/ampcombi2/parsetables/meta.yml +++ b/modules/nf-core/ampcombi2/parsetables/meta.yml @@ -1,7 +1,7 @@ ---- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json name: "ampcombi2_parsetables" -description: A submodule that parses and standardizes the results from various antimicrobial peptide identification tools. +description: A submodule that parses and standardizes the results from various antimicrobial + peptide identification tools. keywords: - antimicrobial peptides - amps @@ -18,89 +18,171 @@ keywords: - DRAMP tools: - ampcombi2/parsetables: - description: "A parsing tool to convert and summarise the outputs from multiple AMP detection tools in a standardized format." + description: "A parsing tool to convert and summarise the outputs from multiple + AMP detection tools in a standardized format." homepage: "https://github.com/Darcy220606/AMPcombi" documentation: "https://github.com/Darcy220606/AMPcombi" tool_dev_url: "https://github.com/Darcy220606/AMPcombi/tree/dev" licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - amp_input: - type: list - description: The path to the directory containing the results for the AMP tools for each processed sample or a list of files corresponding to each file generated by AMP tools. - pattern: "[*amptool.tsv, *amptool.tsv]" - - faa_input: - type: file - description: The path to the file corresponding to the respective protein fasta files with '.faa' extension. File names have to contain the corresponding sample name, i.e. sample_1.faa - pattern: "*.faa" - - gbk_input: - type: file - description: The path to the file corresponding to the respective annotated files with either '.gbk' or '.gbff' extensions. File names must contain the corresponding sample name, i.e. sample_1.faa where "sample_1" is the sample name. - pattern: "*.gbk" - - opt_amp_db: - type: directory - description: The path to the folder containing the fasta and tsv database files. - pattern: "*/" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - amp_input: + type: list + description: The path to the directory containing the results for the AMP tools + for each processed sample or a list of files corresponding to each file generated + by AMP tools. + pattern: "[*amptool.tsv, *amptool.tsv]" + - - faa_input: + type: file + description: The path to the file corresponding to the respective protein fasta + files with '.faa' extension. File names have to contain the corresponding + sample name, i.e. sample_1.faa + pattern: "*.faa" + - - gbk_input: + type: file + description: The path to the file corresponding to the respective annotated + files with either '.gbk' or '.gbff' extensions. File names must contain the + corresponding sample name, i.e. sample_1.faa where "sample_1" is the sample + name. + pattern: "*.gbk" + - - opt_amp_db: + type: directory + description: The path to the folder containing the fasta and tsv database files. + pattern: "*/" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - sample_dir: - type: directory - description: The output directory that contains the summary output and related alignment files for one sample. - pattern: "/*" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - ${meta.id}/: + type: directory + description: The output directory that contains the summary output and related + alignment files for one sample. + pattern: "/*" - contig_gbks: - type: directory - description: The output subdirectory that contains the gbk files containing the AMP hits for each sample. - pattern: "/*/contig_gbks" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - ${meta.id}/contig_gbks/: + type: directory + description: The output subdirectory that contains the gbk files containing + the AMP hits for each sample. + pattern: "/*/contig_gbks" - txt: - type: file - description: An alignment file containing the results from the DIAMOND alignment step done on all AMP hits. - pattern: "/*/*_diamond_matches.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - ${meta.id}/${meta.id}_diamond_matches.txt: + type: file + description: An alignment file containing the results from the DIAMOND alignment + step done on all AMP hits. + pattern: "/*/*_diamond_matches.txt" - tsv: - type: file - description: A file containing the summary report of all predicted AMP hits from all AMP tools given as input, the corresponding taxonomic and functional classification from the alignment step and the estimated physiochemical properties. - pattern: "/*/*_ampcombi.tsv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - ${meta.id}/${meta.id}_ampcombi.tsv: + type: file + description: A file containing the summary report of all predicted AMP hits + from all AMP tools given as input, the corresponding taxonomic and functional + classification from the alignment step and the estimated physiochemical properties. + pattern: "/*/*_ampcombi.tsv" - faa: - type: file - description: A fasta file containing the amino acid sequences of all predicted AMP hits. - pattern: "/*/*_amp.faa" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - ${meta.id}/${meta.id}_amp.faa: + type: file + description: A fasta file containing the amino acid sequences of all predicted + AMP hits. + pattern: "/*/*_amp.faa" - sample_log: - type: file - description: A log file that captures the standard output per sample in a log file. Can be activated by `--log`. - pattern: "/*/*.log" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - ${meta.id}/${meta.id}_ampcombi.log: + type: file + description: A log file that captures the standard output per sample in a log + file. Can be activated by `--log`. + pattern: "/*/*.log" - full_log: - type: file - description: A log file that captures the standard output for the entire process in a log file. Can be activated by `--log`. - pattern: "Ampcombi_parse_tables.log" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - Ampcombi_parse_tables.log: + type: file + description: A log file that captures the standard output for the entire process + in a log file. Can be activated by `--log`. + pattern: "Ampcombi_parse_tables.log" - results_db: - type: directory - description: If the AMP reference database is not provided by the user using the flag `--amp_database', by default the DRAMP database will be downloaded, filtered and stored in this folder. - pattern: "/amp_ref_database" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - amp_ref_database/: + type: directory + description: If the AMP reference database is not provided by the user using + the flag `--amp_database', by default the DRAMP database will be downloaded, + filtered and stored in this folder. + pattern: "/amp_ref_database" - results_db_dmnd: - type: file - description: AMP reference database converted to DIAMOND database format. - pattern: "/amp_ref_database/*.dmnd" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - amp_ref_database/*.dmnd: + type: file + description: AMP reference database converted to DIAMOND database format. + pattern: "/amp_ref_database/*.dmnd" - results_db_fasta: - type: file - description: AMP reference database fasta file, cleaned of diamond-uncompatible characters. - pattern: "/amp_ref_database/*.clean.fasta" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - amp_ref_database/*.clean.fasta: + type: file + description: AMP reference database fasta file, cleaned of diamond-uncompatible + characters. + pattern: "/amp_ref_database/*.clean.fasta" - results_db_tsv: - type: file - description: AMP reference database in tsv-format with two columns containing header and sequence. - pattern: "/amp_ref_database/*.tsv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - amp_ref_database/*.tsv: + type: file + description: AMP reference database in tsv-format with two columns containing + header and sequence. + pattern: "/amp_ref_database/*.tsv" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@darcy220606" maintainers: diff --git a/modules/nf-core/ampir/environment.yml b/modules/nf-core/ampir/environment.yml index 8cb475d1..359e426c 100644 --- a/modules/nf-core/ampir/environment.yml +++ b/modules/nf-core/ampir/environment.yml @@ -1,7 +1,5 @@ -name: ampir channels: - conda-forge - bioconda - - defaults dependencies: - conda-forge::r-ampir=1.1.0 diff --git a/modules/nf-core/ampir/meta.yml b/modules/nf-core/ampir/meta.yml index 231cec54..571ddd86 100644 --- a/modules/nf-core/ampir/meta.yml +++ b/modules/nf-core/ampir/meta.yml @@ -1,57 +1,69 @@ name: "ampir" -description: A fast and user-friendly method to predict antimicrobial peptides (AMPs) from any given size protein dataset. ampir uses a supervised statistical machine learning approach to predict AMPs. +description: A fast and user-friendly method to predict antimicrobial peptides (AMPs) + from any given size protein dataset. ampir uses a supervised statistical machine + learning approach to predict AMPs. keywords: - ampir - amp - antimicrobial peptide prediction tools: - "ampir": - description: "A toolkit to predict antimicrobial peptides from protein sequences on a genome-wide scale." + description: "A toolkit to predict antimicrobial peptides from protein sequences + on a genome-wide scale." homepage: "https://github.com/Legana/ampir" documentation: "https://cran.r-project.org/web/packages/ampir/index.html" tool_dev_url: "https://github.com/Legana/ampir" doi: "10.1093/bioinformatics/btaa653" licence: ["GPL v2"] + identifier: biotools:ampir input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - faa: - type: file - description: FASTA file containing amino acid sequences - pattern: "*.{faa,fasta}" - - model: - type: string - description: Built-in model for AMP prediction - pattern: "{precursor,mature}" - - min_length: - type: integer - description: Minimum protein length for which predictions will be generated - pattern: "[0-9]+" - - min_probability: - type: float - description: Cut-off for AMP prediction - pattern: "[0-9].[0-9]+" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - faa: + type: file + description: FASTA file containing amino acid sequences + pattern: "*.{faa,fasta}" + - - model: + type: string + description: Built-in model for AMP prediction + pattern: "{precursor,mature}" + - - min_length: + type: integer + description: Minimum protein length for which predictions will be generated + pattern: "[0-9]+" + - - min_probability: + type: float + description: Cut-off for AMP prediction + pattern: "[0-9].[0-9]+" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - amps_faa: - type: file - description: File containing AMP predictions in amino acid FASTA format - pattern: "*.{faa}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.faa": + type: file + description: File containing AMP predictions in amino acid FASTA format + pattern: "*.{faa}" - amps_tsv: - type: file - description: File containing AMP predictions in TSV format - pattern: "*.tsv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tsv": + type: file + description: File containing AMP predictions in TSV format + pattern: "*.tsv" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@jasmezz" maintainers: diff --git a/modules/nf-core/amplify/predict/environment.yml b/modules/nf-core/amplify/predict/environment.yml index c980cf5e..e1cb5703 100644 --- a/modules/nf-core/amplify/predict/environment.yml +++ b/modules/nf-core/amplify/predict/environment.yml @@ -1,7 +1,5 @@ -name: amplify_predict channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::amplify=2.0.0 diff --git a/modules/nf-core/amplify/predict/meta.yml b/modules/nf-core/amplify/predict/meta.yml index 5ef93c83..cbe19f33 100644 --- a/modules/nf-core/amplify/predict/meta.yml +++ b/modules/nf-core/amplify/predict/meta.yml @@ -1,5 +1,6 @@ name: "amplify_predict" -description: AMPlify is an attentive deep learning model for antimicrobial peptide prediction. +description: AMPlify is an attentive deep learning model for antimicrobial peptide + prediction. keywords: - antimicrobial peptides - AMPs @@ -13,33 +14,37 @@ tools: tool_dev_url: "https://github.com/bcgsc/AMPlify" doi: "10.1186/s12864-022-08310-4" licence: ["GPL v3"] + identifier: biotools:amplify input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - faa: - type: file - description: amino acid sequences fasta - pattern: "*.{fa,fa.gz,faa,faa.gz,fasta,fasta.gz}" - - model_dir: - type: directory - description: Directory of where models are stored (optional) + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - faa: + type: file + description: amino acid sequences fasta + pattern: "*.{fa,fa.gz,faa,faa.gz,fasta,fasta.gz}" + - - model_dir: + type: directory + description: Directory of where models are stored (optional) output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - tsv: - type: file - description: amino acid sequences with prediction (AMP, non-AMP) and probability scores - pattern: "*.{tsv}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tsv": + type: file + description: amino acid sequences with prediction (AMP, non-AMP) and probability + scores + pattern: "*.{tsv}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@louperelo" maintainers: diff --git a/modules/nf-core/amrfinderplus/run/environment.yml b/modules/nf-core/amrfinderplus/run/environment.yml index 214f44f4..2744ce54 100644 --- a/modules/nf-core/amrfinderplus/run/environment.yml +++ b/modules/nf-core/amrfinderplus/run/environment.yml @@ -1,7 +1,5 @@ -name: amrfinderplus_run channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::ncbi-amrfinderplus=3.12.8 diff --git a/modules/nf-core/amrfinderplus/run/meta.yml b/modules/nf-core/amrfinderplus/run/meta.yml index 465927df..d081a2bd 100644 --- a/modules/nf-core/amrfinderplus/run/meta.yml +++ b/modules/nf-core/amrfinderplus/run/meta.yml @@ -6,50 +6,64 @@ keywords: - antibiotic resistance tools: - amrfinderplus: - description: AMRFinderPlus finds antimicrobial resistance and other genes in protein or nucleotide sequences. + description: AMRFinderPlus finds antimicrobial resistance and other genes in protein + or nucleotide sequences. homepage: https://github.com/ncbi/amr/wiki documentation: https://github.com/ncbi/amr/wiki tool_dev_url: https://github.com/ncbi/amr doi: "10.1038/s41598-021-91456-0" licence: ["Public Domain"] + identifier: biotools:amrfinderplus input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Nucleotide or protein sequences in FASTA format - pattern: "*.{fasta,fasta.gz,fa,fa.gz,fna,fna.gz,faa,faa.gz}" - - db: - type: file - description: A compressed tarball of the AMRFinderPlus database to query - pattern: "*.tar.gz" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Nucleotide or protein sequences in FASTA format + pattern: "*.{fasta,fasta.gz,fa,fa.gz,fna,fna.gz,faa,faa.gz}" + - - db: + type: file + description: A compressed tarball of the AMRFinderPlus database to query + pattern: "*.tar.gz" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - report: - type: file - description: AMRFinder+ final report - pattern: "*.tsv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.tsv: + type: file + description: AMRFinder+ final report + pattern: "*.tsv" - mutation_report: - type: file - description: Report of organism-specific point-mutations - pattern: "*-mutations.tsv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}-mutations.tsv: + type: file + description: Report of organism-specific point-mutations + pattern: "*-mutations.tsv" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" - tool_version: - type: string - description: The version of the tool in string format (useful for downstream tools such as hAMRronization) + - VER: + type: string + description: The version of the tool in string format (useful for downstream + tools such as hAMRronization) - db_version: - type: string - description: The version of the used database in string format (useful for downstream tools such as hAMRronization) + - DBVER: + type: string + description: The version of the used database in string format (useful for downstream + tools such as hAMRronization) authors: - "@rpetit3" - "@louperelo" diff --git a/modules/nf-core/amrfinderplus/update/environment.yml b/modules/nf-core/amrfinderplus/update/environment.yml index d08f0725..2744ce54 100644 --- a/modules/nf-core/amrfinderplus/update/environment.yml +++ b/modules/nf-core/amrfinderplus/update/environment.yml @@ -1,7 +1,5 @@ -name: amrfinderplus_update channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::ncbi-amrfinderplus=3.12.8 diff --git a/modules/nf-core/amrfinderplus/update/meta.yml b/modules/nf-core/amrfinderplus/update/meta.yml index 7a9345d6..574957e1 100644 --- a/modules/nf-core/amrfinderplus/update/meta.yml +++ b/modules/nf-core/amrfinderplus/update/meta.yml @@ -6,27 +6,26 @@ keywords: - antibiotic resistance tools: - amrfinderplus: - description: AMRFinderPlus finds antimicrobial resistance and other genes in protein or nucleotide sequences. + description: AMRFinderPlus finds antimicrobial resistance and other genes in protein + or nucleotide sequences. homepage: https://github.com/ncbi/amr/wiki documentation: https://github.com/ncbi/amr/wiki tool_dev_url: https://github.com/ncbi/amr doi: "10.1038/s41598-021-91456-0" licence: ["Public Domain"] + identifier: biotools:amrfinderplus # this module does have any input. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - db: - type: file - description: The latest AMRFinder+ database in a compressed tarball - pattern: "*.tar.gz" + - amrfinderdb.tar.gz: + type: file + description: The latest AMRFinder+ database in a compressed tarball + pattern: "*.tar.gz" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@rpetit3" maintainers: diff --git a/modules/nf-core/antismash/antismashlite/environment.yml b/modules/nf-core/antismash/antismashlite/environment.yml index 227b5264..ce4491dc 100644 --- a/modules/nf-core/antismash/antismashlite/environment.yml +++ b/modules/nf-core/antismash/antismashlite/environment.yml @@ -1,7 +1,5 @@ -name: antismash_antismashlite channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::antismash-lite=7.1.0 diff --git a/modules/nf-core/antismash/antismashlite/meta.yml b/modules/nf-core/antismash/antismashlite/meta.yml index 21f506bd..63828343 100644 --- a/modules/nf-core/antismash/antismashlite/meta.yml +++ b/modules/nf-core/antismash/antismashlite/meta.yml @@ -23,110 +23,207 @@ tools: tool_dev_url: "https://github.com/antismash/antismash" doi: "10.1093/nar/gkab335" licence: ["AGPL v3"] + identifier: biotools:antismash input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - sequence_input: - type: file - description: nucleotide sequence file (annotated) - pattern: "*.{gbk, gb, gbff, genbank, embl, fasta, fna}" - - databases: - type: directory - description: | - Downloaded AntiSMASH databases (e.g. in the AntiSMASH installation directory - "data/databases") - pattern: "*/" - - antismash_dir: - type: directory - description: | - A local copy of an AntiSMASH installation folder. This is required when running with - docker and singularity (not required for conda), due to attempted 'modifications' of - files during database checks in the installation directory, something that cannot - be done in immutable docker/singularity containers. Therefore, a local installation - directory needs to be mounted (including all modified files from the downloading step) - to the container as a workaround. - pattern: "*/" - - gff: - type: file - description: Annotations in GFF3 format (only if sequence_input is in FASTA format) - pattern: "*.gff" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - sequence_input: + type: file + description: nucleotide sequence file (annotated) + pattern: "*.{gbk, gb, gbff, genbank, embl, fasta, fna}" + - - databases: + type: directory + description: | + Downloaded AntiSMASH databases (e.g. in the AntiSMASH installation directory + "data/databases") + pattern: "*/" + - - antismash_dir: + type: directory + description: | + A local copy of an AntiSMASH installation folder. This is required when running with + docker and singularity (not required for conda), due to attempted 'modifications' of + files during database checks in the installation directory, something that cannot + be done in immutable docker/singularity containers. Therefore, a local installation + directory needs to be mounted (including all modified files from the downloading step) + to the container as a workaround. + pattern: "*/" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - clusterblast_file: - type: file - description: Output of ClusterBlast algorithm - pattern: "clusterblast/*_c*.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/clusterblast/*_c*.txt: + type: file + description: Output of ClusterBlast algorithm + pattern: "clusterblast/*_c*.txt" - html_accessory_files: - type: directory - description: Accessory files for the HTML output - pattern: "{css/,images/,js/}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/{css,images,js}: + type: directory + description: Accessory files for the HTML output + pattern: "{css/,images/,js/}" - knownclusterblast_html: - type: file - description: Tables with MIBiG hits in HTML format - pattern: "knownclusterblast/region*/ctg*.html" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/knownclusterblast/region*/ctg*.html: + type: file + description: Tables with MIBiG hits in HTML format + pattern: "knownclusterblast/region*/ctg*.html" - knownclusterblast_dir: - type: directory - description: Directory with MIBiG hits - pattern: "knownclusterblast/" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/knownclusterblast/: + type: directory + description: Directory with MIBiG hits + pattern: "knownclusterblast/" - knownclusterblast_txt: - type: file - description: Tables with MIBiG hits - pattern: "knownclusterblast/*_c*.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/knownclusterblast/*_c*.txt: + type: file + description: Tables with MIBiG hits + pattern: "knownclusterblast/*_c*.txt" - svg_files_clusterblast: - type: file - description: SVG images showing the % identity of the aligned hits against their queries - pattern: "svg/clusterblast*.svg" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/svg/clusterblast*.svg: + type: file + description: SVG images showing the % identity of the aligned hits against their + queries + pattern: "svg/clusterblast*.svg" - svg_files_knownclusterblast: - type: file - description: SVG images showing the % identity of the aligned hits against their queries - pattern: "svg/knownclusterblast*.svg" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/svg/knownclusterblast*.svg: + type: file + description: SVG images showing the % identity of the aligned hits against their + queries + pattern: "svg/knownclusterblast*.svg" - gbk_input: - type: file - description: Nucleotide sequence and annotations in GenBank format; converted from input file - pattern: "*.gbk" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.gbk: + type: file + description: Nucleotide sequence and annotations in GenBank format; converted + from input file + pattern: "*.gbk" - json_results: - type: file - description: Nucleotide sequence and annotations in JSON format; converted from GenBank file (gbk_input) - pattern: "*.json" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.json: + type: file + description: Nucleotide sequence and annotations in JSON format; converted from + GenBank file (gbk_input) + pattern: "*.json" - log: - type: file - description: Contains all the logging output that antiSMASH produced during its run - pattern: "*.log" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.log: + type: file + description: Contains all the logging output that antiSMASH produced during + its run + pattern: "*.log" - zip: - type: file - description: Contains a compressed version of the output folder in zip format - pattern: "*.zip" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.zip: + type: file + description: Contains a compressed version of the output folder in zip format + pattern: "*.zip" - gbk_results: - type: file - description: Nucleotide sequence and annotations in GenBank format; one file per antiSMASH hit - pattern: "*region*.gbk" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*region*.gbk: + type: file + description: Nucleotide sequence and annotations in GenBank format; one file + per antiSMASH hit + pattern: "*region*.gbk" - clusterblastoutput: - type: file - description: Raw BLAST output of known clusters previously predicted by antiSMASH using the built-in ClusterBlast algorithm - pattern: "clusterblastoutput.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/clusterblastoutput.txt: + type: file + description: Raw BLAST output of known clusters previously predicted by antiSMASH + using the built-in ClusterBlast algorithm + pattern: "clusterblastoutput.txt" - html: - type: file - description: Graphical web view of results in HTML format - patterN: "index.html" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/index.html: + type: file + description: Graphical web view of results in HTML format + patterN: "index.html" - knownclusterblastoutput: - type: file - description: Raw BLAST output of known clusters of the MIBiG database - pattern: "knownclusterblastoutput.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/knownclusterblastoutput.txt: + type: file + description: Raw BLAST output of known clusters of the MIBiG database + pattern: "knownclusterblastoutput.txt" - json_sideloading: - type: file - description: Sideloaded annotations of protoclusters and/or subregions (see antiSMASH documentation "Annotation sideloading") - pattern: "regions.js" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/regions.js: + type: file + description: Sideloaded annotations of protoclusters and/or subregions (see + antiSMASH documentation "Annotation sideloading") + pattern: "regions.js" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@jasmezz" maintainers: diff --git a/modules/nf-core/antismash/antismashlitedownloaddatabases/environment.yml b/modules/nf-core/antismash/antismashlitedownloaddatabases/environment.yml index b9323a93..ce4491dc 100644 --- a/modules/nf-core/antismash/antismashlitedownloaddatabases/environment.yml +++ b/modules/nf-core/antismash/antismashlitedownloaddatabases/environment.yml @@ -1,7 +1,5 @@ -name: antismash_antismashlitedownloaddatabases channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::antismash-lite=7.1.0 diff --git a/modules/nf-core/antismash/antismashlitedownloaddatabases/meta.yml b/modules/nf-core/antismash/antismashlitedownloaddatabases/meta.yml index 010c6267..fdca8294 100644 --- a/modules/nf-core/antismash/antismashlitedownloaddatabases/meta.yml +++ b/modules/nf-core/antismash/antismashlitedownloaddatabases/meta.yml @@ -1,5 +1,7 @@ name: antismash_antismashlitedownloaddatabases -description: antiSMASH allows the rapid genome-wide identification, annotation and analysis of secondary metabolite biosynthesis gene clusters. This module downloads the antiSMASH databases for conda and docker/singularity runs. +description: antiSMASH allows the rapid genome-wide identification, annotation and + analysis of secondary metabolite biosynthesis gene clusters. This module downloads + the antiSMASH databases for conda and docker/singularity runs. keywords: - secondary metabolites - BGC @@ -22,36 +24,40 @@ tools: tool_dev_url: https://github.com/antismash/antismash doi: "10.1093/nar/gkab335" licence: ["AGPL v3"] + identifier: biotools:antismash input: - - database_css: - type: directory - description: | - antismash/outputs/html/css folder which is being created during the antiSMASH database downloading step. These files are normally downloaded by download-antismash-databases itself, and must be retrieved by the user by manually running the command with conda or a standalone installation of antiSMASH. Therefore we do not recommend using this module for production pipelines, but rather require users to specify their own local copy of the antiSMASH database in pipelines. - pattern: "css" - - database_detection: - type: directory - description: | - antismash/detection folder which is being created during the antiSMASH database downloading step. These files are normally downloaded by download-antismash-databases itself, and must be retrieved by the user by manually running the command with conda or a standalone installation of antiSMASH. Therefore we do not recommend using this module for production pipelines, but rather require users to specify their own local copy of the antiSMASH database in pipelines. - pattern: "detection" - - database_modules: - type: directory - description: | - antismash/modules folder which is being created during the antiSMASH database downloading step. These files are normally downloaded by download-antismash-databases itself, and must be retrieved by the user by manually running the command with conda or a standalone installation of antiSMASH. Therefore we do not recommend using this module for production pipelines, but rather require users to specify their own local copy of the antiSMASH database in pipelines. - pattern: "modules" + - - database_css: + type: directory + description: | + antismash/outputs/html/css folder which is being created during the antiSMASH database downloading step. These files are normally downloaded by download-antismash-databases itself, and must be retrieved by the user by manually running the command with conda or a standalone installation of antiSMASH. Therefore we do not recommend using this module for production pipelines, but rather require users to specify their own local copy of the antiSMASH database in pipelines. + pattern: "css" + - - database_detection: + type: directory + description: | + antismash/detection folder which is being created during the antiSMASH database downloading step. These files are normally downloaded by download-antismash-databases itself, and must be retrieved by the user by manually running the command with conda or a standalone installation of antiSMASH. Therefore we do not recommend using this module for production pipelines, but rather require users to specify their own local copy of the antiSMASH database in pipelines. + pattern: "detection" + - - database_modules: + type: directory + description: | + antismash/modules folder which is being created during the antiSMASH database downloading step. These files are normally downloaded by download-antismash-databases itself, and must be retrieved by the user by manually running the command with conda or a standalone installation of antiSMASH. Therefore we do not recommend using this module for production pipelines, but rather require users to specify their own local copy of the antiSMASH database in pipelines. + pattern: "modules" output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - database: - type: directory - description: Download directory for antiSMASH databases - pattern: "antismash_db" + - antismash_db: + type: directory + description: Download directory for antiSMASH databases + pattern: "antismash_db" - antismash_dir: - type: directory - description: | - antismash installation folder which is being modified during the antiSMASH database downloading step. The modified files are normally downloaded by download-antismash-databases itself, and must be retrieved by the user by manually running the command with conda or a standalone installation of antiSMASH. Therefore we do not recommend using this module for production pipelines, but rather require users to specify their own local copy of the antiSMASH database and installation folder in pipelines. - pattern: "antismash_dir" + - antismash_dir: + type: directory + description: | + antismash installation folder which is being modified during the antiSMASH database downloading step. The modified files are normally downloaded by download-antismash-databases itself, and must be retrieved by the user by manually running the command with conda or a standalone installation of antiSMASH. Therefore we do not recommend using this module for production pipelines, but rather require users to specify their own local copy of the antiSMASH database and installation folder in pipelines. + pattern: "antismash_dir" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@jasmezz" maintainers: diff --git a/modules/nf-core/argnorm/environment.yml b/modules/nf-core/argnorm/environment.yml index 771b87c9..783995f2 100644 --- a/modules/nf-core/argnorm/environment.yml +++ b/modules/nf-core/argnorm/environment.yml @@ -1,7 +1,5 @@ -name: "argnorm" channels: - conda-forge - bioconda - - defaults dependencies: - "bioconda::argnorm=0.5.0" diff --git a/modules/nf-core/argnorm/meta.yml b/modules/nf-core/argnorm/meta.yml index a977e863..84842b9c 100644 --- a/modules/nf-core/argnorm/meta.yml +++ b/modules/nf-core/argnorm/meta.yml @@ -1,5 +1,6 @@ name: "argnorm" -description: Normalize antibiotic resistance genes (ARGs) using the ARO ontology (developed by CARD). +description: Normalize antibiotic resistance genes (ARGs) using the ARO ontology (developed + by CARD). keywords: - amr - antimicrobial resistance @@ -11,49 +12,48 @@ keywords: - drug categorization tools: - "argnorm": - description: "Normalize antibiotic resistance genes (ARGs) using the ARO ontology (developed by CARD)." + description: "Normalize antibiotic resistance genes (ARGs) using the ARO ontology + (developed by CARD)." homepage: "https://argnorm.readthedocs.io/en/latest/" documentation: "https://argnorm.readthedocs.io/en/latest/" tool_dev_url: "https://github.com/BigDataBiology/argNorm" licence: ["MIT"] + identifier: biotools:argnorm input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - - input_tsv: - type: file - description: ARG annotation output - pattern: "*.tsv" - - - tool: - type: string - description: ARG annotation tool used - pattern: "argsoap|abricate|deeparg|resfinder|amrfinderplus" - - - db: - type: string - description: Database used for ARG annotation - pattern: "sarg|ncbi|resfinder|deeparg|megares|argannot|resfinderfg" - + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - input_tsv: + type: file + description: ARG annotation output + pattern: "*.tsv" + - - tool: + type: string + description: ARG annotation tool used + pattern: "argsoap|abricate|deeparg|resfinder|amrfinderplus" + - - db: + type: string + description: Database used for ARG annotation + pattern: "sarg|ncbi|resfinder|deeparg|megares|argannot|resfinderfg" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - tsv: - type: file - description: Normalized argNorm output - pattern: "*.tsv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "*.tsv": + type: file + description: Normalized argNorm output + pattern: "*.tsv" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@Vedanth-Ramji" maintainers: diff --git a/modules/nf-core/bakta/bakta/environment.yml b/modules/nf-core/bakta/bakta/environment.yml index efb92265..b3c302f0 100644 --- a/modules/nf-core/bakta/bakta/environment.yml +++ b/modules/nf-core/bakta/bakta/environment.yml @@ -1,7 +1,5 @@ -name: bakta_bakta channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bakta=1.9.3 diff --git a/modules/nf-core/bakta/bakta/meta.yml b/modules/nf-core/bakta/bakta/meta.yml index c0e53e2a..f947e61b 100644 --- a/modules/nf-core/bakta/bakta/meta.yml +++ b/modules/nf-core/bakta/bakta/meta.yml @@ -12,76 +12,134 @@ tools: tool_dev_url: https://github.com/oschwengers/bakta doi: "10.1099/mgen.0.000685" licence: ["GPL v3"] + identifier: biotools:bakta input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: | - FASTA file to be annotated. Has to contain at least a non-empty string dummy value. - - db: - type: file - description: | - Path to the Bakta database. Must have amrfinderplus database directory already installed within it (in a directory called 'amrfinderplus-db/'). - - proteins: - type: file - description: FASTA/GenBank file of trusted proteins to first annotate from (optional) - - prodigal_tf: - type: file - description: Training file to use for Prodigal (optional) + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: | + FASTA file to be annotated. Has to contain at least a non-empty string dummy value. + - - db: + type: file + description: | + Path to the Bakta database. Must have amrfinderplus database directory already installed within it (in a directory called 'amrfinderplus-db/'). + - - proteins: + type: file + description: FASTA/GenBank file of trusted proteins to first annotate from (optional) + - - prodigal_tf: + type: file + description: Training file to use for Prodigal (optional) output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - txt: - type: file - description: genome statistics and annotation summary - pattern: "*.txt" - - tsv: - type: file - description: annotations as simple human readble tab separated values - pattern: "*.tsv" - - gff: - type: file - description: annotations & sequences in GFF3 format - pattern: "*.gff3" - - gbff: - type: file - description: annotations & sequences in (multi) GenBank format - pattern: "*.gbff" - embl: - type: file - description: annotations & sequences in (multi) EMBL format - pattern: "*.embl" - - fna: - type: file - description: replicon/contig DNA sequences as FASTA - pattern: "*.fna" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.embl: + type: file + description: annotations & sequences in (multi) EMBL format + pattern: "*.embl" - faa: - type: file - description: CDS/sORF amino acid sequences as FASTA - pattern: "*.faa" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.faa: + type: file + description: CDS/sORF amino acid sequences as FASTA + pattern: "*.faa" - ffn: - type: file - description: feature nucleotide sequences as FASTA - pattern: "*.ffn" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.ffn: + type: file + description: feature nucleotide sequences as FASTA + pattern: "*.ffn" + - fna: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.fna: + type: file + description: replicon/contig DNA sequences as FASTA + pattern: "*.fna" + - gbff: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.gbff: + type: file + description: annotations & sequences in (multi) GenBank format + pattern: "*.gbff" + - gff: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.gff3: + type: file + description: annotations & sequences in GFF3 format + pattern: "*.gff3" - hypotheticals_tsv: - type: file - description: additional information on hypothetical protein CDS as simple human readble tab separated values - pattern: "*.hypotheticals.tsv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.hypotheticals.tsv: + type: file + description: additional information on hypothetical protein CDS as simple human + readble tab separated values + pattern: "*.hypotheticals.tsv" - hypotheticals_faa: - type: file - description: hypothetical protein CDS amino acid sequences as FASTA - pattern: "*.hypotheticals.faa" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.hypotheticals.faa: + type: file + description: hypothetical protein CDS amino acid sequences as FASTA + pattern: "*.hypotheticals.faa" + - tsv: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.tsv: + type: file + description: annotations as simple human readble tab separated values + pattern: "*.tsv" + - txt: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.txt: + type: file + description: genome statistics and annotation summary + pattern: "*.txt" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@rpetit3" - "@oschwengers" diff --git a/modules/nf-core/bakta/baktadbdownload/environment.yml b/modules/nf-core/bakta/baktadbdownload/environment.yml index f6a53ff7..b3c302f0 100644 --- a/modules/nf-core/bakta/baktadbdownload/environment.yml +++ b/modules/nf-core/bakta/baktadbdownload/environment.yml @@ -1,7 +1,5 @@ -name: bakta_baktadbdownload channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bakta=1.9.3 diff --git a/modules/nf-core/bakta/baktadbdownload/meta.yml b/modules/nf-core/bakta/baktadbdownload/meta.yml index 21acacda..a0a3a455 100644 --- a/modules/nf-core/bakta/baktadbdownload/meta.yml +++ b/modules/nf-core/bakta/baktadbdownload/meta.yml @@ -15,15 +15,18 @@ tools: tool_dev_url: https://github.com/oschwengers/bakta doi: "10.1099/mgen.0.000685" licence: ["GPL v3"] + identifier: biotools:bakta output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - db: - type: directory - description: BAKTA database directory - pattern: "db*/" + - db*: + type: directory + description: BAKTA database directory + pattern: "db*/" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@jfy133" - "@jasmezz" diff --git a/modules/nf-core/deeparg/downloaddata/environment.yml b/modules/nf-core/deeparg/downloaddata/environment.yml index 87435be5..074c6501 100644 --- a/modules/nf-core/deeparg/downloaddata/environment.yml +++ b/modules/nf-core/deeparg/downloaddata/environment.yml @@ -1,7 +1,5 @@ -name: deeparg_downloaddata channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::deeparg=1.0.4 diff --git a/modules/nf-core/deeparg/downloaddata/meta.yml b/modules/nf-core/deeparg/downloaddata/meta.yml index 65fb3903..5df2887b 100644 --- a/modules/nf-core/deeparg/downloaddata/meta.yml +++ b/modules/nf-core/deeparg/downloaddata/meta.yml @@ -1,5 +1,6 @@ name: deeparg_downloaddata -description: A deep learning based approach to predict Antibiotic Resistance Genes (ARGs) from metagenomes +description: A deep learning based approach to predict Antibiotic Resistance Genes + (ARGs) from metagenomes keywords: - download - database @@ -9,22 +10,26 @@ keywords: - prediction tools: - deeparg: - description: A deep learning based approach to predict Antibiotic Resistance Genes (ARGs) from metagenomes + description: A deep learning based approach to predict Antibiotic Resistance Genes + (ARGs) from metagenomes homepage: https://github.com/gaarangoa/deeparg documentation: https://github.com/gaarangoa/deeparg tool_dev_url: https://github.com/gaarangoa/deeparg doi: "10.1186/s40168-018-0401-z" licence: ["MIT"] + identifier: "" # No input required for download module. output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - db: - type: directory - description: Directory containing database required for deepARG. - pattern: "db/" + - db/: + type: directory + description: Directory containing database required for deepARG. + pattern: "db/" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@jfy133" maintainers: diff --git a/modules/nf-core/deeparg/predict/environment.yml b/modules/nf-core/deeparg/predict/environment.yml index aa686701..074c6501 100644 --- a/modules/nf-core/deeparg/predict/environment.yml +++ b/modules/nf-core/deeparg/predict/environment.yml @@ -1,7 +1,5 @@ -name: deeparg_predict channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::deeparg=1.0.4 diff --git a/modules/nf-core/deeparg/predict/meta.yml b/modules/nf-core/deeparg/predict/meta.yml index d62c2c5f..dbd63945 100644 --- a/modules/nf-core/deeparg/predict/meta.yml +++ b/modules/nf-core/deeparg/predict/meta.yml @@ -1,5 +1,6 @@ name: deeparg_predict -description: A deep learning based approach to predict Antibiotic Resistance Genes (ARGs) from metagenomes +description: A deep learning based approach to predict Antibiotic Resistance Genes + (ARGs) from metagenomes keywords: - deeparg - antimicrobial resistance @@ -11,56 +12,81 @@ keywords: - metagenomes tools: - deeparg: - description: A deep learning based approach to predict Antibiotic Resistance Genes (ARGs) from metagenomes + description: A deep learning based approach to predict Antibiotic Resistance Genes + (ARGs) from metagenomes homepage: https://github.com/gaarangoa/deeparg documentation: https://github.com/gaarangoa/deeparg tool_dev_url: https://github.com/gaarangoa/deeparg doi: "10.1186/s40168-018-0401-z" licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - fasta: - type: file - description: FASTA file containing gene-like sequences - pattern: "*.{fasta,fa,fna}" - - model: - type: string - description: Which model to use, depending on input data. Either 'LS' or 'SS' for long or short sequences respectively - pattern: "LS|LS" - - db: - type: directory - description: Path to a directory containing the deepARG pre-built models - pattern: "*/" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - fasta: + type: file + description: FASTA file containing gene-like sequences + pattern: "*.{fasta,fa,fna}" + - model: + type: string + description: Which model to use, depending on input data. Either 'LS' or 'SS' + for long or short sequences respectively + pattern: "LS|LS" + - - db: + type: directory + description: Path to a directory containing the deepARG pre-built models + pattern: "*/" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - daa: - type: file - description: Sequences of ARG-like sequences from DIAMOND alignment - pattern: "*.align.daa" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.align.daa": + type: file + description: Sequences of ARG-like sequences from DIAMOND alignment + pattern: "*.align.daa" - daa_tsv: - type: file - description: Alignments scores against ARG-like sequences from DIAMOND alignment - pattern: "*.align.daa.tsv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.align.daa.tsv": + type: file + description: Alignments scores against ARG-like sequences from DIAMOND alignment + pattern: "*.align.daa.tsv" - arg: - type: file - description: Table containing sequences with an ARG-like probability of more than specified thresholds - pattern: "*.mapping.ARG" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.mapping.ARG": + type: file + description: Table containing sequences with an ARG-like probability of more + than specified thresholds + pattern: "*.mapping.ARG" - potential_arg: - type: file - description: Table containing sequences with an ARG-like probability of less than specified thresholds, and requires manual inspection - pattern: "*.mapping.potential.ARG" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.mapping.potential.ARG": + type: file + description: Table containing sequences with an ARG-like probability of less + than specified thresholds, and requires manual inspection + pattern: "*.mapping.potential.ARG" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@jfy133" maintainers: diff --git a/modules/nf-core/deepbgc/download/environment.yml b/modules/nf-core/deepbgc/download/environment.yml index 84d467f0..36cb903f 100644 --- a/modules/nf-core/deepbgc/download/environment.yml +++ b/modules/nf-core/deepbgc/download/environment.yml @@ -1,7 +1,5 @@ -name: deepbgc_download channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::deepbgc=0.1.31 diff --git a/modules/nf-core/deepbgc/download/meta.yml b/modules/nf-core/deepbgc/download/meta.yml index 6444dd41..4551e9a0 100644 --- a/modules/nf-core/deepbgc/download/meta.yml +++ b/modules/nf-core/deepbgc/download/meta.yml @@ -1,5 +1,6 @@ name: "deepbgc_download" -description: Database download module for DeepBGC which detects BGCs in bacterial and fungal genomes using deep learning. +description: Database download module for DeepBGC which detects BGCs in bacterial + and fungal genomes using deep learning. keywords: - database - download @@ -19,15 +20,18 @@ tools: tool_dev_url: "https://github.com/Merck/deepbgc" doi: "10.1093/nar/gkz654" licence: ["MIT"] + identifier: biotools:DeepBGC output: + - db: + - deepbgc_db/: + type: directory + description: Directory containing the DeepBGC database + pattern: "deepbgc_db/" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - deepbgc_db: - type: directory - description: Contains reference database files - pattern: "deepbgc_db" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@louperelo" maintainers: diff --git a/modules/nf-core/deepbgc/download/tests/main.nf.test b/modules/nf-core/deepbgc/download/tests/main.nf.test new file mode 100644 index 00000000..a1c2c532 --- /dev/null +++ b/modules/nf-core/deepbgc/download/tests/main.nf.test @@ -0,0 +1,32 @@ +nextflow_process { + + name "Test Process DEEPBGC_DOWNLOAD" + script "../main.nf" + process "DEEPBGC_DOWNLOAD" + + tag "modules" + tag "modules_nfcore" + tag "deepbgc" + tag "deepbgc/download" + + test("deepbgc download db") { + + when { + process { + """ + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.db).match("db") }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + +} diff --git a/modules/nf-core/deepbgc/download/tests/main.nf.test.snap b/modules/nf-core/deepbgc/download/tests/main.nf.test.snap new file mode 100644 index 00000000..b71c00ee --- /dev/null +++ b/modules/nf-core/deepbgc/download/tests/main.nf.test.snap @@ -0,0 +1,39 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,4130f2ce0a4d43fc3d8e04f4935f908b" + ] + ], + "timestamp": "2023-12-04T13:10:01.115594047" + }, + "db": { + "content": [ + [ + [ + [ + [ + "product_activity.pkl:md5,90f0c010460e9df882cb057664a49f30", + "product_class.pkl:md5,f78a2eda240403d2f40643d42202f3ac" + ], + [ + "clusterfinder_geneborder.pkl:md5,ca4be7031ae9f70780f17c616a4fa5b5", + "clusterfinder_original.pkl:md5,2ca2429bb9bc99a401d1093c376b37aa", + "clusterfinder_retrained.pkl:md5,65679a3b61c562ff4b84bdb574bb6d93", + "deepbgc.pkl:md5,7e9218be79ba45bc9adb23bed3845dc1" + ] + ], + [ + "Pfam-A.31.0.clans.tsv:md5,a0a4590ffb2b33b83ef2b28f6ead886b", + "Pfam-A.31.0.hmm:md5,79a3328e4c95b13949a4489b19959fc5", + "Pfam-A.31.0.hmm.h3f:md5,cbca323cf8dd4e5e7c109114ec444162", + "Pfam-A.31.0.hmm.h3i:md5,5242332a3f6a60cd1ab634cd9331afd6", + "Pfam-A.31.0.hmm.h3m:md5,1fe946fa2b3bcde1d4b2bad732bce612", + "Pfam-A.31.0.hmm.h3p:md5,27b98a1ded123b6a1ef72db01927017c" + ] + ] + ] + ], + "timestamp": "2023-12-04T13:09:47.229121097" + } +} \ No newline at end of file diff --git a/modules/nf-core/deepbgc/download/tests/tags.yml b/modules/nf-core/deepbgc/download/tests/tags.yml new file mode 100644 index 00000000..6f1c7569 --- /dev/null +++ b/modules/nf-core/deepbgc/download/tests/tags.yml @@ -0,0 +1,2 @@ +deepbgc/download: + - "modules/nf-core/deepbgc/download/**" diff --git a/modules/nf-core/deepbgc/pipeline/environment.yml b/modules/nf-core/deepbgc/pipeline/environment.yml index fe0087a2..36cb903f 100644 --- a/modules/nf-core/deepbgc/pipeline/environment.yml +++ b/modules/nf-core/deepbgc/pipeline/environment.yml @@ -1,7 +1,5 @@ -name: deepbgc_pipeline channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::deepbgc=0.1.31 diff --git a/modules/nf-core/deepbgc/pipeline/meta.yml b/modules/nf-core/deepbgc/pipeline/meta.yml index 5f939eaa..186c7d30 100644 --- a/modules/nf-core/deepbgc/pipeline/meta.yml +++ b/modules/nf-core/deepbgc/pipeline/meta.yml @@ -17,73 +17,138 @@ tools: tool_dev_url: "https://github.com/Merck/deepbgc" doi: "10.1093/nar/gkz654" licence: ["MIT"] + identifier: biotools:DeepBGC input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - genome: - type: file - description: FASTA/GenBank/Pfam CSV file - pattern: "*.{fasta,fa,fna,gbk,csv}" - - db: - type: directory - description: Database path + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - genome: + type: file + description: FASTA/GenBank/Pfam CSV file + pattern: "*.{fasta,fa,fna,gbk,csv}" + - - db: + type: directory + description: Database path output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - readme: - type: file - description: txt file containing description of output files - pattern: "*.{txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - ${prefix}/README.txt: + type: file + description: txt file containing description of output files + pattern: "*.{txt}" - log: - type: file - description: Log output of DeepBGC - pattern: "*.{txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - ${prefix}/LOG.txt: + type: file + description: Log output of DeepBGC + pattern: "*.{txt}" - json: - type: file - description: AntiSMASH JSON file for sideloading - pattern: "*.{json}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - ${prefix}/${prefix}.antismash.json: + type: file + description: AntiSMASH JSON file for sideloading + pattern: "*.{json}" - bgc_gbk: - type: file - description: Sequences and features of all detected BGCs in GenBank format - pattern: "*.{bgc.gbk}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - ${prefix}/${prefix}.bgc.gbk: + type: file + description: Sequences and features of all detected BGCs in GenBank format + pattern: "*.{bgc.gbk}" - bgc_tsv: - type: file - description: Table of detected BGCs and their properties - pattern: "*.{bgc.tsv}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - ${prefix}/${prefix}.bgc.tsv: + type: file + description: Table of detected BGCs and their properties + pattern: "*.{bgc.tsv}" - full_gbk: - type: file - description: Fully annotated input sequence with proteins, Pfam domains (PFAM_domain features) and BGCs (cluster features) - pattern: "*.{full.gbk}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - ${prefix}/${prefix}.full.gbk: + type: file + description: Fully annotated input sequence with proteins, Pfam domains (PFAM_domain + features) and BGCs (cluster features) + pattern: "*.{full.gbk}" - pfam_tsv: - type: file - description: Table of Pfam domains (pfam_id) from given sequence (sequence_id) in genomic order, with BGC detection scores - pattern: "*.{pfam.tsv}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - ${prefix}/${prefix}.pfam.tsv: + type: file + description: Table of Pfam domains (pfam_id) from given sequence (sequence_id) + in genomic order, with BGC detection scores + pattern: "*.{pfam.tsv}" - bgc_png: - type: file - description: Detected BGCs plotted by their nucleotide coordinates - pattern: "*.{bgc.png}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - ${prefix}/evaluation/${prefix}.bgc.png: + type: file + description: Detected BGCs plotted by their nucleotide coordinates + pattern: "*.{bgc.png}" - pr_png: - type: file - description: Precision-Recall curve based on predicted per-Pfam BGC scores - pattern: "*.{pr.png}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - ${prefix}/evaluation/${prefix}.pr.png: + type: file + description: Precision-Recall curve based on predicted per-Pfam BGC scores + pattern: "*.{pr.png}" - roc_png: - type: file - description: ROC curve based on predicted per-Pfam BGC scores - pattern: "*.{roc.png}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - ${prefix}/evaluation/${prefix}.roc.png: + type: file + description: ROC curve based on predicted per-Pfam BGC scores + pattern: "*.{roc.png}" - score_png: - type: file - description: BGC detection scores of each Pfam domain in genomic order - pattern: "*.{score.png}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - ${prefix}/evaluation/${prefix}.score.png: + type: file + description: BGC detection scores of each Pfam domain in genomic order + pattern: "*.{score.png}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@louperelo" - "@jfy133" diff --git a/modules/nf-core/fargene/environment.yml b/modules/nf-core/fargene/environment.yml index 56629ff4..ade4d770 100644 --- a/modules/nf-core/fargene/environment.yml +++ b/modules/nf-core/fargene/environment.yml @@ -1,7 +1,5 @@ -name: fargene channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::fargene=0.1 diff --git a/modules/nf-core/fargene/meta.yml b/modules/nf-core/fargene/meta.yml index 9fc5ce0f..e1bcc5ea 100644 --- a/modules/nf-core/fargene/meta.yml +++ b/modules/nf-core/fargene/meta.yml @@ -1,5 +1,6 @@ name: fargene -description: tool that takes either fragmented metagenomic data or longer sequences as input and predicts and delivers full-length antiobiotic resistance genes as output. +description: tool that takes either fragmented metagenomic data or longer sequences + as input and predicts and delivers full-length antiobiotic resistance genes as output. keywords: - antibiotic resistance genes - ARGs @@ -8,94 +9,192 @@ keywords: - contigs tools: - fargene: - description: Fragmented Antibiotic Resistance Gene Identifier takes either fragmented metagenomic data or longer sequences as input and predicts and delivers full-length antiobiotic resistance genes as output + description: Fragmented Antibiotic Resistance Gene Identifier takes either fragmented + metagenomic data or longer sequences as input and predicts and delivers full-length + antiobiotic resistance genes as output homepage: https://github.com/fannyhb/fargene documentation: https://github.com/fannyhb/fargene tool_dev_url: https://github.com/fannyhb/fargene licence: ["MIT"] + identifier: biotools:fargene input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: uncompressed fasta file or paired-end fastq files containing either genomes or longer contigs as nucleotide or protein sequences (fasta) or fragmented metagenomic reads (fastq) - pattern: "*.{fasta}" - - hmm_model: - type: string - description: name of custom hidden markov model to be used [pre-defined class_a, class_b_1_2, class_b_3, class_c, class_d_1, class_d_2, qnr, tet_efflux, tet_rpg, tet_enzyme] + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: uncompressed fasta file or paired-end fastq files containing either + genomes or longer contigs as nucleotide or protein sequences (fasta) or fragmented + metagenomic reads (fastq) + pattern: "*.{fasta}" + - - hmm_model: + type: string + description: name of custom hidden markov model to be used [pre-defined class_a, + class_b_1_2, class_b_3, class_c, class_d_1, class_d_2, qnr, tet_efflux, tet_rpg, + tet_enzyme] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - log: - type: file - description: log file - pattern: "*.{log}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.log": + type: file + description: log file + pattern: "*.{log}" - txt: - type: file - description: analysis summary text file - pattern: "*.{txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/results_summary.txt: + type: file + description: analysis summary text file + pattern: "*.{txt}" - hmm: - type: file - description: output from hmmsearch (both single gene annotations + contigs) - pattern: "*.{out}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/hmmsearchresults/*.out: + type: file + description: output from hmmsearch (both single gene annotations + contigs) + pattern: "*.{out}" - hmm_genes: - type: file - description: output from hmmsearch (single gene annotations only) - pattern: "retrieved-*.{out}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/hmmsearchresults/retrieved-*.out: + type: file + description: output from hmmsearch (single gene annotations only) + pattern: "retrieved-*.{out}" - orfs: - type: file - description: open reading frames (ORFs) - pattern: "*.{fasta}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/predictedGenes/predicted-orfs.fasta: + type: file + description: open reading frames (ORFs) + pattern: "*.{fasta}" - orfs_amino: - type: file - description: protein translation of open reading frames (ORFs) - pattern: "*.{fasta}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/predictedGenes/predicted-orfs-amino.fasta: + type: file + description: protein translation of open reading frames (ORFs) + pattern: "*.{fasta}" - contigs: - type: file - description: (complete) contigs that passed the final full-length classification - pattern: "*.{fasta}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/predictedGenes/retrieved-contigs.fasta: + type: file + description: (complete) contigs that passed the final full-length classification + pattern: "*.{fasta}" - contigs_pept: - type: file - description: parts of the contigs that passed the final classification step that aligned with the HMM, as amino acid sequences - pattern: "*.{fasta}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/predictedGenes/retrieved-contigs-peptides.fasta: + type: file + description: parts of the contigs that passed the final classification step + that aligned with the HMM, as amino acid sequences + pattern: "*.{fasta}" - filtered: - type: file - description: sequences that passed the final classification step, but only the parts that where predicted by the HMM to be part of the gene - pattern: "*.{fasta}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/predictedGenes/*filtered.fasta: + type: file + description: sequences that passed the final classification step, but only the + parts that where predicted by the HMM to be part of the gene + pattern: "*.{fasta}" - filtered_pept: - type: file - description: sequences from filtered.fasta, translated in the same frame as the gene is predicted to be located - pattern: "*.{fasta}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/predictedGenes/*filtered-peptides.fasta: + type: file + description: sequences from filtered.fasta, translated in the same frame as + the gene is predicted to be located + pattern: "*.{fasta}" - fragments: - type: file - description: All quality controlled retrieved fragments that were classified as positive, together with its read-pair, gathered in two files - pattern: "*.{fastq}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/retrievedFragments/all_retrieved_*.fastq: + type: file + description: All quality controlled retrieved fragments that were classified + as positive, together with its read-pair, gathered in two files + pattern: "*.{fastq}" - trimmed: - type: file - description: The quality controlled retrieved fragments from each input file. - pattern: "*.{fasta}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/retrievedFragments/trimmedReads/*.fasta: + type: file + description: The quality controlled retrieved fragments from each input file. + pattern: "*.{fasta}" - spades: - type: directory - description: The output from the SPAdes assembly - pattern: "spades_assembly" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/spades_assembly/*: + type: directory + description: The output from the SPAdes assembly + pattern: "spades_assembly" - metagenome: - type: file - description: The FASTQ to FASTA converted input files from metagenomic reads. - pattern: "*.{fasta}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/tmpdir/*.fasta: + type: file + description: The FASTQ to FASTA converted input files from metagenomic reads. + pattern: "*.{fasta}" - tmp: - type: file - description: The from FASTQ to FASTA converted input files and their translated input sequences. Are only saved if option --store-peptides is used. - pattern: "*.{fasta}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/tmpdir/*.out: + type: file + description: The from FASTQ to FASTA converted input files and their translated + input sequences. Are only saved if option --store-peptides is used. + pattern: "*.{fasta}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@louperelo" maintainers: diff --git a/modules/nf-core/gecco/run/environment.yml b/modules/nf-core/gecco/run/environment.yml index 9d7cde8d..7db7dc87 100644 --- a/modules/nf-core/gecco/run/environment.yml +++ b/modules/nf-core/gecco/run/environment.yml @@ -1,7 +1,5 @@ -name: gecco_run channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gecco=0.9.10 diff --git a/modules/nf-core/gecco/run/meta.yml b/modules/nf-core/gecco/run/meta.yml index a2f4a726..6a557cea 100644 --- a/modules/nf-core/gecco/run/meta.yml +++ b/modules/nf-core/gecco/run/meta.yml @@ -1,5 +1,7 @@ name: "gecco_run" -description: GECCO is a fast and scalable method for identifying putative novel Biosynthetic Gene Clusters (BGCs) in genomic and metagenomic data using Conditional Random Fields (CRFs). +description: GECCO is a fast and scalable method for identifying putative novel Biosynthetic + Gene Clusters (BGCs) in genomic and metagenomic data using Conditional Random Fields + (CRFs). keywords: - bgc - detection @@ -13,53 +15,86 @@ tools: tool_dev_url: "https://github.com/zellerlab/GECCO" doi: "10.1101/2021.05.03.442509" licence: ["GPL v3"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: A genomic file containing one or more sequences as input. Input type is any supported by Biopython (fasta, gbk, etc.) - pattern: "*" - - hmm: - type: file - description: Alternative HMM file(s) to use in HMMER format - pattern: "*.hmm" - - model_dir: - type: directory - description: Path to an alternative CRF (Conditional Random Fields) module to use + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: A genomic file containing one or more sequences as input. Input + type is any supported by Biopython (fasta, gbk, etc.) + pattern: "*" + - hmm: + type: file + description: Alternative HMM file(s) to use in HMMER format + pattern: "*.hmm" + - - model_dir: + type: directory + description: Path to an alternative CRF (Conditional Random Fields) module to + use output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - genes: - type: file - description: TSV file containing detected/predicted genes with BGC probability scores. Will not be generated if no hits are found. - pattern: "*.genes.tsv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.genes.tsv": + type: file + description: TSV file containing detected/predicted genes with BGC probability + scores. Will not be generated if no hits are found. + pattern: "*.genes.tsv" - features: - type: file - description: TSV file containing identified domains - pattern: "*.features.tsv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.features.tsv": + type: file + description: TSV file containing identified domains + pattern: "*.features.tsv" - clusters: - type: file - description: TSV file containing coordinates of predicted clusters and BGC types. Will not be generated if no hits are found. - pattern: "*.clusters.tsv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.clusters.tsv": + type: file + description: TSV file containing coordinates of predicted clusters and BGC types. Will + not be generated if no hits are found. + pattern: "*.clusters.tsv" - gbk: - type: file - description: Per cluster GenBank file (if found) containing sequence with annotations. Will not be generated if no hits are found. - pattern: "*.gbk" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_cluster_*.gbk": + type: file + description: Per cluster GenBank file (if found) containing sequence with annotations. + Will not be generated if no hits are found. + pattern: "*.gbk" - json: - type: file - description: AntiSMASH v6 sideload JSON file (if --antismash-sideload) supplied. Will not be generated if no hits are found. - pattern: "*.gbk" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.json": + type: file + description: AntiSMASH v6 sideload JSON file (if --antismash-sideload) supplied. + Will not be generated if no hits are found. + pattern: "*.gbk" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@jfy133" maintainers: diff --git a/modules/nf-core/gunzip/environment.yml b/modules/nf-core/gunzip/environment.yml index dfc02a7b..c7794856 100644 --- a/modules/nf-core/gunzip/environment.yml +++ b/modules/nf-core/gunzip/environment.yml @@ -1,8 +1,6 @@ -name: gunzip channels: - conda-forge - bioconda - - defaults dependencies: - conda-forge::grep=3.11 - conda-forge::sed=4.8 diff --git a/modules/nf-core/gunzip/meta.yml b/modules/nf-core/gunzip/meta.yml index f32973a0..9066c035 100644 --- a/modules/nf-core/gunzip/meta.yml +++ b/modules/nf-core/gunzip/meta.yml @@ -10,25 +10,32 @@ tools: gzip is a file format and a software application used for file compression and decompression. documentation: https://www.gnu.org/software/gzip/manual/gzip.html licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Optional groovy Map containing meta information - e.g. [ id:'test', single_end:false ] - - archive: - type: file - description: File to be compressed/uncompressed - pattern: "*.*" + - - meta: + type: map + description: | + Optional groovy Map containing meta information + e.g. [ id:'test', single_end:false ] + - archive: + type: file + description: File to be compressed/uncompressed + pattern: "*.*" output: - gunzip: - type: file - description: Compressed/uncompressed file - pattern: "*.*" + - meta: + type: file + description: Compressed/uncompressed file + pattern: "*.*" + - $gunzip: + type: file + description: Compressed/uncompressed file + pattern: "*.*" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/hamronization/abricate/environment.yml b/modules/nf-core/hamronization/abricate/environment.yml index 75f349f1..791b9c96 100644 --- a/modules/nf-core/hamronization/abricate/environment.yml +++ b/modules/nf-core/hamronization/abricate/environment.yml @@ -1,7 +1,5 @@ -name: hamronization_abricate channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::hamronization=1.1.4 diff --git a/modules/nf-core/hamronization/abricate/meta.yml b/modules/nf-core/hamronization/abricate/meta.yml index 4a0867d6..b1346892 100644 --- a/modules/nf-core/hamronization/abricate/meta.yml +++ b/modules/nf-core/hamronization/abricate/meta.yml @@ -1,5 +1,6 @@ name: "hamronization_abricate" -description: Tool to convert and summarize ABRicate outputs using the hAMRonization specification +description: Tool to convert and summarize ABRicate outputs using the hAMRonization + specification keywords: - amr - antimicrobial resistance @@ -7,51 +8,61 @@ keywords: - abricate tools: - "hamronization": - description: "Tool to convert and summarize AMR gene detection outputs using the hAMRonization specification" + description: "Tool to convert and summarize AMR gene detection outputs using the + hAMRonization specification" homepage: "https://github.com/pha4ge/hAMRonization/" documentation: "https://github.com/pha4ge/hAMRonization/" tool_dev_url: "https://github.com/pha4ge/hAMRonization" licence: ["GNU Lesser General Public v3 (LGPL v3)"] + identifier: biotools:hamronization input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - report: - type: file - description: Output TSV or CSV file from ABRicate - pattern: "*.{csv,tsv}" - - format: - type: string - description: Type of report file to be produced - pattern: "tsv|json" - - software_version: - type: string - description: Version of ABRicate used - pattern: "[0-9].[0-9].[0-9]" - - reference_db_version: - type: string - description: Database version of ABRicate used - pattern: "[0-9][0-9][0-9][0-9]-[A-Z][a-z][a-z]-[0-9][0-9]" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - report: + type: file + description: Output TSV or CSV file from ABRicate + pattern: "*.{csv,tsv}" + - - format: + type: string + description: Type of report file to be produced + pattern: "tsv|json" + - - software_version: + type: string + description: Version of ABRicate used + pattern: "[0-9].[0-9].[0-9]" + - - reference_db_version: + type: string + description: Database version of ABRicate used + pattern: "[0-9][0-9][0-9][0-9]-[A-Z][a-z][a-z]-[0-9][0-9]" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - json: - type: file - description: hAMRonised report in JSON format - pattern: "*.json" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.json": + type: file + description: hAMRonised report in JSON format + pattern: "*.json" - tsv: - type: file - description: hAMRonised report in TSV format - pattern: "*.json" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tsv": + type: file + description: hAMRonised report in TSV format + pattern: "*.json" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@jasmezz" maintainers: diff --git a/modules/nf-core/hamronization/amrfinderplus/environment.yml b/modules/nf-core/hamronization/amrfinderplus/environment.yml index 2f9cb27f..791b9c96 100644 --- a/modules/nf-core/hamronization/amrfinderplus/environment.yml +++ b/modules/nf-core/hamronization/amrfinderplus/environment.yml @@ -1,7 +1,5 @@ -name: hamronization_amrfinderplus channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::hamronization=1.1.4 diff --git a/modules/nf-core/hamronization/amrfinderplus/meta.yml b/modules/nf-core/hamronization/amrfinderplus/meta.yml index c0997150..aba55b1f 100644 --- a/modules/nf-core/hamronization/amrfinderplus/meta.yml +++ b/modules/nf-core/hamronization/amrfinderplus/meta.yml @@ -1,5 +1,6 @@ name: "hamronization_amrfinderplus" -description: Tool to convert and summarize AMRfinderPlus outputs using the hAMRonization specification. +description: Tool to convert and summarize AMRfinderPlus outputs using the hAMRonization + specification. keywords: - amr - antimicrobial resistance @@ -9,51 +10,61 @@ keywords: - amrfinderplus tools: - "hamronization": - description: "Tool to convert and summarize AMR gene detection outputs using the hAMRonization specification" + description: "Tool to convert and summarize AMR gene detection outputs using the + hAMRonization specification" homepage: "https://github.com/pha4ge/hAMRonization/" documentation: "https://github.com/pha4ge/hAMRonization/" tool_dev_url: "https://github.com/pha4ge/hAMRonization" licence: ["GNU Lesser General Public v3 (LGPL v3)"] + identifier: biotools:hamronization input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - report: - type: file - description: Output .tsv file from AMRfinderPlus - pattern: "*.tsv" - - format: - type: string - description: Type of report file to be produced - pattern: "tsv|json" - - software_version: - type: string - description: Version of AMRfinder used - pattern: "[0-9].[0-9].[0-9]" - - reference_db_version: - type: string - description: Database version of ncbi_AMRfinder used - pattern: "[0-9]-[0-9]-[0-9].[0-9]" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - report: + type: file + description: Output .tsv file from AMRfinderPlus + pattern: "*.tsv" + - - format: + type: string + description: Type of report file to be produced + pattern: "tsv|json" + - - software_version: + type: string + description: Version of AMRfinder used + pattern: "[0-9].[0-9].[0-9]" + - - reference_db_version: + type: string + description: Database version of ncbi_AMRfinder used + pattern: "[0-9]-[0-9]-[0-9].[0-9]" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - json: - type: file - description: hAMRonised report in JSON format - pattern: "*.json" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.json": + type: file + description: hAMRonised report in JSON format + pattern: "*.json" - tsv: - type: file - description: hAMRonised report in TSV format - pattern: "*.tsv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tsv": + type: file + description: hAMRonised report in TSV format + pattern: "*.tsv" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@louperelo" maintainers: diff --git a/modules/nf-core/hamronization/deeparg/environment.yml b/modules/nf-core/hamronization/deeparg/environment.yml index c9db54c6..791b9c96 100644 --- a/modules/nf-core/hamronization/deeparg/environment.yml +++ b/modules/nf-core/hamronization/deeparg/environment.yml @@ -1,7 +1,5 @@ -name: hamronization_deeparg channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::hamronization=1.1.4 diff --git a/modules/nf-core/hamronization/deeparg/meta.yml b/modules/nf-core/hamronization/deeparg/meta.yml index de01196e..39149a34 100644 --- a/modules/nf-core/hamronization/deeparg/meta.yml +++ b/modules/nf-core/hamronization/deeparg/meta.yml @@ -1,5 +1,6 @@ name: hamronization_deeparg -description: Tool to convert and summarize DeepARG outputs using the hAMRonization specification +description: Tool to convert and summarize DeepARG outputs using the hAMRonization + specification keywords: - amr - antimicrobial resistance @@ -7,51 +8,61 @@ keywords: - deeparg tools: - hamronization: - description: Tool to convert and summarize AMR gene detection outputs using the hAMRonization specification + description: Tool to convert and summarize AMR gene detection outputs using the + hAMRonization specification homepage: https://github.com/pha4ge/hAMRonization/ documentation: https://github.com/pha4ge/hAMRonization/ tool_dev_url: https://github.com/pha4ge/hAMRonization licence: ["GNU Lesser General Public v3 (LGPL v3)"] + identifier: biotools:hamronization input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - report: - type: file - description: Output .mapping.ARG file from DeepARG - pattern: "*.mapping.ARG" - - format: - type: string - description: Type of report file to be produced - pattern: "tsv|json" - - software_version: - type: string - description: Version of DeepARG used - pattern: "[0-9].[0-9].[0-9]" - - reference_db_version: - type: integer - description: Database version of DeepARG used - pattern: "[0-9]" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - report: + type: file + description: Output .mapping.ARG file from DeepARG + pattern: "*.mapping.ARG" + - - format: + type: string + description: Type of report file to be produced + pattern: "tsv|json" + - - software_version: + type: string + description: Version of DeepARG used + pattern: "[0-9].[0-9].[0-9]" + - - reference_db_version: + type: integer + description: Database version of DeepARG used + pattern: "[0-9]" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - json: - type: file - description: hAMRonised report in JSON format - pattern: "*.json" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.json": + type: file + description: hAMRonised report in JSON format + pattern: "*.json" - tsv: - type: file - description: hAMRonised report in TSV format - pattern: "*.json" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tsv": + type: file + description: hAMRonised report in TSV format + pattern: "*.json" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@jfy133" maintainers: diff --git a/modules/nf-core/hamronization/fargene/environment.yml b/modules/nf-core/hamronization/fargene/environment.yml index 6507e7d4..791b9c96 100644 --- a/modules/nf-core/hamronization/fargene/environment.yml +++ b/modules/nf-core/hamronization/fargene/environment.yml @@ -1,7 +1,5 @@ -name: hamronization_fargene channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::hamronization=1.1.4 diff --git a/modules/nf-core/hamronization/fargene/meta.yml b/modules/nf-core/hamronization/fargene/meta.yml index 45a3811d..efd3de36 100644 --- a/modules/nf-core/hamronization/fargene/meta.yml +++ b/modules/nf-core/hamronization/fargene/meta.yml @@ -1,5 +1,6 @@ name: "hamronization_fargene" -description: Tool to convert and summarize fARGene outputs using the hAMRonization specification +description: Tool to convert and summarize fARGene outputs using the hAMRonization + specification keywords: - amr - antimicrobial resistance @@ -9,51 +10,61 @@ keywords: - fARGene tools: - hamronization: - description: "Tool to convert and summarize AMR gene detection outputs using the hAMRonization specification" + description: "Tool to convert and summarize AMR gene detection outputs using the + hAMRonization specification" homepage: "https://github.com/pha4ge/hAMRonization/" documentation: "https://github.com/pha4ge/hAMRonization/" tool_dev_url: "https://github.com/pha4ge/hAMRonization" licence: ["GNU Lesser General Public v3 (LGPL v3)"] + identifier: biotools:hamronization input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - report: - type: file - description: Output .txt file from fARGene - pattern: "*.txt" - - format: - type: string - description: Type of report file to be produced - pattern: "tsv|json" - - software_version: - type: string - description: Version of fARGene used - pattern: "[0-9].[0-9].[0-9]" - - reference_db_version: - type: string - description: Database version of fARGene used - pattern: "[0-9].[0-9].[0-9]" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - report: + type: file + description: Output .txt file from fARGene + pattern: "*.txt" + - - format: + type: string + description: Type of report file to be produced + pattern: "tsv|json" + - - software_version: + type: string + description: Version of fARGene used + pattern: "[0-9].[0-9].[0-9]" + - - reference_db_version: + type: string + description: Database version of fARGene used + pattern: "[0-9].[0-9].[0-9]" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - json: - type: file - description: hAMRonised report in JSON format - pattern: "*.json" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.json": + type: file + description: hAMRonised report in JSON format + pattern: "*.json" - tsv: - type: file - description: hAMRonised report in TSV format - pattern: "*.json" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tsv": + type: file + description: hAMRonised report in TSV format + pattern: "*.json" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@jfy133" maintainers: diff --git a/modules/nf-core/hamronization/rgi/environment.yml b/modules/nf-core/hamronization/rgi/environment.yml index 91d03e49..791b9c96 100644 --- a/modules/nf-core/hamronization/rgi/environment.yml +++ b/modules/nf-core/hamronization/rgi/environment.yml @@ -1,7 +1,5 @@ -name: hamronization_rgi channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::hamronization=1.1.4 diff --git a/modules/nf-core/hamronization/rgi/meta.yml b/modules/nf-core/hamronization/rgi/meta.yml index 0cca8502..525148e5 100644 --- a/modules/nf-core/hamronization/rgi/meta.yml +++ b/modules/nf-core/hamronization/rgi/meta.yml @@ -9,51 +9,61 @@ keywords: - rgi tools: - hamronization: - description: "Tool to convert and summarize AMR gene detection outputs using the hAMRonization specification" + description: "Tool to convert and summarize AMR gene detection outputs using the + hAMRonization specification" homepage: "https://github.com/pha4ge/hAMRonization/" documentation: "https://github.com/pha4ge/hAMRonization/" tool_dev_url: "https://github.com/pha4ge/hAMRonization" licence: ["GNU Lesser General Public v3 (LGPL v3)"] + identifier: biotools:hamronization input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - report: - type: file - description: Output .txt file from RGI - pattern: "*.txt" - - format: - type: string - description: Type of report file to be produced - pattern: "tsv|json" - - software_version: - type: string - description: Version of DeepARG used - pattern: "[0-9].[0-9].[0-9]" - - reference_db_version: - type: string - description: Database version of DeepARG used - pattern: "[0-9].[0-9].[0-9]" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - report: + type: file + description: Output .txt file from RGI + pattern: "*.txt" + - - format: + type: string + description: Type of report file to be produced + pattern: "tsv|json" + - - software_version: + type: string + description: Version of DeepARG used + pattern: "[0-9].[0-9].[0-9]" + - - reference_db_version: + type: string + description: Database version of DeepARG used + pattern: "[0-9].[0-9].[0-9]" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - json: - type: file - description: hAMRonised report in JSON format - pattern: "*.json" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.json": + type: file + description: hAMRonised report in JSON format + pattern: "*.json" - tsv: - type: file - description: hAMRonised report in TSV format - pattern: "*.json" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tsv": + type: file + description: hAMRonised report in TSV format + pattern: "*.json" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@louperelo" maintainers: diff --git a/modules/nf-core/hamronization/summarize/environment.yml b/modules/nf-core/hamronization/summarize/environment.yml index 1872a689..791b9c96 100644 --- a/modules/nf-core/hamronization/summarize/environment.yml +++ b/modules/nf-core/hamronization/summarize/environment.yml @@ -1,7 +1,5 @@ -name: hamronization_summarize channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::hamronization=1.1.4 diff --git a/modules/nf-core/hamronization/summarize/meta.yml b/modules/nf-core/hamronization/summarize/meta.yml index 7d4c7b68..54ceeff3 100644 --- a/modules/nf-core/hamronization/summarize/meta.yml +++ b/modules/nf-core/hamronization/summarize/meta.yml @@ -1,42 +1,49 @@ name: hamronization_summarize -description: Tool to summarize and combine all hAMRonization reports into a single file +description: Tool to summarize and combine all hAMRonization reports into a single + file keywords: - amr - antimicrobial resistance - reporting tools: - hamronization: - description: Tool to convert and summarize AMR gene detection outputs using the hAMRonization specification + description: Tool to convert and summarize AMR gene detection outputs using the + hAMRonization specification homepage: https://github.com/pha4ge/hAMRonization/ documentation: https://github.com/pha4ge/hAMRonization/ tool_dev_url: https://github.com/pha4ge/hAMRonization licence: ["GNU Lesser General Public v3 (LGPL v3)"] + identifier: biotools:hamronization input: - - reports: - type: file - description: List of multiple hAMRonization reports in either JSON or TSV format - pattern: "*.{json,tsv}" - - format: - type: string - description: Type of final combined report file to be produced - pattern: "tsv|json|interactive" + - - reports: + type: file + description: List of multiple hAMRonization reports in either JSON or TSV format + pattern: "*.{json,tsv}" + - - format: + type: string + description: Type of final combined report file to be produced + pattern: "tsv|json|interactive" output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - json: - type: file - description: hAMRonised summary in JSON format - pattern: "*.json" + - hamronization_combined_report.json: + type: file + description: hAMRonised summary in JSON format + pattern: "*.json" - tsv: - type: file - description: hAMRonised summary in TSV format - pattern: "*.json" + - hamronization_combined_report.tsv: + type: file + description: hAMRonised summary in TSV format + pattern: "*.json" - html: - type: file - description: hAMRonised summary in HTML format - pattern: "*.html" + - hamronization_combined_report.html: + type: file + description: hAMRonised summary in HTML format + pattern: "*.html" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@jfy133" maintainers: diff --git a/modules/nf-core/hmmer/hmmsearch/environment.yml b/modules/nf-core/hmmer/hmmsearch/environment.yml index d672c2b3..c5ddec5d 100644 --- a/modules/nf-core/hmmer/hmmsearch/environment.yml +++ b/modules/nf-core/hmmer/hmmsearch/environment.yml @@ -1,7 +1,5 @@ -name: hmmer_hmmsearch channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::hmmer=3.4 diff --git a/modules/nf-core/hmmer/hmmsearch/meta.yml b/modules/nf-core/hmmer/hmmsearch/meta.yml index 39893c3b..0e078659 100644 --- a/modules/nf-core/hmmer/hmmsearch/meta.yml +++ b/modules/nf-core/hmmer/hmmsearch/meta.yml @@ -13,55 +13,79 @@ tools: tool_dev_url: https://github.com/EddyRivasLab/hmmer doi: "10.1371/journal.pcbi.1002195" licence: ["BSD"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - hmmfile: - type: file - description: One or more HMM profiles created with hmmbuild - pattern: "*.{hmm,hmm.gz}" - - seqdb: - type: file - description: Database of sequences in FASTA format - pattern: "*.{fasta,fna,faa,fa,fasta.gz,fna.gz,faa.gz,fa.gz}" - - write_align: - type: boolean - description: Flag to save optional alignment output. Specify with 'true' to save. - - write_target: - type: boolean - description: Flag to save optional per target summary. Specify with 'true' to save. - - write_domain: - type: boolean - description: Flag to save optional per domain summary. Specify with 'true' to save. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - hmmfile: + type: file + description: One or more HMM profiles created with hmmbuild + pattern: "*.{hmm,hmm.gz}" + - seqdb: + type: file + description: Database of sequences in FASTA format + pattern: "*.{fasta,fna,faa,fa,fasta.gz,fna.gz,faa.gz,fa.gz}" + - write_align: + type: boolean + description: Flag to save optional alignment output. Specify with 'true' to + save. + - write_target: + type: boolean + description: Flag to save optional per target summary. Specify with 'true' to + save. + - write_domain: + type: boolean + description: Flag to save optional per domain summary. Specify with 'true' to + save. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - output: - type: file - description: Human readable output summarizing hmmsearch results - pattern: "*.{txt.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.txt.gz": + type: file + description: Human readable output summarizing hmmsearch results + pattern: "*.{txt.gz}" - alignments: - type: file - description: Optional multiple sequence alignment (MSA) in Stockholm format - pattern: "*.{sto.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sto.gz": + type: file + description: Optional multiple sequence alignment (MSA) in Stockholm format + pattern: "*.{sto.gz}" - target_summary: - type: file - description: Optional tabular (space-delimited) summary of per-target output - pattern: "*.{tbl.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tbl.gz": + type: file + description: Optional tabular (space-delimited) summary of per-target output + pattern: "*.{tbl.gz}" - domain_summary: - type: file - description: Optional tabular (space-delimited) summary of per-domain output - pattern: "*.{domtbl.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.domtbl.gz": + type: file + description: Optional tabular (space-delimited) summary of per-domain output + pattern: "*.{domtbl.gz}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@Midnighter" maintainers: diff --git a/modules/nf-core/macrel/contigs/environment.yml b/modules/nf-core/macrel/contigs/environment.yml index e6c11226..bb5ce1a6 100644 --- a/modules/nf-core/macrel/contigs/environment.yml +++ b/modules/nf-core/macrel/contigs/environment.yml @@ -1,7 +1,5 @@ -name: macrel_contigs channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::macrel=1.2.0 + - bioconda::macrel=1.4.0 diff --git a/modules/nf-core/macrel/contigs/main.nf b/modules/nf-core/macrel/contigs/main.nf index 6b62a868..b8f8f522 100644 --- a/modules/nf-core/macrel/contigs/main.nf +++ b/modules/nf-core/macrel/contigs/main.nf @@ -4,8 +4,8 @@ process MACREL_CONTIGS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/macrel:1.2.0--pyh5e36f6f_0': - 'biocontainers/macrel:1.2.0--pyh5e36f6f_0' }" + 'https://depot.galaxyproject.org/singularity/macrel:1.4.0--pyh7e72e81_0': + 'biocontainers/macrel:1.4.0--pyh7e72e81_0' }" input: tuple val(meta), path(fasta) @@ -35,6 +35,24 @@ process MACREL_CONTIGS { gzip --no-name ${prefix}/*.faa + cat <<-END_VERSIONS > versions.yml + "${task.process}": + macrel: \$(echo \$(macrel --version | sed 's/macrel //g')) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir ${prefix} + + touch ${prefix}/${prefix}_log.txt + echo | gzip > ${prefix}/${prefix}.smorfs.faa.gz + echo | gzip > ${prefix}/${prefix}.all_orfs.faa.gz + echo | gzip > ${prefix}/${prefix}.prediction.gz + touch ${prefix}/${prefix}.md + + cat <<-END_VERSIONS > versions.yml "${task.process}": macrel: \$(echo \$(macrel --version | sed 's/macrel //g')) diff --git a/modules/nf-core/macrel/contigs/meta.yml b/modules/nf-core/macrel/contigs/meta.yml index ba0b0e6f..c1c03f42 100644 --- a/modules/nf-core/macrel/contigs/meta.yml +++ b/modules/nf-core/macrel/contigs/meta.yml @@ -1,5 +1,7 @@ name: macrel_contigs -description: A tool that mines antimicrobial peptides (AMPs) from (meta)genomes by predicting peptides from genomes (provided as contigs) and outputs all the predicted anti-microbial peptides found. +description: A tool that mines antimicrobial peptides (AMPs) from (meta)genomes by + predicting peptides from genomes (provided as contigs) and outputs all the predicted + anti-microbial peptides found. keywords: - AMP - antimicrobial peptides @@ -14,46 +16,76 @@ tools: tool_dev_url: https://github.com/BigDataBiology/macrel doi: "10.7717/peerj.10555" licence: ["MIT"] + identifier: biotools:macrel input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: A fasta file with nucleotide sequences. - pattern: "*.{fasta,fa,fna,fasta.gz,fa.gz,fna.gz}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: A fasta file with nucleotide sequences. + pattern: "*.{fasta,fa,fna,fasta.gz,fa.gz,fna.gz}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - amp_prediction: - type: file - description: A zipped file, with all predicted amps in a table format. - pattern: "*.prediction.gz" - smorfs: - type: file - description: A zipped fasta file containing aminoacid sequences showing the general gene prediction information in the contigs. - pattern: "*.smorfs.faa.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*/*.smorfs.faa.gz": + type: file + description: A zipped fasta file containing aminoacid sequences showing the + general gene prediction information in the contigs. + pattern: "*.smorfs.faa.gz" - all_orfs: - type: file - description: A zipped fasta file containing amino acid sequences showing the general gene prediction information in the contigs. - pattern: "*.all_orfs.faa.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*/*.all_orfs.faa.gz": + type: file + description: A zipped fasta file containing amino acid sequences showing the + general gene prediction information in the contigs. + pattern: "*.all_orfs.faa.gz" + - amp_prediction: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*/*.prediction.gz": + type: file + description: A zipped file, with all predicted amps in a table format. + pattern: "*.prediction.gz" - readme_file: - type: file - description: A readme file containing tool specific information (e.g. citations, details about the output, etc.). - pattern: "*.md" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*/*.md": + type: file + description: A readme file containing tool specific information (e.g. citations, + details about the output, etc.). + pattern: "*.md" - log_file: - type: file - description: A log file containing the information pertaining to the run. - pattern: "*_log.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*/*_log.txt": + type: file + description: A log file containing the information pertaining to the run. + pattern: "*_log.txt" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@darcy220606" maintainers: diff --git a/modules/nf-core/macrel/contigs/tests/main.nf.test b/modules/nf-core/macrel/contigs/tests/main.nf.test new file mode 100644 index 00000000..5b641b1e --- /dev/null +++ b/modules/nf-core/macrel/contigs/tests/main.nf.test @@ -0,0 +1,66 @@ + +nextflow_process { + + name "Test Process MACREL_CONTIGS" + script "../main.nf" + process "MACREL_CONTIGS" + + tag "modules" + tag "modules_nfcore" + tag "macrel" + tag "macrel/contigs" + + test("test-macrel-contigs") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/illumina/fasta/test1.contigs.fa.gz', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.smorfs, + path(process.out.all_orfs[0][1]).linesGzip[0], + process.out.amp_prediction, + process.out.readme_file, + file(process.out.log_file[0][1]).name, + process.out.versions + ).match() + } + ) + } + } + + test("test-macrel-contigs-stub") { + options '-stub' + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/illumina/fasta/test1.contigs.fa.gz', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/macrel/contigs/tests/main.nf.test.snap b/modules/nf-core/macrel/contigs/tests/main.nf.test.snap new file mode 100644 index 00000000..3908c49c --- /dev/null +++ b/modules/nf-core/macrel/contigs/tests/main.nf.test.snap @@ -0,0 +1,150 @@ +{ + "test-macrel-contigs": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.smorfs.faa.gz:md5,2433037a55de266a1203759834849669" + ] + ], + ">k141_0_1 # 235 # 468 # -1 # ID=1_1;partial=00;start_type=ATG;rbs_motif=None;rbs_spacer=None;gc_cont=0.333", + [ + [ + { + "id": "test", + "single_end": false + }, + "test.prediction.gz:md5,c929d870dc197f9d5d36d3d5f683cbf4" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "README.md:md5,cf088d9256ff7b7730699f17b64b4028" + ] + ], + "test_log.txt", + [ + "versions.yml:md5,ab072d9245c9b28a8bc694e98795c924" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-30T20:48:49.632715" + }, + "test-macrel-contigs-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.smorfs.faa.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.all_orfs.faa.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.prediction.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.md:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + "versions.yml:md5,ab072d9245c9b28a8bc694e98795c924" + ], + "all_orfs": [ + [ + { + "id": "test", + "single_end": false + }, + "test.all_orfs.faa.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "amp_prediction": [ + [ + { + "id": "test", + "single_end": false + }, + "test.prediction.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "log_file": [ + [ + { + "id": "test", + "single_end": false + }, + "test_log.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "readme_file": [ + [ + { + "id": "test", + "single_end": false + }, + "test.md:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "smorfs": [ + [ + { + "id": "test", + "single_end": false + }, + "test.smorfs.faa.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,ab072d9245c9b28a8bc694e98795c924" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-30T20:50:42.040416" + } +} \ No newline at end of file diff --git a/modules/nf-core/mmseqs/createdb/environment.yml b/modules/nf-core/mmseqs/createdb/environment.yml index 77b28f59..18547591 100644 --- a/modules/nf-core/mmseqs/createdb/environment.yml +++ b/modules/nf-core/mmseqs/createdb/environment.yml @@ -1,7 +1,5 @@ -name: mmseqs_createdb channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::mmseqs2=15.6f452 diff --git a/modules/nf-core/mmseqs/createdb/meta.yml b/modules/nf-core/mmseqs/createdb/meta.yml index a011020b..c392a360 100644 --- a/modules/nf-core/mmseqs/createdb/meta.yml +++ b/modules/nf-core/mmseqs/createdb/meta.yml @@ -1,4 +1,3 @@ ---- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json name: "mmseqs_createdb" description: Create an MMseqs database from an existing FASTA/Q file @@ -11,35 +10,40 @@ keywords: - mmseqs2 tools: - "mmseqs": - description: "MMseqs2: ultra fast and sensitive sequence search and clustering suite" + description: "MMseqs2: ultra fast and sensitive sequence search and clustering + suite" homepage: "https://github.com/soedinglab/MMseqs2" documentation: "https://mmseqs.com/latest/userguide.pdf" tool_dev_url: "https://github.com/soedinglab/MMseqs2" doi: "10.1093/bioinformatics/btw006" licence: ["GPL v3"] + identifier: biotools:mmseqs input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', single_end:false ]` - - sequence: - type: file - description: Input sequences in FASTA/Q (zipped or unzipped) format to parse into an mmseqs database - pattern: "*.{fasta,fasta.gz,fa,fa.gz,fna,fna.gz,fastq,fastq.gz,fq,fq.gz}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - sequence: + type: file + description: Input sequences in FASTA/Q (zipped or unzipped) format to parse + into an mmseqs database + pattern: "*.{fasta,fasta.gz,fa,fa.gz,fna,fna.gz,fastq,fastq.gz,fq,fq.gz}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', single_end:false ]` - db: - type: directory - description: The created MMseqs2 database + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - ${prefix}/: + type: directory + description: The created MMseqs2 database - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@Joon-Klaps" maintainers: diff --git a/modules/nf-core/mmseqs/createtsv/environment.yml b/modules/nf-core/mmseqs/createtsv/environment.yml index 4840fc02..18547591 100644 --- a/modules/nf-core/mmseqs/createtsv/environment.yml +++ b/modules/nf-core/mmseqs/createtsv/environment.yml @@ -1,7 +1,5 @@ -name: mmseqs_createtsv channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::mmseqs2=15.6f452 diff --git a/modules/nf-core/mmseqs/createtsv/meta.yml b/modules/nf-core/mmseqs/createtsv/meta.yml index e85b066f..5a50ff34 100644 --- a/modules/nf-core/mmseqs/createtsv/meta.yml +++ b/modules/nf-core/mmseqs/createtsv/meta.yml @@ -1,7 +1,7 @@ ---- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json name: "mmseqs_createtsv" -description: Create a tsv file from a query and a target database as well as the result database +description: Create a tsv file from a query and a target database as well as the result + database keywords: - protein sequence - databases @@ -12,53 +12,58 @@ keywords: - tsv tools: - "mmseqs": - description: "MMseqs2: ultra fast and sensitive sequence search and clustering suite" + description: "MMseqs2: ultra fast and sensitive sequence search and clustering + suite" homepage: "https://github.com/soedinglab/MMseqs2" documentation: "https://mmseqs.com/latest/userguide.pdf" tool_dev_url: "https://github.com/soedinglab/MMseqs2" doi: "10.1093/bioinformatics/btw006" licence: ["GPL v3"] + identifier: biotools:mmseqs input: # Only when we have meta - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', single_end:false ]` - - db_result: - type: directory - description: an MMseqs2 database with result data - - meta2: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', single_end:false ]` - - db_query: - type: directory - description: an MMseqs2 database with query data - - meta3: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', single_end:false ]` - - db_target: - type: directory - description: an MMseqs2 database with target data + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - db_result: + type: directory + description: an MMseqs2 database with result data + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - db_query: + type: directory + description: an MMseqs2 database with query data + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - db_target: + type: directory + description: an MMseqs2 database with target data output: #Only when we have meta - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', single_end:false ]` - tsv: - type: file - description: The resulting tsv file created using the query, target and result MMseqs databases - pattern: "*.{tsv}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*.tsv": + type: file + description: The resulting tsv file created using the query, target and result + MMseqs databases + pattern: "*.{tsv}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@Joon-Klaps" maintainers: diff --git a/modules/nf-core/mmseqs/databases/environment.yml b/modules/nf-core/mmseqs/databases/environment.yml index 3bf8437d..18547591 100644 --- a/modules/nf-core/mmseqs/databases/environment.yml +++ b/modules/nf-core/mmseqs/databases/environment.yml @@ -1,7 +1,5 @@ -name: mmseqs_databases channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::mmseqs2=15.6f452 diff --git a/modules/nf-core/mmseqs/databases/main.nf b/modules/nf-core/mmseqs/databases/main.nf index 3e228b29..d43681ce 100644 --- a/modules/nf-core/mmseqs/databases/main.nf +++ b/modules/nf-core/mmseqs/databases/main.nf @@ -11,8 +11,8 @@ process MMSEQS_DATABASES { val database output: - path "${prefix}/" , emit: database - path "versions.yml" , emit: versions + path "${prefix}/" , emit: database + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when diff --git a/modules/nf-core/mmseqs/databases/meta.yml b/modules/nf-core/mmseqs/databases/meta.yml index 803a87f6..be9380fb 100644 --- a/modules/nf-core/mmseqs/databases/meta.yml +++ b/modules/nf-core/mmseqs/databases/meta.yml @@ -1,4 +1,3 @@ ---- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json name: "mmseqs_databases" description: Download an mmseqs-formatted database @@ -9,24 +8,29 @@ keywords: - searching tools: - "mmseqs": - description: "MMseqs2: ultra fast and sensitive sequence search and clustering suite" + description: "MMseqs2: ultra fast and sensitive sequence search and clustering + suite" homepage: "https://github.com/soedinglab/MMseqs2" documentation: "https://mmseqs.com/latest/userguide.pdf" tool_dev_url: "https://github.com/soedinglab/MMseqs2" doi: "10.1093/bioinformatics/btw006" licence: ["GPL v3"] + identifier: biotools:mmseqs input: - - database: - type: string - description: Database available through the mmseqs2 databases interface - see https://github.com/soedinglab/MMseqs2/wiki#downloading-databases for details + - - database: + type: string + description: Database available through the mmseqs2 databases interface - see + https://github.com/soedinglab/MMseqs2/wiki#downloading-databases for details output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - database: - type: directory - description: Directory containing processed mmseqs database + - ${prefix}/: + type: directory + description: Directory containing processed mmseqs database + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@prototaxites" maintainers: diff --git a/modules/nf-core/mmseqs/databases/tests/main.nf.test b/modules/nf-core/mmseqs/databases/tests/main.nf.test new file mode 100644 index 00000000..3fe5d200 --- /dev/null +++ b/modules/nf-core/mmseqs/databases/tests/main.nf.test @@ -0,0 +1,55 @@ + +nextflow_process { + + name "Test Process MMSEQS_DATABASES" + script "../main.nf" + process "MMSEQS_DATABASES" + + tag "modules" + tag "modules_nfcore" + tag "mmseqs" + tag "mmseqs/databases" + + test("test-mmseqs-databases") { + + when { + process { + """ + input[0] = "SILVA" + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.database[0]).listFiles().collect { it.name }.toSorted(), // unstable + process.out.versions + ).match() + } + ) + } + } + + test("test-mmseqs-databases-stub") { + options '-stub' + when { + process { + """ + input[0] = "SILVA" + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/mmseqs/databases/tests/main.nf.test.snap b/modules/nf-core/mmseqs/databases/tests/main.nf.test.snap new file mode 100644 index 00000000..00d3003e --- /dev/null +++ b/modules/nf-core/mmseqs/databases/tests/main.nf.test.snap @@ -0,0 +1,74 @@ +{ + "test-mmseqs-databases": { + "content": [ + [ + "database", + "database.dbtype", + "database.index", + "database.lookup", + "database.source", + "database.version", + "database_h", + "database_h.dbtype", + "database_h.index", + "database_mapping", + "database_taxonomy" + ], + [ + "versions.yml:md5,b038db45e5934b8f0f743449bbac01b4" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-06T15:43:58.454012" + }, + "test-mmseqs-databases-stub": { + "content": [ + { + "0": [ + [ + "database:md5,d41d8cd98f00b204e9800998ecf8427e", + "database.dbtype:md5,d41d8cd98f00b204e9800998ecf8427e", + "database.index:md5,d41d8cd98f00b204e9800998ecf8427e", + "database.lookup:md5,d41d8cd98f00b204e9800998ecf8427e", + "database.source:md5,d41d8cd98f00b204e9800998ecf8427e", + "database.version:md5,d41d8cd98f00b204e9800998ecf8427e", + "database_h:md5,d41d8cd98f00b204e9800998ecf8427e", + "database_h.dbtype:md5,d41d8cd98f00b204e9800998ecf8427e", + "database_h.index:md5,d41d8cd98f00b204e9800998ecf8427e", + "database_mapping:md5,d41d8cd98f00b204e9800998ecf8427e", + "database_taxonomy:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,49082428ec974e4ddb09a6ca2e9f21b3" + ], + "database": [ + [ + "database:md5,d41d8cd98f00b204e9800998ecf8427e", + "database.dbtype:md5,d41d8cd98f00b204e9800998ecf8427e", + "database.index:md5,d41d8cd98f00b204e9800998ecf8427e", + "database.lookup:md5,d41d8cd98f00b204e9800998ecf8427e", + "database.source:md5,d41d8cd98f00b204e9800998ecf8427e", + "database.version:md5,d41d8cd98f00b204e9800998ecf8427e", + "database_h:md5,d41d8cd98f00b204e9800998ecf8427e", + "database_h.dbtype:md5,d41d8cd98f00b204e9800998ecf8427e", + "database_h.index:md5,d41d8cd98f00b204e9800998ecf8427e", + "database_mapping:md5,d41d8cd98f00b204e9800998ecf8427e", + "database_taxonomy:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,49082428ec974e4ddb09a6ca2e9f21b3" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T17:00:20.527628" + } +} \ No newline at end of file diff --git a/modules/nf-core/mmseqs/taxonomy/environment.yml b/modules/nf-core/mmseqs/taxonomy/environment.yml index fa40c277..65f1e5cd 100644 --- a/modules/nf-core/mmseqs/taxonomy/environment.yml +++ b/modules/nf-core/mmseqs/taxonomy/environment.yml @@ -1,9 +1,7 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "mmseqs_taxonomy" channels: - conda-forge - bioconda - - defaults dependencies: - "bioconda::mmseqs2=15.6f452" diff --git a/modules/nf-core/mmseqs/taxonomy/meta.yml b/modules/nf-core/mmseqs/taxonomy/meta.yml index d836029c..15756feb 100644 --- a/modules/nf-core/mmseqs/taxonomy/meta.yml +++ b/modules/nf-core/mmseqs/taxonomy/meta.yml @@ -1,7 +1,7 @@ ---- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json name: "mmseqs_taxonomy" -description: Computes the lowest common ancestor by identifying the query sequence homologs against the target database. +description: Computes the lowest common ancestor by identifying the query sequence + homologs against the target database. keywords: - protein sequence - nucleotide sequence @@ -11,37 +11,41 @@ keywords: - mmseqs2 tools: - "mmseqs": - description: "MMseqs2: ultra fast and sensitive sequence search and clustering suite" + description: "MMseqs2: ultra fast and sensitive sequence search and clustering + suite" homepage: "https://github.com/soedinglab/MMseqs2" documentation: "https://mmseqs.com/latest/userguide.pdf" tool_dev_url: "https://github.com/soedinglab/MMseqs2" doi: "10.1093/bioinformatics/btw006" licence: ["GPL v3"] + identifier: biotools:mmseqs input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', single_end:false ]` - - db_query: - type: directory - description: An MMseqs2 database with query data - - db_target: - type: directory - description: an MMseqs2 database with target data including the taxonomy classification + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - db_query: + type: directory + description: An MMseqs2 database with query data + - - db_target: + type: directory + description: an MMseqs2 database with target data including the taxonomy classification output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', single_end:false ]` - db_taxonomy: - type: directory - description: An MMseqs2 database with target data including the taxonomy classification + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - ${prefix}_taxonomy: + type: directory + description: An MMseqs2 database with target data including the taxonomy classification - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@darcy220606" maintainers: diff --git a/modules/nf-core/prodigal/environment.yml b/modules/nf-core/prodigal/environment.yml index 85746534..7609bf3b 100644 --- a/modules/nf-core/prodigal/environment.yml +++ b/modules/nf-core/prodigal/environment.yml @@ -1,8 +1,6 @@ -name: prodigal channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::prodigal=2.6.3 - conda-forge::pigz=2.6 diff --git a/modules/nf-core/prodigal/meta.yml b/modules/nf-core/prodigal/meta.yml index a5d15d58..7d3d459e 100644 --- a/modules/nf-core/prodigal/meta.yml +++ b/modules/nf-core/prodigal/meta.yml @@ -1,55 +1,78 @@ name: prodigal -description: Prodigal (Prokaryotic Dynamic Programming Genefinding Algorithm) is a microbial (bacterial and archaeal) gene finding program +description: Prodigal (Prokaryotic Dynamic Programming Genefinding Algorithm) is a + microbial (bacterial and archaeal) gene finding program keywords: - prokaryotes - gene finding - microbial tools: - prodigal: - description: Prodigal (Prokaryotic Dynamic Programming Genefinding Algorithm) is a microbial (bacterial and archaeal) gene finding program + description: Prodigal (Prokaryotic Dynamic Programming Genefinding Algorithm) + is a microbial (bacterial and archaeal) gene finding program homepage: https://github.com/hyattpd/Prodigal documentation: https://github.com/hyattpd/prodigal/wiki tool_dev_url: https://github.com/hyattpd/Prodigal doi: "10.1186/1471-2105-11-119" licence: ["GPL v3"] + identifier: biotools:prodigal input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - genome: - type: file - description: fasta/fasta.gz file - - output_format: - type: string - description: Output format ("gbk"/"gff"/"sqn"/"sco") + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - genome: + type: file + description: fasta/fasta.gz file + - - output_format: + type: string + description: Output format ("gbk"/"gff"/"sqn"/"sco") output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - gene_annotations: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${output_format}.gz: + type: file + description: gene annotations in output_format given as input + pattern: "*.{output_format}" - nucleotide_fasta: - type: file - description: nucleotide sequences file - pattern: "*.{fna}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.fna.gz: + type: file + description: nucleotide sequences file + pattern: "*.{fna}" - amino_acid_fasta: - type: file - description: protein translations file - pattern: "*.{faa}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.faa.gz: + type: file + description: protein translations file + pattern: "*.{faa}" - all_gene_annotations: - type: file - description: complete starts file - pattern: "*.{_all.txt}" - - gene_annotations: - type: file - description: gene annotations in output_format given as input - pattern: "*.{output_format}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}_all.txt.gz: + type: file + description: complete starts file + pattern: "*.{_all.txt}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@grst" maintainers: diff --git a/modules/nf-core/prokka/meta.yml b/modules/nf-core/prokka/meta.yml index 9d82ffac..90745735 100644 --- a/modules/nf-core/prokka/meta.yml +++ b/modules/nf-core/prokka/meta.yml @@ -10,80 +10,151 @@ tools: homepage: https://github.com/tseemann/prokka doi: "10.1093/bioinformatics/btu153" licence: ["GPL v2"] + identifier: biotools:prokka input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: | - FASTA file to be annotated. Has to contain at least a non-empty string dummy value. - - proteins: - type: file - description: FASTA file of trusted proteins to first annotate from (optional) - - prodigal_tf: - type: file - description: Training file to use for Prodigal (optional) + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: | + FASTA file to be annotated. Has to contain at least a non-empty string dummy value. + - - proteins: + type: file + description: FASTA file of trusted proteins to first annotate from (optional) + - - prodigal_tf: + type: file + description: Training file to use for Prodigal (optional) output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - gff: - type: file - description: annotation in GFF3 format, containing both sequences and annotations - pattern: "*.{gff}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.gff: + type: file + description: annotation in GFF3 format, containing both sequences and annotations + pattern: "*.{gff}" - gbk: - type: file - description: annotation in GenBank format, containing both sequences and annotations - pattern: "*.{gbk}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.gbk: + type: file + description: annotation in GenBank format, containing both sequences and annotations + pattern: "*.{gbk}" - fna: - type: file - description: nucleotide FASTA file of the input contig sequences - pattern: "*.{fna}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.fna: + type: file + description: nucleotide FASTA file of the input contig sequences + pattern: "*.{fna}" - faa: - type: file - description: protein FASTA file of the translated CDS sequences - pattern: "*.{faa}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.faa: + type: file + description: protein FASTA file of the translated CDS sequences + pattern: "*.{faa}" - ffn: - type: file - description: nucleotide FASTA file of all the prediction transcripts (CDS, rRNA, tRNA, tmRNA, misc_RNA) - pattern: "*.{ffn}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.ffn: + type: file + description: nucleotide FASTA file of all the prediction transcripts (CDS, rRNA, + tRNA, tmRNA, misc_RNA) + pattern: "*.{ffn}" - sqn: - type: file - description: an ASN1 format "Sequin" file for submission to Genbank - pattern: "*.{sqn}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.sqn: + type: file + description: an ASN1 format "Sequin" file for submission to Genbank + pattern: "*.{sqn}" - fsa: - type: file - description: nucleotide FASTA file of the input contig sequences, used by "tbl2asn" to create the .sqn file - pattern: "*.{fsa}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.fsa: + type: file + description: nucleotide FASTA file of the input contig sequences, used by "tbl2asn" + to create the .sqn file + pattern: "*.{fsa}" - tbl: - type: file - description: feature Table file, used by "tbl2asn" to create the .sqn file - pattern: "*.{tbl}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.tbl: + type: file + description: feature Table file, used by "tbl2asn" to create the .sqn file + pattern: "*.{tbl}" - err: - type: file - description: unacceptable annotations - the NCBI discrepancy report. - pattern: "*.{err}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.err: + type: file + description: unacceptable annotations - the NCBI discrepancy report. + pattern: "*.{err}" - log: - type: file - description: contains all the output that Prokka produced during its run - pattern: "*.{log}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.log: + type: file + description: contains all the output that Prokka produced during its run + pattern: "*.{log}" - txt: - type: file - description: statistics relating to the annotated features found - pattern: "*.{txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.txt: + type: file + description: statistics relating to the annotated features found + pattern: "*.{txt}" - tsv: - type: file - description: tab-separated file of all features (locus_tag,ftype,len_bp,gene,EC_number,COG,product) - pattern: "*.{tsv}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}/*.tsv: + type: file + description: tab-separated file of all features (locus_tag,ftype,len_bp,gene,EC_number,COG,product) + pattern: "*.{tsv}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@rpetit3" maintainers: diff --git a/modules/nf-core/pyrodigal/environment.yml b/modules/nf-core/pyrodigal/environment.yml index 3e538e8c..b0bbc515 100644 --- a/modules/nf-core/pyrodigal/environment.yml +++ b/modules/nf-core/pyrodigal/environment.yml @@ -1,10 +1,8 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "pyrodigal" channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::pyrodigal=3.3.0 - conda-forge::pigz=2.8 diff --git a/modules/nf-core/pyrodigal/meta.yml b/modules/nf-core/pyrodigal/meta.yml index 0967606f..d8394d07 100644 --- a/modules/nf-core/pyrodigal/meta.yml +++ b/modules/nf-core/pyrodigal/meta.yml @@ -1,5 +1,6 @@ name: "pyrodigal" -description: Pyrodigal is a Python module that provides bindings to Prodigal, a fast, reliable protein-coding gene prediction for prokaryotic genomes. +description: Pyrodigal is a Python module that provides bindings to Prodigal, a fast, + reliable protein-coding gene prediction for prokaryotic genomes. keywords: - sort - annotation @@ -7,52 +8,75 @@ keywords: - prokaryote tools: - "pyrodigal": - description: "Pyrodigal is a Python module that provides bindings to Prodigal (ORF finder for microbial sequences) using Cython." + description: "Pyrodigal is a Python module that provides bindings to Prodigal + (ORF finder for microbial sequences) using Cython." homepage: "https://pyrodigal.readthedocs.org/" documentation: "https://pyrodigal.readthedocs.org/" tool_dev_url: "https://github.com/althonos/pyrodigal/" doi: "10.21105/joss.04296" licence: ["GPL v3"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: FASTA file - pattern: "*.{fasta.gz,fa.gz,fna.gz}" - - output_format: - type: string - description: Output format - pattern: "{gbk,gff}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: FASTA file + pattern: "*.{fasta.gz,fa.gz,fna.gz}" + - - output_format: + type: string + description: Output format + pattern: "{gbk,gff}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - annotations: - type: file - description: Gene annotations. The file format is specified via input channel "output_format". - pattern: "*.{gbk,gff}.gz" - - faa: - type: file - description: protein translations file - pattern: "*.{faa.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.${output_format}.gz": + type: file + description: Gene annotations. The file format is specified via input channel + "output_format". + pattern: "*.{gbk,gff}.gz" - fna: - type: file - description: nucleotide sequences file - pattern: "*.{fna.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fna.gz": + type: file + description: nucleotide sequences file + pattern: "*.{fna.gz}" + - faa: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.faa.gz": + type: file + description: protein translations file + pattern: "*.{faa.gz}" - score: - type: file - description: all potential genes (with scores) - pattern: "*.{score.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.score.gz": + type: file + description: all potential genes (with scores) + pattern: "*.{score.gz}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@louperelo" maintainers: diff --git a/modules/nf-core/rgi/cardannotation/environment.yml b/modules/nf-core/rgi/cardannotation/environment.yml index f1c5872a..609693fe 100644 --- a/modules/nf-core/rgi/cardannotation/environment.yml +++ b/modules/nf-core/rgi/cardannotation/environment.yml @@ -1,7 +1,5 @@ -name: rgi_cardannotation channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::rgi=6.0.3 diff --git a/modules/nf-core/rgi/cardannotation/meta.yml b/modules/nf-core/rgi/cardannotation/meta.yml index 97e6911d..8aff020f 100644 --- a/modules/nf-core/rgi/cardannotation/meta.yml +++ b/modules/nf-core/rgi/cardannotation/meta.yml @@ -1,37 +1,46 @@ name: rgi_cardannotation -description: Preprocess the CARD database for RGI to predict antibiotic resistance from protein or nucleotide data +description: Preprocess the CARD database for RGI to predict antibiotic resistance + from protein or nucleotide data keywords: - bacteria - fasta - antibiotic resistance tools: - rgi: - description: This module preprocesses the downloaded Comprehensive Antibiotic Resistance Database (CARD) which can then be used as input for RGI. + description: This module preprocesses the downloaded Comprehensive Antibiotic + Resistance Database (CARD) which can then be used as input for RGI. homepage: https://card.mcmaster.ca documentation: https://github.com/arpcard/rgi tool_dev_url: https://github.com/arpcard/rgi doi: "10.1093/nar/gkz935" licence: ["https://card.mcmaster.ca/about"] + identifier: "" input: - - card: - type: directory - description: Directory containing the CARD database - pattern: "*/" + - - card: + type: directory + description: Directory containing the CARD database + pattern: "*/" output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - db: - type: directory - description: Directory containing the processed CARD database files - pattern: "*/" + - card_database_processed: + type: directory + description: Directory containing the processed CARD database files + pattern: "*/" - tool_version: - type: string - description: The version of the tool in string format (useful for downstream tools such as hAMRronization) + - RGI_VERSION: + type: string + description: The version of the tool in string format (useful for downstream + tools such as hAMRronization) - db_version: - type: string - description: The version of the used database in string format (useful for downstream tools such as hAMRronization) + - DB_VERSION: + type: string + description: The version of the used database in string format (useful for downstream + tools such as hAMRronization) + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@rpetit3" - "@jfy133" diff --git a/modules/nf-core/rgi/main/environment.yml b/modules/nf-core/rgi/main/environment.yml index f229cc21..609693fe 100644 --- a/modules/nf-core/rgi/main/environment.yml +++ b/modules/nf-core/rgi/main/environment.yml @@ -1,7 +1,5 @@ -name: rgi_main channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::rgi=6.0.3 diff --git a/modules/nf-core/rgi/main/meta.yml b/modules/nf-core/rgi/main/meta.yml index 7e444c8b..9d9836c0 100644 --- a/modules/nf-core/rgi/main/meta.yml +++ b/modules/nf-core/rgi/main/meta.yml @@ -6,59 +6,86 @@ keywords: - antibiotic resistance tools: - rgi: - description: This tool provides a preliminary annotation of your DNA sequence(s) based upon the data available in The Comprehensive Antibiotic Resistance Database (CARD). Hits to genes tagged with Antibiotic Resistance ontology terms will be highlighted. As CARD expands to include more pathogens, genomes, plasmids, and ontology terms this tool will grow increasingly powerful in providing first-pass detection of antibiotic resistance associated genes. See license at CARD website + description: This tool provides a preliminary annotation of your DNA sequence(s) + based upon the data available in The Comprehensive Antibiotic Resistance Database + (CARD). Hits to genes tagged with Antibiotic Resistance ontology terms will + be highlighted. As CARD expands to include more pathogens, genomes, plasmids, + and ontology terms this tool will grow increasingly powerful in providing first-pass + detection of antibiotic resistance associated genes. See license at CARD website homepage: https://card.mcmaster.ca documentation: https://github.com/arpcard/rgi tool_dev_url: https://github.com/arpcard/rgi doi: "10.1093/nar/gkz935" licence: ["https://card.mcmaster.ca/about"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Nucleotide or protein sequences in FASTA format - pattern: "*.{fasta,fasta.gz,fa,fa.gz,fna,fna.gz,faa,faa.gz}" - - card: - type: directory - description: Directory containing the CARD database. This is expected to be the unarchived but otherwise unaltered download folder (see RGI documentation for download instructions). - pattern: "*/" - - wildcard: - type: directory - description: Directory containing the WildCARD database (optional). This is expected to be the unarchived but otherwise unaltered download folder (see RGI documentation for download instructions). - pattern: "*/" - + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Nucleotide or protein sequences in FASTA format + pattern: "*.{fasta,fasta.gz,fa,fa.gz,fna,fna.gz,faa,faa.gz}" + - - card: + type: directory + description: Directory containing the CARD database. This is expected to be + the unarchived but otherwise unaltered download folder (see RGI documentation + for download instructions). + pattern: "*/" + - - wildcard: + type: directory + description: Directory containing the WildCARD database (optional). This is + expected to be the unarchived but otherwise unaltered download folder (see + RGI documentation for download instructions). + pattern: "*/" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - json: - type: file - description: JSON formatted file with RGI results - pattern: "*.{json}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.json": + type: file + description: JSON formatted file with RGI results + pattern: "*.{json}" - tsv: - type: file - description: Tab-delimited file with RGI results - pattern: "*.{txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.txt": + type: file + description: Tab-delimited file with RGI results + pattern: "*.{txt}" - tmp: - type: directory - description: Directory containing various intermediate files - pattern: "temp/" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - temp/: + type: directory + description: Directory containing various intermediate files + pattern: "temp/" - tool_version: - type: string - description: The version of the tool in string format (useful for downstream tools such as hAMRronization) + - RGI_VERSION: + type: string + description: The version of the tool in string format (useful for downstream + tools such as hAMRronization) - db_version: - type: string - description: The version of the used database in string format (useful for downstream tools such as hAMRronization) + - DB_VERSION: + type: string + description: The version of the used database in string format (useful for downstream + tools such as hAMRronization) + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@rpetit3" - "@jfy133" diff --git a/modules/nf-core/seqkit/seq/environment.yml b/modules/nf-core/seqkit/seq/environment.yml index 74e0dd76..4f8058a9 100644 --- a/modules/nf-core/seqkit/seq/environment.yml +++ b/modules/nf-core/seqkit/seq/environment.yml @@ -1,9 +1,7 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "seqkit_seq" channels: - conda-forge - bioconda - - defaults dependencies: - "bioconda::seqkit=2.8.1" diff --git a/modules/nf-core/seqkit/seq/meta.yml b/modules/nf-core/seqkit/seq/meta.yml index 8d4e2b16..7d32aba5 100644 --- a/modules/nf-core/seqkit/seq/meta.yml +++ b/modules/nf-core/seqkit/seq/meta.yml @@ -1,7 +1,7 @@ ---- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json name: "seqkit_seq" -description: Transforms sequences (extract ID, filter by length, remove gaps, reverse complement...) +description: Transforms sequences (extract ID, filter by length, remove gaps, reverse + complement...) keywords: - genomics - fasta @@ -18,30 +18,33 @@ tools: tool_dev_url: "https://github.com/shenwei356/seqkit" doi: "10.1371/journal.pone.0163962" licence: ["MIT"] + identifier: biotools:seqkit input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - - fastx: - type: file - description: Input fasta/fastq file - pattern: "*.{fsa,fas,fa,fasta,fastq,fq,fsa.gz,fas.gz,fa.gz,fasta.gz,fastq.gz,fq.gz}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - fastx: + type: file + description: Input fasta/fastq file + pattern: "*.{fsa,fas,fa,fasta,fastq,fq,fsa.gz,fas.gz,fa.gz,fasta.gz,fastq.gz,fq.gz}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - fastx: - type: file - description: Output fasta/fastq file - pattern: "*.{fasta,fasta.gz,fastq,fastq.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - ${prefix}.*: + type: file + description: Output fasta/fastq file + pattern: "*.{fasta,fasta.gz,fastq,fastq.gz}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@GallVp" maintainers: diff --git a/modules/nf-core/tabix/bgzip/environment.yml b/modules/nf-core/tabix/bgzip/environment.yml index 56cc0fb1..017c259d 100644 --- a/modules/nf-core/tabix/bgzip/environment.yml +++ b/modules/nf-core/tabix/bgzip/environment.yml @@ -1,8 +1,7 @@ -name: tabix_bgzip channels: - conda-forge - bioconda - - defaults + dependencies: - - bioconda::tabix=1.11 - bioconda::htslib=1.20 + - bioconda::tabix=1.11 diff --git a/modules/nf-core/tabix/bgzip/meta.yml b/modules/nf-core/tabix/bgzip/meta.yml index 621d49ea..131e92cf 100644 --- a/modules/nf-core/tabix/bgzip/meta.yml +++ b/modules/nf-core/tabix/bgzip/meta.yml @@ -13,33 +13,42 @@ tools: documentation: http://www.htslib.org/doc/bgzip.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:tabix input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: file to compress or to decompress + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: file to compress or to decompress output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - output: - type: file - description: Output compressed/decompressed file - pattern: "*." + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${output}: + type: file + description: Output compressed/decompressed file + pattern: "*." - gzi: - type: file - description: Optional gzip index file for compressed inputs - pattern: "*.gzi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${output}.gzi: + type: file + description: Optional gzip index file for compressed inputs + pattern: "*.gzi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/untar/environment.yml b/modules/nf-core/untar/environment.yml index 4f498244..c7794856 100644 --- a/modules/nf-core/untar/environment.yml +++ b/modules/nf-core/untar/environment.yml @@ -1,8 +1,6 @@ -name: untar channels: - conda-forge - bioconda - - defaults dependencies: - conda-forge::grep=3.11 - conda-forge::sed=4.8 diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml index a9a2110f..290346b3 100644 --- a/modules/nf-core/untar/meta.yml +++ b/modules/nf-core/untar/meta.yml @@ -10,30 +10,33 @@ tools: Extract tar.gz files. documentation: https://www.gnu.org/software/tar/manual/ licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - archive: - type: file - description: File to be untar - pattern: "*.{tar}.{gz}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - archive: + type: file + description: File to be untar + pattern: "*.{tar}.{gz}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - untar: - type: directory - description: Directory containing contents of archive - pattern: "*/" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - $prefix: + type: directory + description: Directory containing contents of archive + pattern: "*/" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/untar/untar.diff b/modules/nf-core/untar/untar.diff index 457dd66d..d020ffeb 100644 --- a/modules/nf-core/untar/untar.diff +++ b/modules/nf-core/untar/untar.diff @@ -1,4 +1,7 @@ Changes in module 'nf-core/untar' +'modules/nf-core/untar/environment.yml' is unchanged +'modules/nf-core/untar/meta.yml' is unchanged +Changes in 'untar/main.nf': --- modules/nf-core/untar/main.nf +++ modules/nf-core/untar/main.nf @@ -4,8 +4,8 @@ @@ -13,4 +16,7 @@ Changes in module 'nf-core/untar' input: tuple val(meta), path(archive) +'modules/nf-core/untar/tests/main.nf.test' is unchanged +'modules/nf-core/untar/tests/tags.yml' is unchanged +'modules/nf-core/untar/tests/main.nf.test.snap' is unchanged ************************************************************ From c762ac97c633150263919d2116e2905a4ffd8a2d Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 23 Oct 2024 13:23:58 +0200 Subject: [PATCH 011/175] Remove check_max and max_ parameters --- conf/base.config | 100 ++++++++++++++-------------- conf/test_bgc_prokka.config | 5 -- conf/test_bgc_pyrodigal.config | 5 -- conf/test_nothing.config | 5 -- conf/test_preannotated.config | 5 -- conf/test_preannotated_bgc.config | 5 -- conf/test_prokka.config | 5 -- conf/test_taxonomy_bakta.config | 5 -- conf/test_taxonomy_prokka.config | 5 -- conf/test_taxonomy_pyrodigal.config | 5 -- 10 files changed, 50 insertions(+), 95 deletions(-) diff --git a/conf/base.config b/conf/base.config index 5a8fc2bc..b16699af 100644 --- a/conf/base.config +++ b/conf/base.config @@ -64,168 +64,168 @@ process { */ withName: GUNZIP { - memory = { check_max(2.GB * task.attempt, 'memory') } + memory = { 2.GB * task.attempt } cpus = 1 } withName: UNTAR { - memory = { check_max(2.GB * task.attempt, 'memory') } + memory = { 2.GB * task.attempt } cpus = 1 } withName: PROKKA { - memory = { check_max(8.GB * task.attempt, 'memory') } - cpus = { check_max(4 * task.attempt, 'cpus') } - time = { check_max(8.h * task.attempt, 'time') } + memory = { 8.GB * task.attempt } + cpus = { 4 * task.attempt } + time = { 8.h * task.attempt } } withName: PRODIGAL_GBK { - memory = { check_max(2.GB * task.attempt, 'memory') } + memory = { 2.GB * task.attempt } cpus = 1 } withName: BAKTA_BAKTA { - memory = { check_max(64.GB * task.attempt, 'memory') } - cpus = { check_max(8 * task.attempt, 'cpus') } - time = { check_max(8.h * task.attempt, 'time') } + memory = { 64.GB * task.attempt } + cpus = { 8 * task.attempt } + time = { 8.h * task.attempt } } withName: ABRICATE_RUN { - memory = { check_max(2.GB * task.attempt, 'memory') } - cpus = { check_max(4 * task.attempt, 'cpus') } + memory = { 2.GB * task.attempt } + cpus = { 4 * task.attempt } } withName: AMRFINDERPLUS_RUN { - memory = { check_max(2.GB * task.attempt, 'memory') } + memory = { 2.GB * task.attempt } cpus = 1 } withName: DEEPARG_DOWNLOADDATA { - memory = { check_max(2.GB * task.attempt, 'memory') } + memory = { 2.GB * task.attempt } cpus = 1 - time = { check_max(2.h * task.attempt, 'time') } + time = { 2.h * task.attempt } } withName: DEEPARG_PREDICT { - memory = { check_max(2.GB * task.attempt, 'memory') } + memory = { 2.GB * task.attempt } cpus = 1 } withName: FARGENE { - memory = { check_max(2.GB * task.attempt, 'memory') } - cpus = { check_max(4 * task.attempt, 'cpus') } + memory = { 2.GB * task.attempt } + cpus = { 4 * task.attempt } } withName: RGI_MAIN { - memory = { check_max(28.GB * task.attempt, 'memory') } - cpus = { check_max(4 * task.attempt, 'cpus') } + memory = { 28.GB * task.attempt } + cpus = { 4 * task.attempt } } withName: AMPIR { - memory = { check_max(8.GB * task.attempt, 'memory') } + memory = { 8.GB * task.attempt } cpus = 1 } withName: AMPLIFY_PREDICT { - memory = { check_max(16.GB * task.attempt, 'memory') } + memory = { 16.GB * task.attempt } cpus = 1 - time = { check_max(24.h * task.attempt, 'time') } + time = { 24.h * task.attempt } } withName: AMP_HMMER_HMMSEARCH { - memory = { check_max(2.GB * task.attempt, 'memory') } - cpus = { check_max(4 * task.attempt, 'cpus') } + memory = { 2.GB * task.attempt } + cpus = { 4 * task.attempt } } withName: MACREL_CONTIGS { - memory = { check_max(4.GB * task.attempt, 'memory') } - cpus = { check_max(4 * task.attempt, 'cpus') } + memory = { 4.GB * task.attempt } + cpus = { 4 * task.attempt } } withName: BGC_HMMER_HMMSEARCH { - memory = { check_max(2.GB * task.attempt, 'memory') } - cpus = { check_max(4 * task.attempt, 'cpus') } + memory = { 2.GB * task.attempt } + cpus = { 4 * task.attempt } } withName: ANTISMASH_ANTISMASHLITE { - memory = { check_max(64.GB * task.attempt, 'memory') } - cpus = { check_max(8 * task.attempt, 'cpus') } - time = { check_max(12.h * task.attempt, 'time') } + memory = { 64.GB * task.attempt } + cpus = { 8 * task.attempt } + time = { 12.h * task.attempt } } withName: ANTISMASH_ANTISMASHLITEDOWNLOADDATABASES { - memory = { check_max(4.GB * task.attempt, 'memory') } + memory = { 4.GB * task.attempt } cpus = 1 } withName: DEEPBGC_DOWNLOAD { - memory = { check_max(2.GB * task.attempt, 'memory') } + memory = { 2.GB * task.attempt } cpus = 1 } withName: DEEPBGC_PIPELINE { - memory = { check_max(2.GB * task.attempt, 'memory') } + memory = { 2.GB * task.attempt } cpus = 1 - time = { check_max(24.h * task.attempt, 'time') } + time = { 24.h * task.attempt } } withName: GECCO_RUN { - memory = { check_max(16.GB * task.attempt, 'memory') } - cpus = { check_max(4 * task.attempt, 'cpus') } + memory = { 16.GB * task.attempt } + cpus = { 4 * task.attempt } } withName: HAMRONIZATION_ABRICATE { - memory = { check_max(4.GB * task.attempt, 'memory') } + memory = { 4.GB * task.attempt } cpus = 1 } withName: HAMRONIZATION_AMRFINDERPLUS { - memory = { check_max(4.GB * task.attempt, 'memory') } + memory = { 4.GB * task.attempt } cpus = 1 } withName: HAMRONIZATION_DEEPARG { - memory = { check_max(8.GB * task.attempt, 'memory') } + memory = { 8.GB * task.attempt } cpus = 1 } withName: HAMRONIZATION_RGI { - memory = { check_max(4.GB * task.attempt, 'memory') } + memory = { 4.GB * task.attempt } cpus = 1 } withName: HAMRONIZATION_FARGENE { - memory = { check_max(4.GB * task.attempt, 'memory') } + memory = { 4.GB * task.attempt } cpus = 1 } withName: HAMRONIZATION_SUMMARIZE { - memory = { check_max(4.GB * task.attempt, 'memory') } + memory = { 4.GB * task.attempt } cpus = 1 } withName: ARGNORM_DEEPARG { - memory = { check_max(4.GB * task.attempt, 'memory') } + memory = { 4.GB * task.attempt } cpus = 1 } withName: ARGNORM_ABRICATE { - memory = { check_max(4.GB * task.attempt, 'memory') } + memory = { 4.GB * task.attempt } cpus = 1 } withName: ARGNORM_AMRFINDERPLUS { - memory = { check_max(4.GB * task.attempt, 'memory') } + memory = { 4.GB * task.attempt } cpus = 1 } withName: AMPCOMBI2_PARSETABLES { - memory = { check_max(8.GB * task.attempt, 'memory') } - time = { check_max(2.h * task.attempt, 'time') } + memory = { 8.GB * task.attempt } + time = { 2.h * task.attempt } } withName: AMPCOMBI2_CLUSTER { - memory = { check_max(6.GB * task.attempt, 'memory') } - time = { check_max(2.h * task.attempt, 'time') } + memory = { 6.GB * task.attempt } + time = { 2.h * task.attempt } } } diff --git a/conf/test_bgc_prokka.config b/conf/test_bgc_prokka.config index 4d63b9c9..ece6902b 100644 --- a/conf/test_bgc_prokka.config +++ b/conf/test_bgc_prokka.config @@ -22,11 +22,6 @@ params { config_profile_name = 'BGC Prokka test profile' config_profile_description = 'Minimal test dataset to check BGC workflow function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '8.GB' - max_time = '6.h' - // Input data input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' diff --git a/conf/test_bgc_pyrodigal.config b/conf/test_bgc_pyrodigal.config index 7169c35d..da83cbd6 100644 --- a/conf/test_bgc_pyrodigal.config +++ b/conf/test_bgc_pyrodigal.config @@ -22,11 +22,6 @@ params { config_profile_name = 'BGC Pyrodigal test profile' config_profile_description = 'Minimal test dataset to check BGC workflow function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '8.GB' - max_time = '6.h' - // Input data input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' diff --git a/conf/test_nothing.config b/conf/test_nothing.config index b14314af..91640a32 100644 --- a/conf/test_nothing.config +++ b/conf/test_nothing.config @@ -24,11 +24,6 @@ params { config_profile_name = 'Test nothing profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '8.GB' - max_time = '6.h' - // Input data input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' amp_hmmsearch_models = params.pipelines_testdata_base_path + 'funcscan/hmms/mybacteriocin.hmm' diff --git a/conf/test_preannotated.config b/conf/test_preannotated.config index fb7df238..764304e2 100644 --- a/conf/test_preannotated.config +++ b/conf/test_preannotated.config @@ -22,11 +22,6 @@ params { config_profile_name = 'ARG/AMP test profile - preannotated input' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // Input data input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_preannotated.csv' diff --git a/conf/test_preannotated_bgc.config b/conf/test_preannotated_bgc.config index 9ff5fe17..70d5d1d5 100644 --- a/conf/test_preannotated_bgc.config +++ b/conf/test_preannotated_bgc.config @@ -22,11 +22,6 @@ params { config_profile_name = 'BGC test profile - preannotated input' config_profile_description = 'Minimal test dataset to check BGC workflow function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '6.h' - // Input data input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_preannotated.csv' diff --git a/conf/test_prokka.config b/conf/test_prokka.config index 9dbdd212..fd576b81 100644 --- a/conf/test_prokka.config +++ b/conf/test_prokka.config @@ -22,11 +22,6 @@ params { config_profile_name = 'AMP/ARG Prokka test profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '8.GB' - max_time = '6.h' - // Input data input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' diff --git a/conf/test_taxonomy_bakta.config b/conf/test_taxonomy_bakta.config index a81a76f5..6763c48e 100644 --- a/conf/test_taxonomy_bakta.config +++ b/conf/test_taxonomy_bakta.config @@ -25,11 +25,6 @@ params { config_profile_name = 'Taxonomic classification test profile' config_profile_description = 'Minimal test dataset to check taxonomic classification workflow function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '14.GB' - max_time = '6.h' - // Input data input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' amp_hmmsearch_models = params.pipelines_testdata_base_path + 'funcscan/hmms/mybacteriocin.hmm' diff --git a/conf/test_taxonomy_prokka.config b/conf/test_taxonomy_prokka.config index 2ce0203b..e126624f 100644 --- a/conf/test_taxonomy_prokka.config +++ b/conf/test_taxonomy_prokka.config @@ -25,11 +25,6 @@ params { config_profile_name = 'Taxonomic classification test profile' config_profile_description = 'Minimal test dataset to check taxonomic classification workflow function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '14.GB' - max_time = '6.h' - // Input data input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' bgc_hmmsearch_models = 'https://raw.githubusercontent.com/antismash/antismash/fd61de057e082fbf071732ac64b8b2e8883de32f/antismash/detection/hmm_detection/data/ToyB.hmm' diff --git a/conf/test_taxonomy_pyrodigal.config b/conf/test_taxonomy_pyrodigal.config index 8438e476..cbe89dc3 100644 --- a/conf/test_taxonomy_pyrodigal.config +++ b/conf/test_taxonomy_pyrodigal.config @@ -25,11 +25,6 @@ params { config_profile_name = 'Taxonomic classification test profile' config_profile_description = 'Minimal test dataset to check taxonomic classification workflow function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '14.GB' - max_time = '6.h' - // Input data input = params.pipelines_testdata_base_path + 'funcscan/samplesheet_reduced.csv' bgc_hmmsearch_models = 'https://raw.githubusercontent.com/antismash/antismash/fd61de057e082fbf071732ac64b8b2e8883de32f/antismash/detection/hmm_detection/data/ToyB.hmm' From d739f419db3a76c79165c8fe358eb936c0a4e038 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 23 Oct 2024 13:27:57 +0200 Subject: [PATCH 012/175] Update missing module --- modules.json | 2 +- .../nf-core/ampcombi2/cluster/environment.yml | 2 - modules/nf-core/ampcombi2/cluster/meta.yml | 52 +++++++++++-------- 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/modules.json b/modules.json index 05d5e9fa..ec386d66 100644 --- a/modules.json +++ b/modules.json @@ -12,7 +12,7 @@ }, "ampcombi2/cluster": { "branch": "master", - "git_sha": "900f6c970712e41b783e21e5dfc30f052174b5cd", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "ampcombi2/complete": { diff --git a/modules/nf-core/ampcombi2/cluster/environment.yml b/modules/nf-core/ampcombi2/cluster/environment.yml index aa5e5fe4..420c955b 100644 --- a/modules/nf-core/ampcombi2/cluster/environment.yml +++ b/modules/nf-core/ampcombi2/cluster/environment.yml @@ -1,9 +1,7 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "ampcombi2_cluster" channels: - conda-forge - bioconda - - defaults dependencies: - "bioconda::ampcombi=0.2.2" diff --git a/modules/nf-core/ampcombi2/cluster/meta.yml b/modules/nf-core/ampcombi2/cluster/meta.yml index 60949dc3..2e37a0c2 100644 --- a/modules/nf-core/ampcombi2/cluster/meta.yml +++ b/modules/nf-core/ampcombi2/cluster/meta.yml @@ -1,7 +1,7 @@ ---- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json name: "ampcombi2_cluster" -description: A submodule that clusters the merged AMP hits generated from ampcombi2/parsetables and ampcombi2/complete using MMseqs2 cluster. +description: A submodule that clusters the merged AMP hits generated from ampcombi2/parsetables + and ampcombi2/complete using MMseqs2 cluster. keywords: - antimicrobial peptides - amps @@ -12,36 +12,46 @@ keywords: - mmseqs2 tools: - ampcombi2/cluster: - description: "A tool for clustering all AMP hits found across many samples and supporting many AMP prediction tools." + description: "A tool for clustering all AMP hits found across many samples and + supporting many AMP prediction tools." homepage: "https://github.com/Darcy220606/AMPcombi" documentation: "https://github.com/Darcy220606/AMPcombi" tool_dev_url: "https://github.com/Darcy220606/AMPcombi/tree/dev" licence: ["MIT"] + identifier: "" input: - - summary_file: - type: file - description: A file corresponding to the Ampcombi_summary.tsv that is generated by running 'ampcombi complete'. It is a file containing all the merged AMP results from all samples and all tools. - pattern: "*.tsv" - + - - summary_file: + type: file + description: A file corresponding to the Ampcombi_summary.tsv that is generated + by running 'ampcombi complete'. It is a file containing all the merged AMP + results from all samples and all tools. + pattern: "*.tsv" output: - cluster_tsv: - type: file - description: A file containing all the results from the merged input table 'Ampcombi_summary.tsv', but also including the cluster id number. The clustering is done using MMseqs2 cluster. - pattern: "*.tsv" + - Ampcombi_summary_cluster.tsv: + type: file + description: A file containing all the results from the merged input table 'Ampcombi_summary.tsv', + but also including the cluster id number. The clustering is done using MMseqs2 + cluster. + pattern: "*.tsv" - rep_cluster_tsv: - type: file - description: A file containing the representative sequences of the clusters estimated by the tool. The clustering is done using MMseqs2 cluster. - pattern: "*.tsv" + - Ampcombi_summary_cluster_representative_seq.tsv: + type: file + description: A file containing the representative sequences of the clusters + estimated by the tool. The clustering is done using MMseqs2 cluster. + pattern: "*.tsv" - log: - type: file - description: A log file that captures the standard output for the entire process in a log file. Can be activated by `--log`. - pattern: "*.log" + - Ampcombi_cluster.log: + type: file + description: A log file that captures the standard output for the entire process + in a log file. Can be activated by `--log`. + pattern: "*.log" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@darcy220606" maintainers: From ba2fc825fe4540da66a0e2bb02901a54c54af594 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 23 Oct 2024 14:32:41 +0200 Subject: [PATCH 013/175] Fix schema --- assets/schema_input.json | 23 ++++--- .../utils_nfcore_funcscan_pipeline/main.nf | 65 ++++++++++--------- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index 849651b2..c13fd75e 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -11,36 +11,35 @@ "type": "string", "pattern": "^\\S+$", "errorMessage": "Sample name must be provided and cannot contain spaces", - "meta": ["id"], - "unique": true + "meta": ["id"] }, "fasta": { "type": "string", "format": "file-path", "exists": true, "pattern": "^\\S+\\.(fasta|fas|fna|fa)(\\.gz)?$", - "errorMessage": "Fasta file for reads must be provided, cannot contain spaces and must have extension `.fa.gz`, `.fna.gz` or `.fasta.gz`", - "unique": true + "errorMessage": "Fasta file for reads must be provided, cannot contain spaces and must have extension `.fa.gz`, `.fna.gz` or `.fasta.gz`" }, "protein": { "type": "string", "format": "file-path", "exists": true, "pattern": "^\\S+\\.(faa|fasta)(\\.gz)?$", - "errorMessage": "Input file for peptide annotations has incorrect file format. File must end in `.fasta` or `.faa`", - "unique": true, - "dependentRequired": ["gbk"] + "errorMessage": "Input file for peptide annotations has incorrect file format. File must end in `.fasta` or `.faa`" }, "gbk": { "type": "string", "format": "file-path", "exists": true, "pattern": "^\\S+\\.(gbk|gbff)(\\.gz)?$", - "errorMessage": "Input file for feature annotations has incorrect file format. File must end in `.gbk.gz` or `.gbff.gz`", - "unique": true, - "dependentRequired": ["protein"] + "errorMessage": "Input file for feature annotations has incorrect file format. File must end in `.gbk.gz` or `.gbff.gz`" } }, - "required": ["sample", "fasta"] - } + "required": ["sample", "fasta"], + "dependentRequired": { + "protein": ["gbk"], + "gbk": ["protein"] + } + }, + "uniqueItems": true } diff --git a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf index adcf984e..c710304e 100644 --- a/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_funcscan_pipeline/main.nf @@ -72,7 +72,7 @@ workflow PIPELINE_INITIALISATION { // Channel - .fromList(samplesheetToList(params.input, "${projectDir}/assets/schema_input.json")) + .fromList(samplesheetToList(input, "${projectDir}/assets/schema_input.json")) .set { ch_samplesheet } emit: @@ -144,7 +144,7 @@ def validateInputParameters() { antismash_database_dir = new File(params.bgc_antismash_db) antismash_install_dir = new File(params.bgc_antismash_installdir) if (antismash_database_dir.name == antismash_install_dir.name) { - error("[nf-core/funcscan] ERROR: Your supplied antiSMASH database and installation directories have identical names: "" + antismash_install_dir.name + "".\nPlease make sure to name them differently, for example:\n - Database directory: " + antismash_database_dir.parent + "/antismash_db\n - Installation directory: " + antismash_install_dir.parent + "/antismash_dir") + error("[nf-core/funcscan] ERROR: Your supplied antiSMASH database and installation directories have identical names: " + antismash_install_dir.name + ".\nPlease make sure to name them differently, for example:\n - Database directory: " + antismash_database_dir.parent + "/antismash_db\n - Installation directory: " + antismash_install_dir.parent + "/antismash_dir") } } @@ -212,7 +212,7 @@ def toolCitationText() { !params.amp_skip_ampir ? "ampir (Fingerhut et al. 2021)," : "", params.amp_run_hmmsearch ? "HMMER (Eddy 2011)," : "", ". The output from the antimicrobial peptide screening tools were standardised and summarised with AMPcombi (Ibrahim and Perelo 2023)." - ].join(' ').trim().replaceAll(", \.", ".") + ].join(' ').trim().replaceAll(', .', ".") def arg_text = [ "The following antimicrobial resistance gene screening tools were used:", @@ -223,7 +223,7 @@ def toolCitationText() { !params.arg_skip_abricate ? "ABRicate (Seemann 2020)," : "", !params.arg_skip_argnorm ? ". The outputs from ARG screening tools were normalized to the antibiotic resistance ontology using argNorm (Perovic et al. 2024)," : "", ". The output from the antimicrobial resistance gene screening tools were standardised and summarised with hAMRonization (Maguire et al. 2023)." - ].join(' ').trim().replaceAll(", +\.", ".") + ].join(' ').trim().replaceAll(', +.', ".") def bgc_text = [ "The following biosynthetic gene cluster screening tools were used:", @@ -232,7 +232,7 @@ def toolCitationText() { !params.bgc_skip_gecco ? "GECCO (Carroll et al. 2021)," : "", params.bgc_run_hmmsearch ? "HMMER (Eddy 2011)," : "", ". The output from the biosynthetic gene cluster screening tools were standardised and summarised with comBGC (Frangenberg et al. 2023)." - ].join(' ').replaceAll(", +\.", ".").trim() + ].join(' ').replaceAll(', +.', ".").trim() def postprocessing_text = "Run statistics were reported using MultiQC (Ewels et al. 2016)." @@ -249,45 +249,46 @@ def toolCitationText() { } def toolBibliographyText() { - // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "
  • Author (2023) Pub name, Journal, DOI
  • " : "", + // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? '
  • Author (2023) Pub name, Journal, DOI
  • " : "", // Uncomment function in methodsDescriptionText to render in MultiQC report - def preprocessing_text = "
  • Shen, W., Sipos, B., & Zhao, L. (2024). SeqKit2: A Swiss army knife for sequence and alignment processing. iMeta, e191. https://doi.org/10.1002/imt2.191
  • " + def preprocessing_text = '
  • Shen, W., Sipos, B., & Zhao, L. (2024). SeqKit2: A Swiss army knife for sequence and alignment processing. iMeta, e191. https://doi.org/10.1002/imt2.191
  • ' def annotation_text = [ - params.annotation_tool == 'prodigal' ? "
  • Hyatt, D., Chen, G. L., Locascio, P. F., Land, M. L., Larimer, F. W., & Hauser, L. J. (2010). Prodigal: prokaryotic gene recognition and translation initiation site identification. BMC bioinformatics, 11, 119. DOI: 10.1186/1471-2105-11-119" : "", - params.annotation_tool == 'pyrodigal' ? "
  • Larralde, M. (2022). Pyrodigal: Python bindings and interface to Prodigal, an efficient method for gene prediction in prokaryotes. Journal of Open Source Software, 7(72), 4296. DOI: 10.21105/joss.04296
  • " : "", - params.annotation_tool == 'bakta' ? "
  • Schwengers, O., Jelonek, L., Dieckmann, M. A., Beyvers, S., Blom, J., & Goesmann, A. (2021). Bakta: rapid and standardized annotation of bacterial genomes via alignment-free sequence identification. Microbial Genomics, 7(11). DOI: 10.1099/mgen.0.000685
  • " : "", - params.annotation_tool == 'prokka' ? "
  • Seemann, T. (2014). Prokka: rapid prokaryotic genome annotation. Bioinformatics (Oxford, England), 30(14), 2068–2069. DOI: 10.1093/bioinformatics/btu153
  • " : "" + params.annotation_tool == 'prodigal' ? '
  • Hyatt, D., Chen, G. L., Locascio, P. F., Land, M. L., Larimer, F. W., & Hauser, L. J. (2010). Prodigal: prokaryotic gene recognition and translation initiation site identification. BMC bioinformatics, 11, 119. DOI: 10.1186/1471-2105-11-119
  • ' : "", + params.annotation_tool == 'pyrodigal' ? '
  • Larralde, M. (2022). Pyrodigal: Python bindings and interface to Prodigal, an efficient method for gene prediction in prokaryotes. Journal of Open Source Software, 7(72), 4296. DOI: 10.21105/joss.04296
  • ' : "", + params.annotation_tool == 'bakta' ? '
  • Schwengers, O., Jelonek, L., Dieckmann, M. A., Beyvers, S., Blom, J., & Goesmann, A. (2021). Bakta: rapid and standardized annotation of bacterial genomes via alignment-free sequence identification. Microbial Genomics, 7(11). DOI: 10.1099/mgen.0.000685
  • ' : "", + params.annotation_tool == 'prokka' ? '
  • Seemann, T. (2014). Prokka: rapid prokaryotic genome annotation. Bioinformatics (Oxford, England), 30(14), 2068–2069. DOI: 10.1093/bioinformatics/btu153
  • ' : "" ].join(' ').trim() def amp_text = [ - !params.amp_skip_amplify ? "
  • Li, C., Sutherland, D., Hammond, S. A., Yang, C., Taho, F., Bergman, L., Houston, S., Warren, R. L., Wong, T., Hoang, L., Cameron, C. E., Helbing, C. C., & Birol, I. (2022). AMPlify: attentive deep learning model for discovery of novel antimicrobial peptides effective against WHO priority pathogens. BMC genomics, 23(1), 77. DOI: 10.1186/s12864-022-08310-4
  • " : "", - !params.amp_skip_macrel ? "
  • Santos-Júnior, C. D., Pan, S., Zhao, X. M., & Coelho, L. P. (2020). Macrel: antimicrobial peptide screening in genomes and metagenomes. PeerJ, 8, e10555. DOI: 10.7717/peerj.10555
  • " : "", - !params.amp_skip_ampir ? "
  • Fingerhut, L., Miller, D. J., Strugnell, J. M., Daly, N. L., & Cooke, I. R. (2021). ampir: an R package for fast genome-wide prediction of antimicrobial peptides. Bioinformatics (Oxford, England), 36(21), 5262–5263. DOI: 10.1093/bioinformatics/btaa653
  • " : "", - "
  • Ibrahim, A. & Perelo, L. (2023). Darcy220606/AMPcombi. DOI: 10.5281/zenodo.7639121
  • " - ].join(' ').trim().replaceAll(", \.", ".") + !params.amp_skip_amplify ? '
  • Li, C., Sutherland, D., Hammond, S. A., Yang, C., Taho, F., Bergman, L., Houston, S., Warren, R. L., Wong, T., Hoang, L., Cameron, C. E., Helbing, C. C., & Birol, I. (2022). AMPlify: attentive deep learning model for discovery of novel antimicrobial peptides effective against WHO priority pathogens. BMC genomics, 23(1), 77. DOI: 10.1186/s12864-022-08310-4
  • ' : "", + !params.amp_skip_macrel ? '
  • Santos-Júnior, C. D., Pan, S., Zhao, X. M., & Coelho, L. P. (2020). Macrel: antimicrobial peptide screening in genomes and metagenomes. PeerJ, 8, e10555. DOI: 10.7717/peerj.10555
  • ' : "", + !params.amp_skip_ampir ? '
  • Fingerhut, L., Miller, D. J., Strugnell, J. M., Daly, N. L., & Cooke, I. R. (2021). ampir: an R package for fast genome-wide prediction of antimicrobial peptides. Bioinformatics (Oxford, England), 36(21), 5262–5263. DOI: 10.1093/bioinformatics/btaa653
  • ' : "", + '
  • Ibrahim, A. & Perelo, L. (2023). Darcy220606/AMPcombi. DOI: 10.5281/zenodo.7639121
  • ' + ].join(' ').trim().replaceAll(', .', ".") def arg_text = [ - !params.arg_skip_fargene ? "
  • Berglund, F., Österlund, T., Boulund, F., Marathe, N. P., Larsson, D., & Kristiansson, E. (2019). Identification and reconstruction of novel antibiotic resistance genes from metagenomes. Microbiome, 7(1), 52. DOI: 10.1186/s40168-019-0670-1
  • " : "", - !params.arg_skip_rgi ? "
  • Alcock, B. P., Raphenya, A. R., Lau, T., Tsang, K. K., Bouchard, M., Edalatmand, A., Huynh, W., Nguyen, A. V., Cheng, A. A., Liu, S., Min, S. Y., Miroshnichenko, A., Tran, H. K., Werfalli, R. E., Nasir, J. A., Oloni, M., Speicher, D. J., Florescu, A., Singh, B., Faltyn, M., … McArthur, A. G. (2020). CARD 2020: antibiotic resistome surveillance with the comprehensive antibiotic resistance database. Nucleic acids research, 48(D1), D517–D525. DOI: 10.1093/nar/gkz935
  • " : "", - !params.arg_skip_amrfinderplus ? "
  • Feldgarden, M., Brover, V., Gonzalez-Escalona, N., Frye, J. G., Haendiges, J., Haft, D. H., Hoffmann, M., Pettengill, J. B., Prasad, A. B., Tillman, G. E., Tyson, G. H., & Klimke, W. (2021). AMRFinderPlus and the Reference Gene Catalog facilitate examination of the genomic links among antimicrobial resistance, stress response, and virulence. Scientific reports, 11(1), 12728. DOI: 10.1038/s41598-021-91456-0
  • " : "", - !params.arg_skip_deeparg ? "
  • Arango-Argoty, G., Garner, E., Pruden, A., Heath, L. S., Vikesland, P., & Zhang, L. (2018). DeepARG: a deep learning approach for predicting antibiotic resistance genes from metagenomic data. Microbiome, 6(1), 23. DOI: 10.1186/s40168-018-0401-z" : "", - !params.arg_skip_abricate ? "
  • Seemann, T. (2020). ABRicate. Github https://github.com/tseemann/abricate.
  • " : "", - !params.arg_skip_argnorm ? "
  • Perovic, S. U., Ramji, V., Chong, H., Duan, Y., Maguire, F., Coelho, L. P. (2024). argNorm. DOI: .
  • " : "", - "
  • Public Health Alliance for Genomic Epidemiology (pha4ge). (2022). Parse multiple Antimicrobial Resistance Analysis Reports into a common data structure. Github. Retrieved October 5, 2022, from https://github.com/pha4ge/hAMRonization
  • " - ].join(' ').trim().replaceAll(", +\.", ".") + !params.arg_skip_fargene ? '
  • Berglund, F., Österlund, T., Boulund, F., Marathe, N. P., Larsson, D., & Kristiansson, E. (2019). Identification and reconstruction of novel antibiotic resistance genes from metagenomes. Microbiome, 7(1), 52. DOI: 10.1186/s40168-019-0670-1
  • ' : "", + !params.arg_skip_rgi ? '
  • Alcock, B. P., Raphenya, A. R., Lau, T., Tsang, K. K., Bouchard, M., Edalatmand, A., Huynh, W., Nguyen, A. V., Cheng, A. A., Liu, S., Min, S. Y., Miroshnichenko, A., Tran, H. K., Werfalli, R. E., Nasir, J. A., Oloni, M., Speicher, D. J., Florescu, A., Singh, B., Faltyn, M., … McArthur, A. G. (2020). CARD 2020: antibiotic resistome surveillance with the comprehensive antibiotic resistance database. Nucleic acids research, 48(D1), D517–D525. DOI: 10.1093/nar/gkz935
  • ' : "", + !params.arg_skip_amrfinderplus ? '
  • Feldgarden, M., Brover, V., Gonzalez-Escalona, N., Frye, J. G., Haendiges, J., Haft, D. H., Hoffmann, M., Pettengill, J. B., Prasad, A. B., Tillman, G. E., Tyson, G. H., & Klimke, W. (2021). AMRFinderPlus and the Reference Gene Catalog facilitate examination of the genomic links among antimicrobial resistance, stress response, and virulence. Scientific reports, 11(1), 12728. DOI: 10.1038/s41598-021-91456-0
  • ' : "", + !params.arg_skip_deeparg ? '
  • Arango-Argoty, G., Garner, E., Pruden, A., Heath, L. S., Vikesland, P., & Zhang, L. (2018). DeepARG: a deep learning approach for predicting antibiotic resistance genes from metagenomic data. Microbiome, 6(1), 23. DOI: 10.1186/s40168-018-0401-z' : "", + !params.arg_skip_abricate ? '
  • Seemann, T. (2020). ABRicate. Github https://github.com/tseemann/abricate.
  • ' : "", + !params.arg_skip_argnorm ? '
  • Perovic, S. U., Ramji, V., Chong, H., Duan, Y., Maguire, F., Coelho, L. P. (2024). argNorm. DOI: .
  • ' : "", + '
  • Public Health Alliance for Genomic Epidemiology (pha4ge). (2022). Parse multiple Antimicrobial Resistance Analysis Reports into a common data structure. Github. Retrieved October 5, 2022, from https://github.com/pha4ge/hAMRonization
  • ' + ].join(' ').trim().replaceAll(', +.', ".") + def bgc_text = [ - !params.bgc_skip_antismash ? "
  • Blin, K., Shaw, S., Kloosterman, A. M., Charlop-Powers, Z., van Wezel, G. P., Medema, M. H., & Weber, T. (2021). antiSMASH 6.0: improving cluster detection and comparison capabilities. Nucleic acids research, 49(W1), W29–W35. DOI:
  • " : "", - !params.bgc_skip_deepbgc ? "
  • Hannigan, G. D., Prihoda, D., Palicka, A., Soukup, J., Klempir, O., Rampula, L., Durcak, J., Wurst, M., Kotowski, J., Chang, D., Wang, R., Piizzi, G., Temesi, G., Hazuda, D. J., Woelk, C. H., & Bitton, D. A. (2019). A deep learning genome-mining strategy for biosynthetic gene cluster prediction. Nucleic acids research, 47(18), e110. DOI: 10.1093/nar/gkz654
  • " : "", - !params.bgc_skip_gecco ? "
  • Carroll, L. M. , Larralde, M., Fleck, J. S., Ponnudurai, R., Milanese, A., Cappio Barazzone, E. & Zeller, G. (2021). Accurate de novo identification of biosynthetic gene clusters with GECCO. bioRxiv DOI: 0.1101/2021.05.03.442509
  • " : "", - "
  • Frangenberg, J. Fellows Yates, J. A., Ibrahim, A., Perelo, L., & Beber, M. E. (2023). nf-core/funcscan: 1.0.0 - German Rollmops - 2023-02-15. https://doi.org/10.5281/zenodo.7643100
  • " - ].join(' ').replaceAll(", +\.", ".").trim() + !params.bgc_skip_antismash ? '
  • Blin, K., Shaw, S., Kloosterman, A. M., Charlop-Powers, Z., van Wezel, G. P., Medema, M. H., & Weber, T. (2021). antiSMASH 6.0: improving cluster detection and comparison capabilities. Nucleic acids research, 49(W1), W29–W35. DOI:
  • ' : "", + !params.bgc_skip_deepbgc ? '
  • Hannigan, G. D., Prihoda, D., Palicka, A., Soukup, J., Klempir, O., Rampula, L., Durcak, J., Wurst, M., Kotowski, J., Chang, D., Wang, R., Piizzi, G., Temesi, G., Hazuda, D. J., Woelk, C. H., & Bitton, D. A. (2019). A deep learning genome-mining strategy for biosynthetic gene cluster prediction. Nucleic acids research, 47(18), e110. DOI: 10.1093/nar/gkz654
  • ' : "", + !params.bgc_skip_gecco ? '
  • Carroll, L. M. , Larralde, M., Fleck, J. S., Ponnudurai, R., Milanese, A., Cappio Barazzone, E. & Zeller, G. (2021). Accurate de novo identification of biosynthetic gene clusters with GECCO. bioRxiv DOI: 0.1101/2021.05.03.442509
  • ' : "", + '
  • Frangenberg, J. Fellows Yates, J. A., Ibrahim, A., Perelo, L., & Beber, M. E. (2023). nf-core/funcscan: 1.0.0 - German Rollmops - 2023-02-15. https://doi.org/10.5281/zenodo.7643100
  • ' + ].join(' ').replaceAll(', +.', ".").trim() - def postprocessing_text = "
  • Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. https://doi.org/10.1093/bioinformatics/btw354
  • " + def postprocessing_text = '
  • Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. https://doi.org/10.1093/bioinformatics/btw354
  • ' // Special as reused in multiple subworkflows, and we don't want to cause duplicates - def hmmsearch_text = (params.run_amp_screening && params.amp_run_hmmsearch) || (params.run_bgc_screening && params.bgc_run_hmmsearch) ? "
  • Eddy S. R. (2011). Accelerated Profile HMM Searches. PLoS computational biology, 7(10), e1002195. DOI: 10.1371/journal.pcbi.1002195
  • " : "" + def hmmsearch_text = (params.run_amp_screening && params.amp_run_hmmsearch) || (params.run_bgc_screening && params.bgc_run_hmmsearch) ? '
  • Eddy S. R. (2011). Accelerated Profile HMM Searches. PLoS computational biology, 7(10), e1002195. DOI: 10.1371/journal.pcbi.1002195
  • ' : "" def reference_text = [ preprocessing_text, @@ -329,7 +330,7 @@ def methodsDescriptionText(mqc_methods_yaml) { meta["tool_citations"] = "" meta["tool_bibliography"] = "" - meta["tool_citations"] = toolCitationText().replaceAll(", \.", ".").replaceAll("\. \.", ".").replaceAll(", \.", ".") + meta["tool_citations"] = toolCitationText().replaceAll(', .', ".").replaceAll('. .', ".").replaceAll(', .', ".") meta["tool_bibliography"] = toolBibliographyText() From f4e13b30594ac61b0df62131bb128a4694dff6ee Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Tue, 19 Nov 2024 12:01:32 +0100 Subject: [PATCH 014/175] Update .nf-core.yml --- .nf-core.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.nf-core.yml b/.nf-core.yml index a8716c4b..9ba172bf 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -5,8 +5,7 @@ nf_core_version: 3.0.2 org_path: null repository_type: pipeline template: - author: Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James - A. Fellows Yates + author: Jasmin Frangenberg, Anan Ibrahim, Louisa Perelo, Moritz E. Beber, James A. Fellows Yates description: Pipeline for screening for functional components of assembled contigs force: false is_nfcore: true From 06852e978ec8bf84bead64736b9eb48379a1aba8 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Tue, 3 Dec 2024 08:59:45 +0100 Subject: [PATCH 015/175] update the amp db download script --- bin/ampcombi_download.py | 184 ++++++++++++++++++++++---------- modules/local/dramp_download.nf | 19 ++-- 2 files changed, 137 insertions(+), 66 deletions(-) diff --git a/bin/ampcombi_download.py b/bin/ampcombi_download.py index dd1373ce..c9a4f639 100755 --- a/bin/ampcombi_download.py +++ b/bin/ampcombi_download.py @@ -1,78 +1,144 @@ #!/usr/bin/env python3 ######################################### -# Authors: [Anan Ibrahim](https://github.com/brianjohnhaas), [Louisa Perelo](https://github.com/louperelo) +# Authors: [Anan Ibrahim](https://github.com/Darcy220606/AMPcombi), [Louisa Perelo](https://github.com/louperelo) # File: amp_database.py # Source: https://github.com/Darcy220606/AMPcombi/blob/main/ampcombi/amp_database.py -# Source+commit: https://github.com/Darcy220606/AMPcombi/commit/a75bc00c32ecf873a133b18cf01f172ad9cf0d2d/ampcombi/amp_database.py -# Download Date: 2023-03-08, commit: a75bc00c # This source code is licensed under the MIT license ######################################### -# TITLE: Download the DRAMP database if input db empty AND and make database compatible for diamond +# TITLE: Download the reference database specified by the user. import pandas as pd import requests import os -from datetime import datetime +import re import subprocess -from Bio import SeqIO -import tempfile -import shutil +import argparse +from datetime import datetime +from Bio.Seq import Seq +from Bio.SeqRecord import SeqRecord +from Bio import SeqIO ######################################## -# FUNCTION: DOWNLOAD DRAMP DATABASE AND CLEAN IT +# FUNCTION: DOWNLOAD DATABASES AND CLEAN DRAMP and APD ######################################### -def download_DRAMP(db): - ##Download the (table) file and store it in a results directory - url = "http://dramp.cpu-bioinfor.org/downloads/download.php?filename=download_data/DRAMP3.0_new/general_amps.xlsx" - r = requests.get(url, allow_redirects=True) - with open(db + "/" + "general_amps.xlsx", "wb") as f: - f.write(r.content) - ##Convert excel to tab sep file and write it to a file in the DRAMP_db directly with the date its downloaded - date = datetime.now().strftime("%Y_%m_%d") - ref_amps = pd.read_excel(db + "/" + r"general_amps.xlsx") - ref_amps.to_csv(db + "/" + f"general_amps_{date}.tsv", index=None, header=True, sep="\t") - ##Download the (fasta) file and store it in a results directory - urlfasta = ( - "http://dramp.cpu-bioinfor.org/downloads/download.php?filename=download_data/DRAMP3.0_new/general_amps.fasta" - ) - z = requests.get(urlfasta) - fasta_path = os.path.join(db + "/" + f"general_amps_{date}.fasta") - with open(fasta_path, "wb") as f: - f.write(z.content) - ##Cleaning step to remove ambigous aminoacids from sequences in the database (e.g. zeros and brackets) - new_fasta = db + "/" + f"general_amps_{date}_clean.fasta" - seq_record = SeqIO.parse(open(fasta_path), "fasta") - with open(new_fasta, "w") as f: - for record in seq_record: - id, sequence = record.id, str(record.seq) - letters = [ - "A", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "K", - "L", - "M", - "N", - "P", - "Q", - "R", - "S", - "T", - "V", - "W", - "Y", - ] - new = "".join(i for i in sequence if i in letters) - f.write(">" + id + "\n" + new + "\n") - return os.remove(fasta_path), os.remove(db + "/" + r"general_amps.xlsx") +def download_ref_db(database, threads): + """ + Downloads a specified AMP (antimicrobial peptide) reference database based on the + provided database name and saves it to the specified directory. + This supports downloading databases only from DRAMP, APD, and UniRef100. + Parameters: + ---------- + db : str + The directory path where the downloaded database should be saved. + database : str + The name of the database to download. Must be one of 'DRAMP', 'APD', or 'UniRef100'. + threads : int + Number of threads to use when downloading the UniRef100 database with `mmseqs`. + """ + # Check which database was given + if database == 'DRAMP': + # Create dir + db = 'amp_DRAMP_database' + os.makedirs(db, exist_ok=True) + # Download the file + try: + url = 'http://dramp.cpu-bioinfor.org/downloads/download.php?filename=download_data/DRAMP3.0_new/general_amps.txt' + response = requests.get(url, allow_redirects=True) + response.raise_for_status() # Check for any download errors + date = datetime.now().strftime("%Y_%m_%d") + with open(db + '/' + f'general_amps_{date}.txt', 'wb') as file: + file.write(response.content) + print(f"File downloaded successfully and saved to {db}/general_amps_{date}.txt") + # Create fasta version and clean it + db_df = pd.read_csv(f'{db}/general_amps_{date}.txt', sep='\t') + records = [] + valid_sequence_pattern = re.compile("^[ACDEFGHIKLMNPQRSTVWY]+$") + for index, row in db_df.iterrows(): + sequence = row['Sequence'] + if valid_sequence_pattern.match(sequence): + record = SeqRecord(Seq(sequence), id=str(row['DRAMP_ID']), description="") + records.append(record) + output_file = f'{db}/general_amps_{date}.fasta' + SeqIO.write(records, output_file, "fasta") + except requests.exceptions.RequestException as e: + print(f"Failed to download DRAMP AMP general database file: {e}") + return + + if database == 'APD': + # Create dir + db = 'amp_APD_database' + os.makedirs(db, exist_ok=True) + # Download the file + try: + url = 'https://aps.unmc.edu/assets/sequences/APD_sequence_release_09142020.fasta' + response = requests.get(url, allow_redirects=True, verify=False) # Disable SSL verification due to site certificate issue + response.raise_for_status() + content = response.text + print("APD AMP database downloaded successfully.") + except requests.exceptions.RequestException as e: + print(f"Failed to download content: {e}") + return + # Save the content line-by-line exactly as is + try: + with open(db + '/' + 'APD_orig.fasta', 'w') as file: + file.write(content) + with open(f'{db}/APD.fasta', 'w') as output_handle: + valid_sequence_pattern = re.compile("^[ACDEFGHIKLMNPQRSTVWY]+$") + for record in SeqIO.parse(f'{db}/APD_orig.fasta', "fasta"): + sequence = str(record.seq) + if valid_sequence_pattern.match(sequence): + SeqIO.write(record, output_handle, "fasta") + os.remove(db + '/' + 'APD_orig.fasta') + print(f"APD AMP database saved successfully to {db}/APD.fasta") + # Fasta to table + headers = [] + sequences = [] + seq_ids = [] + for i, record in enumerate(SeqIO.parse(f'{db}/APD.fasta', "fasta")): + sequence_id = record.description.split('|')[0] + headers.append(record.description) + sequences.append(str(record.seq)) + seq_ids.append(sequence_id) + db_df = pd.DataFrame({ + "APD_ID": seq_ids, + "APD_Description": headers, + "APD_Sequence": sequences}) + db_df.to_csv(f'{db}/APD.txt', sep='\t', index=False, header=True) + os.remove(db + '/' + 'APD.fasta') + # Table to fasta + records = [] + for index, row in db_df.iterrows(): + sequence = row['APD_Sequence'] + record = SeqRecord(Seq(sequence), id=str(row['APD_ID']), description="") + records.append(record) + output_file = f'{db}/APD.fasta' + SeqIO.write(records, output_file, "fasta") + except Exception as e: + print(f"Failed to save APD AMP database: {e}") + + if database == 'UniRef100': + # Create dir + db = 'amp_UniRef100_database' + os.makedirs(db, exist_ok=True) + # Download the file + try: + os.makedirs(f'{db}/mmseqs2', exist_ok=True) + command = f"mmseqs databases UniRef100 {db}/mmseqs2/ref_DB {db}/mmseqs2/tmp --remove-tmp-files true --threads {threads} -v 0" + subprocess.run(command, shell=True, check=True) + print(f"UniRef100 protein database downloaded successfully and saved to {db}/mmseqs2/UniRef100") + except subprocess.CalledProcessError as e: + print(f"Failed to download UniRef100 protein database: {e}") +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Downloads a specified AMP (antimicrobial peptide) reference database based on the provided database name and saves it to the specified directory.") + parser.add_argument("--database_id", dest="database", type=str, required=True, choices=["DRAMP", "APD", "UniRef100"], + help="Database ID - one of DRAMP, APD, or UniRef100. This parameter is required.") + parser.add_argument("--threads", type=int, default=4, + help="Number of threads supplied to mmseqs databases. Only relevant in the case of 'UniRef100'. Default is 4.") -download_DRAMP("amp_ref_database") + args = parser.parse_args() + download_ref_db(args.database, args.threads) diff --git a/modules/local/dramp_download.nf b/modules/local/dramp_download.nf index 8b7eb2d1..7230834c 100644 --- a/modules/local/dramp_download.nf +++ b/modules/local/dramp_download.nf @@ -1,22 +1,27 @@ process DRAMP_DOWNLOAD { label 'process_single' - conda "bioconda::ampcombi=0.2.2" + conda "bioconda::ampcombi=2.0.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ampcombi:0.2.2--pyhdfd78af_0': - 'biocontainers/ampcombi:0.2.2--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/ampcombi:2.0.1--pyhdfd78af_0': + 'biocontainers/ampcombi:2.0.1--pyhdfd78af_0' }" + + input: + val database_id + val threads output: - path "amp_ref_database/" , emit: db - path "versions.yml" , emit: versions + path "amp_${database_id}_database" , emit: db + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: // This script is bundled with the pipeline, in nf-core/funcscan/bin/ """ - mkdir amp_ref_database/ - ampcombi_download.py + ampcombi_download.py \\ + --database_id $database_id \\ + --threads $threads cat <<-END_VERSIONS > versions.yml "${task.process}": From 3aac84a51fe16ff2e09a7720af6f49fd7c5fe32b Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Tue, 3 Dec 2024 12:51:30 +0100 Subject: [PATCH 016/175] update to use ampcombi 2.0.1 --- conf/modules.config | 5 ++-- ...p_download.nf => amp_database_download.nf} | 9 +++---- nextflow.config | 5 ++-- subworkflows/local/amp.nf | 27 ++++++++++++------- 4 files changed, 28 insertions(+), 18 deletions(-) rename modules/local/{dramp_download.nf => amp_database_download.nf} (80%) diff --git a/conf/modules.config b/conf/modules.config index b8c8f747..a74bd80e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -548,6 +548,7 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] ext.args = [ + "--amp_database_dir ${params.amp_ampcombi_db_dir_path}", "--aminoacid_length ${params.amp_ampcombi_parsetables_aalength}", "--db_evalue ${params.amp_ampcombi_parsetables_dbevalue}", "--amp_cutoff ${params.amp_ampcombi_parsetables_cutoff}", @@ -674,9 +675,9 @@ process { ] } - withName: DRAMP_DOWNLOAD { + withName: AMP_DATABASE_DOWNLOAD { publishDir = [ - path: { "${params.outdir}/databases/dramp" }, + path: { "${params.outdir}/databases/${params.amp_ampcombi_db}" }, mode: params.publish_dir_mode, enabled: params.save_db, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } diff --git a/modules/local/dramp_download.nf b/modules/local/amp_database_download.nf similarity index 80% rename from modules/local/dramp_download.nf rename to modules/local/amp_database_download.nf index 7230834c..8e2bc05a 100644 --- a/modules/local/dramp_download.nf +++ b/modules/local/amp_database_download.nf @@ -1,4 +1,4 @@ -process DRAMP_DOWNLOAD { +process AMP_DATABASE_DOWNLOAD { label 'process_single' conda "bioconda::ampcombi=2.0.1" @@ -8,11 +8,10 @@ process DRAMP_DOWNLOAD { input: val database_id - val threads output: - path "amp_${database_id}_database" , emit: db - path "versions.yml" , emit: versions + path "amp_${database_id}_database" , emit: db + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -21,7 +20,7 @@ process DRAMP_DOWNLOAD { """ ampcombi_download.py \\ --database_id $database_id \\ - --threads $threads + --threads ${task.cpus} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/nextflow.config b/nextflow.config index 49f88337..82c6eb5d 100644 --- a/nextflow.config +++ b/nextflow.config @@ -119,8 +119,9 @@ params { amp_hmmsearch_savetargets = false amp_hmmsearch_savedomains = false - amp_ampcombi_db = null - amp_ampcombi_parsetables_cutoff = 0.6 + amp_ampcombi_db = 'DRAMP' + amp_ampcombi_db_dir_path = null + amp_ampcombi_parsetables_cutoff = 0.7 amp_ampcombi_parsetables_ampir = '.ampir.tsv' amp_ampcombi_parsetables_amplify = '.amplify.tsv' amp_ampcombi_parsetables_macrel = '.macrel.prediction' diff --git a/subworkflows/local/amp.nf b/subworkflows/local/amp.nf index 88f75393..f63bf6c5 100644 --- a/subworkflows/local/amp.nf +++ b/subworkflows/local/amp.nf @@ -6,7 +6,7 @@ include { MACREL_CONTIGS } from '.. include { HMMER_HMMSEARCH as AMP_HMMER_HMMSEARCH } from '../../modules/nf-core/hmmer/hmmsearch/main' include { AMPLIFY_PREDICT } from '../../modules/nf-core/amplify/predict/main' include { AMPIR } from '../../modules/nf-core/ampir/main' -include { DRAMP_DOWNLOAD } from '../../modules/local/dramp_download' +include { AMP_DATABASE_DOWNLOAD } from '../../modules/local/amp_database_download' include { AMPCOMBI2_PARSETABLES } from '../../modules/nf-core/ampcombi2/parsetables' include { AMPCOMBI2_COMPLETE } from '../../modules/nf-core/ampcombi2/complete' include { AMPCOMBI2_CLUSTER } from '../../modules/nf-core/ampcombi2/cluster' @@ -110,14 +110,23 @@ workflow AMP { gbk: it[3] } - if ( params.amp_ampcombi_db != null ) { - AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db ) - } else { - DRAMP_DOWNLOAD() - ch_versions = ch_versions.mix( DRAMP_DOWNLOAD.out.versions ) - ch_ampcombi_input_db = DRAMP_DOWNLOAD.out.db - AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, ch_ampcombi_input_db ) - } + //def ch_ampcombi_input_db + if ( params.ampcombi_db_dir_path != null ) { + ch_ampcombi_input_db = Channel.of( file(params.ampcombi_db_dir_path) ) + } else if (ch_ampcombi_input_db == null) { + AMP_DATABASE_DOWNLOAD( params.amp_ampcombi_db ) + ch_versions = ch_versions.mix( AMP_DATABASE_DOWNLOAD.out.versions ) + ch_ampcombi_input_db = AMP_DATABASE_DOWNLOAD.out.db + } + AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db, ch_ampcombi_input_db ) + //if ( params.ampcombi_db_dir_path != null ) { + // AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db, params.ampcombi_db_dir_path ) + // } else { + // AMP_DATABASE_DOWNLOAD( params.amp_ampcombi_db ) + // ch_versions = ch_versions.mix( AMP_DATABASE_DOWNLOAD.out.versions ) + // ch_ampcombi_input_db = AMP_DATABASE_DOWNLOAD.out.db + // AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db, ch_ampcombi_input_db ) + // } ch_versions = ch_versions.mix( AMPCOMBI2_PARSETABLES.out.versions ) ch_ampcombi_summaries = AMPCOMBI2_PARSETABLES.out.tsv.map{ it[1] }.collect() From d8f1f57de2e65e22c8301137b08778da84b1e63a Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Tue, 3 Dec 2024 15:04:42 +0100 Subject: [PATCH 017/175] fix parametrs --- conf/modules.config | 1 - nextflow.config | 4 ++-- subworkflows/local/amp.nf | 15 +++------------ 3 files changed, 5 insertions(+), 15 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index a74bd80e..59b5738f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -548,7 +548,6 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] ext.args = [ - "--amp_database_dir ${params.amp_ampcombi_db_dir_path}", "--aminoacid_length ${params.amp_ampcombi_parsetables_aalength}", "--db_evalue ${params.amp_ampcombi_parsetables_dbevalue}", "--amp_cutoff ${params.amp_ampcombi_parsetables_cutoff}", diff --git a/nextflow.config b/nextflow.config index 82c6eb5d..4c98910d 100644 --- a/nextflow.config +++ b/nextflow.config @@ -121,12 +121,12 @@ params { amp_ampcombi_db = 'DRAMP' amp_ampcombi_db_dir_path = null - amp_ampcombi_parsetables_cutoff = 0.7 + amp_ampcombi_parsetables_cutoff = 0.6 amp_ampcombi_parsetables_ampir = '.ampir.tsv' amp_ampcombi_parsetables_amplify = '.amplify.tsv' amp_ampcombi_parsetables_macrel = '.macrel.prediction' amp_ampcombi_parsetables_hmmsearch = '.hmmer_hmmsearch.txt' - amp_ampcombi_parsetables_aalength = 100 + amp_ampcombi_parsetables_aalength = 120 amp_ampcombi_parsetables_dbevalue = 5 amp_ampcombi_parsetables_hmmevalue = 0.06 amp_ampcombi_parsetables_windowstopcodon = 60 diff --git a/subworkflows/local/amp.nf b/subworkflows/local/amp.nf index f63bf6c5..f64ec770 100644 --- a/subworkflows/local/amp.nf +++ b/subworkflows/local/amp.nf @@ -110,23 +110,14 @@ workflow AMP { gbk: it[3] } - //def ch_ampcombi_input_db - if ( params.ampcombi_db_dir_path != null ) { - ch_ampcombi_input_db = Channel.of( file(params.ampcombi_db_dir_path) ) - } else if (ch_ampcombi_input_db == null) { + if ( params.amp_ampcombi_db_dir_path != null ) { + ch_ampcombi_input_db = Channel.of( file(params.amp_ampcombi_db_dir_path) ) + } else { AMP_DATABASE_DOWNLOAD( params.amp_ampcombi_db ) ch_versions = ch_versions.mix( AMP_DATABASE_DOWNLOAD.out.versions ) ch_ampcombi_input_db = AMP_DATABASE_DOWNLOAD.out.db } AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db, ch_ampcombi_input_db ) - //if ( params.ampcombi_db_dir_path != null ) { - // AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db, params.ampcombi_db_dir_path ) - // } else { - // AMP_DATABASE_DOWNLOAD( params.amp_ampcombi_db ) - // ch_versions = ch_versions.mix( AMP_DATABASE_DOWNLOAD.out.versions ) - // ch_ampcombi_input_db = AMP_DATABASE_DOWNLOAD.out.db - // AMPCOMBI2_PARSETABLES ( ch_input_for_ampcombi.input, ch_input_for_ampcombi.faa, ch_input_for_ampcombi.gbk, params.amp_ampcombi_db, ch_ampcombi_input_db ) - // } ch_versions = ch_versions.mix( AMPCOMBI2_PARSETABLES.out.versions ) ch_ampcombi_summaries = AMPCOMBI2_PARSETABLES.out.tsv.map{ it[1] }.collect() From e670a3c91d79b8eb3327a1da8cec4b5137cc229b Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Tue, 3 Dec 2024 15:50:27 +0100 Subject: [PATCH 018/175] Update nf_schema --- nextflow_schema.json | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 6b56c8f1..4dc2ed0f 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -153,14 +153,14 @@ }, "taxa_classification_mmseqs_taxonomy_sensitivity": { "type": "number", - "default": 5.0, + "default": 5, "help_text": "This flag specifies the speed and sensitivity of the taxonomic search. It stands for how many kmers should be produced during the preliminary seeding stage. A very fast search requires a low value e.g. '1.0' and a a very sensitive search requires e.g. '7.0'. More details can be found in the [documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - mmseqs taxonomy: `-s`", "description": "Specify the speed and sensitivity for taxonomy assignment.", "fa_icon": "fas fa-history" }, "taxa_classification_mmseqs_taxonomy_orffilters": { "type": "number", - "default": 2.0, + "default": 2, "help_text": "This flag specifies the sensitivity used for prefiltering the query ORF. Before the taxonomy-assigning step, MMseqs2 searches the predicted ORFs against the provided database. This value influences the speed with which the search is carried out. More details can be found in the [documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - mmseqs taxonomy: `--orf-filter-s`", "description": "Specify the ORF search sensitivity in the prefilter step.", "fa_icon": "fas fa-history" @@ -628,9 +628,16 @@ "properties": { "amp_ampcombi_db": { "type": "string", - "description": "Path to AMPcombi reference database directory (DRAMP).", - "help_text": "AMPcombi uses the 'general AMPs' dataset of the [DRAMP database](http://dramp.cpu-bioinfor.org/downloads/) for taxonomic classification. If you have a local version of it, you can provide the path to the directory(!) that contains the following reference database files:\n1. fasta file with `.fasta` file extension\n2. the corresponding table with with functional and taxonomic classifications in `.tsv` file extension.\n\nThe contents of the directory should have files such as `*.dmnd` and `*.fasta` in the top level.\n\nFor more information check the AMPcombi [documentation](https://github.com/Darcy220606/AMPcombi).", - "fa_icon": "fas fa-address-book" + "description": "The name of the database used to classify the AMPs.", + "help_text": "AMPcombi can use three different AMP databases to classify the recovered AMPS. These can either be: \n\n- [DRAMP database](http://dramp.cpu-bioinfor.org/downloads/): Only general AMPs are downloaded and filtered to remove any entry that has an instance of non amino acid residues in their sequence.\n\n- [APD](https://aps.unmc.edu/): Only experimentally validated AMPs are present.\n\n- [UniRef100](https://academic.oup.com/bioinformatics/article/23/10/1282/197795): Combines a more general protein dataset including curated and non curated AMPs. Helpful for identifying the clusters to remove any potential false positives. Beware: If the thresholds are for ampcombi are not strict enough, alignment with this database can take a long time. \n\nBy default this is set to 'DRAMP'. Other valid options include 'APD' or 'UniRef100'.\n\nFor more information check the AMPcombi [documentation](https://ampcombi.readthedocs.io/en/main/usage.html#parse-tables).", + "fa_icon": "fas fa-address-book", + "default": "DRAMP", + "enum": ["DRAMP", "APD", "UniRef100"] + }, + "amp_ampcombi_db_dir_path": { + "type": "string", + "description": "The path to the folder containing the reference database files.", + "help_text": "The path to the folder containing the reference database files (`*.fasta` and `*.tsv`); a fasta file and the corresponding table with structural, functional and if reported taxonomic classifications. AMPcombi will then generate the corresponding `mmseqs2` directory, in which all binary files are prepared for the downstream alignment of teh recovered AMPs with [MMseqs2](https://github.com/soedinglab/MMseqs2). These can also be provided by the user by setting up an mmseqs2 compatible database using `mmseqs createdb *.fasta` in a directory called `mmseqs2`.\n\nExample file structure for the reference database supplied by the user:\n\n```bash\namp_DRAMP_database/\n\u251c\u2500\u2500 general_amps_2024_11_13.fasta\n\u251c\u2500\u2500 general_amps_2024_11_13.txt\n\u2514\u2500\u2500 mmseqs2\n \u251c\u2500\u2500 ref_DB\n \u251c\u2500\u2500 ref_DB.dbtype\n \u251c\u2500\u2500 ref_DB_h\n \u251c\u2500\u2500 ref_DB_h.dbtype\n \u251c\u2500\u2500 ref_DB_h.index\n \u251c\u2500\u2500 ref_DB.index\n \u251c\u2500\u2500 ref_DB.lookup\n \u2514\u2500\u2500 ref_DB.source\n\nFor more information check the AMPcombi [documentation](https://ampcombi.readthedocs.io/en/main/usage.html#parse-tables)." }, "amp_ampcombi_parsetables_cutoff": { "type": "number", @@ -641,14 +648,14 @@ }, "amp_ampcombi_parsetables_aalength": { "type": "integer", - "default": 100, + "default": 120, "description": "Filter out all amino acid fragments shorter than this number.", "help_text": "Any AMP hit that does not satisfy this length cut-off will be removed from the final AMPcombi2 summary table.\n\n> Modifies tool parameter(s):\n> - AMPCOMBI: `--aminoacid_length`", "fa_icon": "fas fa-ruler-horizontal" }, "amp_ampcombi_parsetables_dbevalue": { "type": "number", - "default": 5.0, + "default": 5, "description": "Remove all DRAMP annotations that have an e-value greater than this value.", "help_text": "This e-value is used as a cut-off for the annotations from the internal Diamond alignment step (against the DRAMP database by default). Any e-value below this value will only remove the DRAMP classification and not the entire hit.\n\n> Modifies tool parameter(s):\n> - AMPCOMBI: `--db_evalue`", "fa_icon": "fas fa-sort-numeric-down" @@ -719,14 +726,14 @@ "properties": { "amp_ampcombi_cluster_covmode": { "type": "number", - "default": 0.0, + "default": 0, "description": "MMseqs2 coverage mode.", "help_text": "This assigns the coverage mode to the MMseqs2 cluster module. This determines how AMPs are grouped into clusters. More details can be found in the [MMseqs2 documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - AMPCOMBI: `--cluster_cov_mode`", "fa_icon": "far fa-circle" }, "amp_ampcombi_cluster_sensitivity": { "type": "number", - "default": 4.0, + "default": 4, "description": "Remove hits that have no stop codon upstream and downstream of the AMP.", "help_text": "This assigns the sensitivity of alignment to the MMseqs2 cluster module. This determines how AMPs are grouped into clusters. More information can be obtained in the [MMseqs2 documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - AMPCOMBI: `--cluster_sensitivity`", "fa_icon": "fas fa-arrows-alt-h" @@ -740,7 +747,7 @@ }, "amp_ampcombi_cluster_mode": { "type": "number", - "default": 1.0, + "default": 1, "description": "MMseqs2 clustering mode.", "help_text": "This assigns the cluster mode to the MMseqs2 cluster module. This determines how AMPs are grouped into clusters. More information can be obtained in the [MMseqs2 documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - AMPCOMBI: `--cluster_mode`", "fa_icon": "fas fa-circle" @@ -788,7 +795,7 @@ }, "arg_amrfinderplus_identmin": { "type": "number", - "default": -1.0, + "default": -1, "help_text": "Specify the minimum percentage amino-acid identity to reference protein or nucleotide identity for nucleotide reference must have if a BLAST alignment (based on methods: BLAST or PARTIAL) was detected, otherwise NA.\n\n If you specify `-1`, this means use a curated threshold if it exists and `0.9` otherwise.\n\nSetting this value to something other than `-1` will override any curated similarity cutoffs. For BLAST: alignment is > 90% of length and > 90% identity to a protein in the AMRFinderPlus database. For PARTIAL: alignment is > 50% of length, but < 90% of length and > 90% identity to the reference, and does not end at a contig boundary.\n\nFor more information check the AMRFinderPlus [documentation](https://github.com/ncbi/amr/wiki/Running-AMRFinderPlus#--organism-option).\n\n> Modifies tool parameter(s):\n> - AMRFinderPlus: `--ident_min`", "description": "Minimum percent identity to reference sequence.", "fa_icon": "fas fa-angle-left" From 892b43de08298b07afc60c6255a11b87d202e21c Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Tue, 3 Dec 2024 16:03:14 +0100 Subject: [PATCH 019/175] fix schema values --- nextflow_schema.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 4dc2ed0f..bc2eae35 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -153,14 +153,14 @@ }, "taxa_classification_mmseqs_taxonomy_sensitivity": { "type": "number", - "default": 5, + "default": 5.0, "help_text": "This flag specifies the speed and sensitivity of the taxonomic search. It stands for how many kmers should be produced during the preliminary seeding stage. A very fast search requires a low value e.g. '1.0' and a a very sensitive search requires e.g. '7.0'. More details can be found in the [documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - mmseqs taxonomy: `-s`", "description": "Specify the speed and sensitivity for taxonomy assignment.", "fa_icon": "fas fa-history" }, "taxa_classification_mmseqs_taxonomy_orffilters": { "type": "number", - "default": 2, + "default": 2.0, "help_text": "This flag specifies the sensitivity used for prefiltering the query ORF. Before the taxonomy-assigning step, MMseqs2 searches the predicted ORFs against the provided database. This value influences the speed with which the search is carried out. More details can be found in the [documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - mmseqs taxonomy: `--orf-filter-s`", "description": "Specify the ORF search sensitivity in the prefilter step.", "fa_icon": "fas fa-history" @@ -655,7 +655,7 @@ }, "amp_ampcombi_parsetables_dbevalue": { "type": "number", - "default": 5, + "default": 5.0, "description": "Remove all DRAMP annotations that have an e-value greater than this value.", "help_text": "This e-value is used as a cut-off for the annotations from the internal Diamond alignment step (against the DRAMP database by default). Any e-value below this value will only remove the DRAMP classification and not the entire hit.\n\n> Modifies tool parameter(s):\n> - AMPCOMBI: `--db_evalue`", "fa_icon": "fas fa-sort-numeric-down" @@ -726,14 +726,14 @@ "properties": { "amp_ampcombi_cluster_covmode": { "type": "number", - "default": 0, + "default": 0.0, "description": "MMseqs2 coverage mode.", "help_text": "This assigns the coverage mode to the MMseqs2 cluster module. This determines how AMPs are grouped into clusters. More details can be found in the [MMseqs2 documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - AMPCOMBI: `--cluster_cov_mode`", "fa_icon": "far fa-circle" }, "amp_ampcombi_cluster_sensitivity": { "type": "number", - "default": 4, + "default": 4.0, "description": "Remove hits that have no stop codon upstream and downstream of the AMP.", "help_text": "This assigns the sensitivity of alignment to the MMseqs2 cluster module. This determines how AMPs are grouped into clusters. More information can be obtained in the [MMseqs2 documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - AMPCOMBI: `--cluster_sensitivity`", "fa_icon": "fas fa-arrows-alt-h" @@ -747,7 +747,7 @@ }, "amp_ampcombi_cluster_mode": { "type": "number", - "default": 1, + "default": 1.0, "description": "MMseqs2 clustering mode.", "help_text": "This assigns the cluster mode to the MMseqs2 cluster module. This determines how AMPs are grouped into clusters. More information can be obtained in the [MMseqs2 documentation](https://mmseqs.com/latest/userguide.pdf).\n\n> Modifies tool parameter(s):\n> - AMPCOMBI: `--cluster_mode`", "fa_icon": "fas fa-circle" @@ -795,7 +795,7 @@ }, "arg_amrfinderplus_identmin": { "type": "number", - "default": -1, + "default": -1.0, "help_text": "Specify the minimum percentage amino-acid identity to reference protein or nucleotide identity for nucleotide reference must have if a BLAST alignment (based on methods: BLAST or PARTIAL) was detected, otherwise NA.\n\n If you specify `-1`, this means use a curated threshold if it exists and `0.9` otherwise.\n\nSetting this value to something other than `-1` will override any curated similarity cutoffs. For BLAST: alignment is > 90% of length and > 90% identity to a protein in the AMRFinderPlus database. For PARTIAL: alignment is > 50% of length, but < 90% of length and > 90% identity to the reference, and does not end at a contig boundary.\n\nFor more information check the AMRFinderPlus [documentation](https://github.com/ncbi/amr/wiki/Running-AMRFinderPlus#--organism-option).\n\n> Modifies tool parameter(s):\n> - AMRFinderPlus: `--ident_min`", "description": "Minimum percent identity to reference sequence.", "fa_icon": "fas fa-angle-left" From 2d7758cd428899294fd3a87009f6658516742c35 Mon Sep 17 00:00:00 2001 From: darcy220606 Date: Wed, 4 Dec 2024 10:32:43 +0100 Subject: [PATCH 020/175] update the docs --- CHANGELOG.md | 8 ++++++++ docs/output.md | 19 ++++++++++--------- docs/usage.md | 27 ++++++++++++++++++++++++--- 3 files changed, 42 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e889026..d535af2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,10 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` +- [#427](https://github.com/nf-core/funcscan/pull/427) Updated AMPcombi from v0.2.2 to v2.0.1. AMP now can use multiple other databases for classifications. (by @darcy220606) + ### `Fixed` +- [#427](https://github.com/nf-core/funcscan/pull/427) Fixed the AMP reference database issues reported by users, due to non-ASCII characters. (by @darcy220606) + ### `Dependencies` +| Tool | Previous version | New version | +| ------------- | ---------------- | ----------- | +| AMPcombi | 0.2.2 | 2.0.1 | + ### `Deprecated` ## v2.0.0 - [2024-09-05] diff --git a/docs/output.md b/docs/output.md index 9f71278a..5480716a 100644 --- a/docs/output.md +++ b/docs/output.md @@ -443,9 +443,7 @@ Note that filtered FASTA is only used for BGC workflow for run-time optimisation [GECCO](https://gecco.embl.de) is a fast and scalable method for identifying putative novel Biosynthetic Gene Clusters (BGCs) in genomic and metagenomic data using Conditional Random Fields (CRFs). -### Summary tools - -[AMPcombi](#ampcombi), [hAMRonization](#hamronization), [comBGC](#combgc), [MultiQC](#multiqc), [pipeline information](#pipeline-information), [argNorm](#argnorm). +### Summary too](#ampcombi), [hAMRonization](#hamronization), [comBGC](#combgc), [MultiQC](#multiqc), [pipeline information](#pipeline-information), [argNorm](#argnorm). #### AMPcombi @@ -457,15 +455,15 @@ Note that filtered FASTA is only used for BGC workflow for run-time optimisation - `Ampcombi_parse_tables.log`: log file containing the run information from AMPcombi submodule `ampcombi2/parsetables` - `Ampcombi_complete.log`: log file containing the run information from AMPcombi submodule `ampcombi2/complete` - `Ampcombi_summary_cluster.tsv`: tab-separated table containing the clustered AMP hits. This is the output given when the taxonomic classification is not activated (pipeline default). - - `Ampcombi_summary_cluster_representative_seq.tsv`: tab-separated table containing the representative sequence of each cluster. This can be used in AMPcombi for constructing 3D structures using ColabFold. For more details on how to do this, please refer to the [AMPcombi documentation](https://github.com/Darcy220606/AMPcombi/blob/main/README.md). + - `Ampcombi_summary_cluster_representative_seq.tsv`: tab-separated table containing the representative sequence of each cluster. This can be used in AMPcombi for constructing 3D structures using ColabFold. For more details on how to do this, please refer to the [AMPcombi documentation](https://ampcombi.readthedocs.io/en/main/). - `Ampcombi_cluster.log`: log file containing the run information from AMPcombi submodule `ampcombi2/cluster` - `ampcombi_complete_summary_taxonomy.tsv.gz`: summarised output from all AMP workflow tools with taxonomic assignment in compressed tsv format. This is the same output as `Ampcombi_summary_cluster.tsv` file but with taxonomic classification of the contig. - `/contig_gbks`: contains all the contigs in gbk format that an AMP was found on using the custom parameters - `/*_ampcombi.log`: a log file generated by AMPcombi - `/*_ampcombi.tsv`: summarised output in tsv format for each sample - `/*_amp.faa*`: fasta file containing the amino acid sequences for all AMP hits for each sample - - `/*_diamond_matches.txt*`: alignment file generated by DIAMOND for each sample - AMP summary table header descriptions + - `/*_mmseqs_matches.txt*`: alignment file generated by NMseqs2 for each sample + AMP summary table header descriptions using DRAMP as reference database | Table column | Description | | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -477,9 +475,9 @@ Note that filtered FASTA is only used for BGC workflow for run-time optimisation | `prob_amplify` | Probability associated with the AMP prediction using `AMPLIFY` | | `evalue_hmmer` | Expected number of false positives (nonhomologous sequences) with a similar of higher score. This stands for how significant the hit is, the lower the evalue, the more significant the hit | | `aa_sequence` | Amino acid sequence that forms part of the contig and is AMP encoding | -| `target_id` | [DRAMP](http://dramp.cpu-bioinfor.org/) ID within the database found to be similar to the predicted AMP by `DIAMOND` alignment | +| `target_id` | [DRAMP](http://dramp.cpu-bioinfor.org/) ID within the database found to be similar to the predicted AMP by `MMseqs2` alignment | | `pident` | Percentage identity of amino acid residues that fully aligned between the `DRAMP` sequence and the predicted AMP sequence | -| `evalue` | Number of alignments of similar or better qualities that can be expected when searching a database of similar size with a random sequence distribution. This is generated by `DIAMOND` alignments using the [DRAMP](http://dramp.cpu-bioinfor.org/) AMP database. The lower the value the more significant that the hit is positive. An e-value of < 0.001 means that the this hit will be found by chance once per 1,0000 queries | +| `evalue` | Number of alignments of similar or better qualities that can be expected when searching a database of similar size with a random sequence distribution. This is generated by `MMseqs2` alignments using the [DRAMP](http://dramp.cpu-bioinfor.org/) AMP database. The lower the value the more significant that the hit is positive. An e-value of < 0.001 means that the this hit will be found by chance once per 1,0000 queries | | `Sequence` | Sequence corresponding to the `DRAMP` ID found to be similar to the predicted AMP sequence | | `Sequence_length` | Number of amino acid residues in the `DRAMP` sequence | | `Name` | Full name of the peptide copied from the database it was uploaded to | @@ -510,7 +508,10 @@ Note that filtered FASTA is only used for BGC workflow for run-time optimisation