diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 67f02e93..d57d58c5 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,4 +1,4 @@ -# nf-core/mag: Contributing Guidelines +# `nf-core/mag`: Contributing Guidelines Hi there! Many thanks for taking an interest in improving nf-core/mag. @@ -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/mag documentation](htt ## Pipeline contribution conventions -To make the nf-core/mag 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/mag` 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 395b231c..b4ca4528 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,19 +19,30 @@ jobs: if: github.repository == 'nf-core/mag' && 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?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 with: diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index cdede3cc..f5433c71 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/mag' 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 d2fa6e12..1effbc06 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,7 +50,7 @@ jobs: sudo rm -rf "$AGENT_TOOLSDIRECTORY" - 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 @@ -130,36 +130,3 @@ jobs: - name: Run pipeline with ${{ matrix.test_name }} test profile run: | nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},docker --outdir ./results - - checkm: - name: Run single test to checkm due to database download - # 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/mag') }} - runs-on: ubuntu-latest - - steps: - - name: Free some space - run: | - sudo rm -rf "/usr/local/share/boost" - sudo rm -rf "$AGENT_TOOLSDIRECTORY" - - - name: Check out pipeline code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4 - - - name: Install Nextflow - run: | - wget -qO- get.nextflow.io | bash - sudo mv nextflow /usr/local/bin/ - - - name: Clean up Disk space - uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - - name: Download and prepare CheckM database - run: | - mkdir -p databases/checkm - wget https://zenodo.org/records/7401545/files/checkm_data_2015_01_16.tar.gz -P databases/checkm - tar xzvf databases/checkm/checkm_data_2015_01_16.tar.gz -C databases/checkm/ - - - name: Run pipeline with ${{ matrix.profile }} test profile - run: | - nextflow run ${GITHUB_WORKSPACE} -profile test,docker --outdir ./results --binqc_tool checkm --checkm_db databases/checkm 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 7e078152..b43318ef 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 f945d00c..d090b0ac 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,4 +1,3 @@ -bump_version: null lint: files_unchanged: - lib/NfcoreTemplate.groovy @@ -6,17 +5,15 @@ lint: - config_defaults: - params.phix_reference - params.lambda_reference -nf_core_version: 3.0.2 -org_path: null +nf_core_version: 3.1.0 repository_type: pipeline template: - author: "Hadrien Gourlé, Daniel Straub, Sabrina Krakau, James A. Fellows Yates, Maxime Borry" + author: "Hadrien Gourlé, Daniel Straub, Sabrina Krakau, James A. Fellows Yates, + Maxime Borry" description: Assembly, binning and annotation of metagenomes force: false is_nfcore: true name: mag org: nf-core outdir: . - skip_features: null - version: 3.2.1 -update: null + version: 3.3.0 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/CHANGELOG.md b/CHANGELOG.md index f7b929e3..3234b7dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,41 @@ 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). +## 3.3.0 [2024-12-19] + +### `Added` + +- [#692](https://github.com/nf-core/mag/pull/692) - Added Nanoq as optional longread filtering tool (added by @muabnezor) +- [#692](https://github.com/nf-core/mag/pull/692) - Added chopper as optional longread filtering tool and/or phage lambda removal tool (added by @muabnezor) +- [#707](https://github.com/nf-core/mag/pull/707) - Make Bin QC a subworkflow (added by @dialvarezs) +- [#707](https://github.com/nf-core/mag/pull/707) - Added CheckM2 as an alternative bin completeness and QC tool (added by @dialvarezs) +- [#708](https://github.com/nf-core/mag/pull/708) - Added `--exclude_unbins_from_postbinning` parameter to exclude unbinned contigs from post-binning processes, speeding up Prokka in some cases (added by @dialvarezs) +- [#732](https://github.com/nf-core/mag/pull/732) - Added support for Prokka's compliance mode with `--prokka_with_compliance --prokka_compliance_centre ` (reported by @audy and @Thomieh73, added by @jfy133) + +### `Changed` + +- [#731](https://github.com/nf-core/mag/pull/731) - Updated to nf-core 3.1.0 `TEMPLATE` (by @jfy133) + +### `Fixed` + +- [#707](https://github.com/nf-core/mag/pull/708) - Fixed channel passed as GUNC input (added by @dialvarezs) +- [#724](https://github.com/nf-core/mag/pull/724) - Fix quoting in `utils_nfcore_mag_pipeline/main.nf` (added by @dialvarezs) +- [#716](https://github.com/nf-core/mag/pull/692) - Make short read processing a subworkflow (added by @muabnezor) +- [#708](https://github.com/nf-core/mag/pull/708) - Fixed channel passed as GUNC input (added by @dialvarezs) +- [#729](https://github.com/nf-core/mag/pull/729) - Fixed misspecified multi-FASTQ input for single-end data in MEGAHIT (reported by John Richards, fix by @jfy133) + +### `Dependencies` + +| Tool | Previous version | New version | +| ------- | ---------------- | ----------- | +| CheckM | 1.2.1 | 1.2.3 | +| CheckM2 | | 1.0.2 | +| chopper | | 0.9.0 | +| GUNC | 1.0.5 | 1.0.6 | +| nanoq | | 0.10.0 | + +### `Deprecated` + ## 3.2.1 [2024-10-30] ### `Added` diff --git a/CITATIONS.md b/CITATIONS.md index 52caa1e6..2feb3693 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -40,6 +40,14 @@ > Parks, D. H., Imelfort, M., Skennerton, C. T., Hugenholtz, P., & Tyson, G. W. (2015). CheckM: assessing the quality of microbial genomes recovered from isolates, single cells, and metagenomes. Genome Research, 25(7), 1043–1055. doi: 10.1101/gr.186072.114 +- [CheckM2](https://doi.org/10.1038/s41592-023-01940-w) + + > Chklovski, A., Parks, D. H., Woodcroft, B. J., & Tyson, G. W. (2023). CheckM2: a rapid, scalable and accurate tool for assessing microbial genome quality using machine learning. Nature Methods, 20(8), 1203-1212. doi: https://doi.org/10.1038/s41592-023-01940-w + +- [Chopper](https://doi.org/10.1093/bioinformatics/bty149) + + > De Coster W, D'Hert S, Schultz DT, Cruts M, Van Broeckhoven C. NanoPack: visualizing and processing long-read sequencing data. Bioinformatics. 2018 Aug 1;34(15):2666-2669. doi: 10.1093/bioinformatics/bty149 + - [CONCOCT](https://doi.org/10.1038/nmeth.3103) > Alneberg, J., Bjarnason, B. S., de Bruijn, I., Schirmer, M., Quick, J., Ijaz, U. Z., Lahti, L., Loman, N. J., Andersson, A. F., & Quince, C. (2014). Binning metagenomic contigs by coverage and composition. Nature Methods, 11(11), 1144–1146. doi: 10.1038/nmeth.3103 @@ -114,6 +122,10 @@ > De Coster, W., D’Hert, S., Schultz, D. T., Cruts, M., & Van Broeckhoven, C. (2018). NanoPack: visualizing and processing long-read sequencing data. Bioinformatics, 34(15), 2666-2669. doi: 10.1093/bioinformatics/bty149. +- [Nanoq](https://doi.org/10.21105/joss.02991) + + > Steinig, E., Coin, L. (2022). Nanoq: ultra-fast quality control for nanopore reads. Journal of Open Source Software, 7(69), 2991, doi: 10.21105/joss.02991 + - [Porechop](https://github.com/rrwick/Porechop) - [Porechop-abi](https://github.com/bonsai-team/Porechop_ABI) diff --git a/README.md b/README.md index d82f04a9..a5ae232f 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ The pipeline then: - performs assembly using [MEGAHIT](https://github.com/voutcn/megahit) and [SPAdes](http://cab.spbu.ru/software/spades/), and checks their quality using [Quast](http://quast.sourceforge.net/quast) - (optionally) performs ancient DNA assembly validation using [PyDamage](https://github.com/maxibor/pydamage) and contig consensus sequence recalling with [Freebayes](https://github.com/freebayes/freebayes) and [BCFtools](http://samtools.github.io/bcftools/bcftools.html) - predicts protein-coding genes for the assemblies using [Prodigal](https://github.com/hyattpd/Prodigal), and bins with [Prokka](https://github.com/tseemann/prokka) and optionally [MetaEuk](https://www.google.com/search?channel=fs&client=ubuntu-sn&q=MetaEuk) -- performs metagenome binning using [MetaBAT2](https://bitbucket.org/berkeleylab/metabat/src/master/), [MaxBin2](https://sourceforge.net/projects/maxbin2/), and/or with [CONCOCT](https://github.com/BinPro/CONCOCT), and checks the quality of the genome bins using [Busco](https://busco.ezlab.org/), or [CheckM](https://ecogenomics.github.io/CheckM/), and optionally [GUNC](https://grp-bork.embl-community.io/gunc/). +- performs metagenome binning using [MetaBAT2](https://bitbucket.org/berkeleylab/metabat/src/master/), [MaxBin2](https://sourceforge.net/projects/maxbin2/), and/or with [CONCOCT](https://github.com/BinPro/CONCOCT), and checks the quality of the genome bins using [Busco](https://busco.ezlab.org/), [CheckM](https://ecogenomics.github.io/CheckM/), or [CheckM2](https://github.com/chklovski/CheckM2) and optionally [GUNC](https://grp-bork.embl-community.io/gunc/). - Performs ancient DNA validation and repair with [pyDamage](https://github.com/maxibor/pydamage) and [freebayes](https://github.com/freebayes/freebayes) - optionally refines bins with [DAS Tool](https://github.com/cmks/DAS_Tool) - assigns taxonomy to bins using [GTDB-Tk](https://github.com/Ecogenomics/GTDBTk) and/or [CAT](https://github.com/dutilh/CAT) and optionally identifies viruses in assemblies using [geNomad](https://github.com/apcamargo/genomad), or Eukaryotes with [Tiara](https://github.com/ibe-uw/tiara) @@ -90,6 +90,7 @@ Other code contributors include: - [Phil Palmer](https://github.com/PhilPalmer) - [@willros](https://github.com/willros) - [Adam Rosenbaum](https://github.com/muabnezor) +- [Diego Alvarez](https://github.com/dialvarezs) Long read processing was inspired by [caspargross/HybridAssembly](https://github.com/caspargross/HybridAssembly) written by Caspar Gross [@caspargross](https://github.com/caspargross) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 434dfa7b..cfa40879 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,8 @@ report_comment: > - This report has been generated by the nf-core/mag - analysis pipeline. For information about how to interpret these results, please see the - documentation. + This report has been generated by the nf-core/mag analysis pipeline. For information about how to + interpret these results, please see the documentation. report_section_order: "nf-core-mag-methods-description": order: -1000 @@ -50,7 +51,8 @@ top_modules: - "*_phix_removed.bowtie2.log" - "bowtie2": name: "Bowtie2: host removal" - info: "Mapping statistics of reads mapped against host genome and subsequently removed." + info: "Mapping statistics of reads mapped against host genome and subsequently + removed." path_filters: - "*_host_removed.bowtie2.log" - "kraken": @@ -65,8 +67,13 @@ top_modules: anchor: "centrifuge" target: "Centrifuge" doi: "10.1101/gr.210641.116" - info: "is a very rapid and memory-efficient system for the classification of DNA sequences from microbial samples. The system uses a novel indexing scheme based on the Burrows-Wheeler transform (BWT) and the Ferragina-Manzini (FM) index. Note: Figure title" - extra: "ℹ️: plot title will say Kraken2 due to Centrifuge producing the same output format as Kraken. If activated, see the actual Kraken2 results in the section above." + info: "is a very rapid and memory-efficient system for the classification of DNA + sequences from microbial samples. The system uses a novel indexing scheme based + on the Burrows-Wheeler transform (BWT) and the Ferragina-Manzini (FM) index. + Note: Figure title" + extra: "ℹ️: plot title will say Kraken2 due to Centrifuge producing the same output + format as Kraken. If activated, see the actual Kraken2 results in the section + above." path_filters: - "*.centrifuge_kreport.txt" - "quast": @@ -88,14 +95,20 @@ top_modules: path_filters_exclude: - "*rawassemblies.tsv" - "busco": - info: "assesses genome assembly and annotation completeness with Benchmarking Universal Single-Copy Orthologs. In case BUSCO's automated lineage selection was used, only generic results for the selected domain are shown and only for genome bins and kept, unbinned contigs for which the BUSCO analysis was successfull, i.e. not for contigs for which no BUSCO genes could be found. Bins for which a specific virus lineage was selected are also not shown." + info: "assesses genome assembly and annotation completeness with Benchmarking + Universal Single-Copy Orthologs. In case BUSCO's automated lineage selection + was used, only generic results for the selected domain are shown and only for + genome bins and kept, unbinned contigs for which the BUSCO analysis was successfull, + i.e. not for contigs for which no BUSCO genes could be found. Bins for which + a specific virus lineage was selected are also not shown." - "prokka" custom_data: host_removal: file_format: "tsv" section_name: "Bowtie 2: host read removal" - description: "Reads are mapped against the host reference sequence. Only reads that do not align (concordantly) are kept for further analysis." + description: "Reads are mapped against the host reference sequence. Only reads + that do not align (concordantly) are kept for further analysis." plot_type: "bargraph" pconfig: id: "host_removal_bargraph" @@ -131,40 +144,40 @@ custom_logo_url: https://github.com/nf-core/mag/ custom_logo_title: "nf-core/mag" ## Tool specific configuration -prokka_fn_snames: True +prokka_fn_snames: true ## General Stats customisation table_columns_visible: "FastQC: raw reads": - avg_sequence_length: True + avg_sequence_length: true "FastQC: after preprocessing": - avg_sequence_length: True + avg_sequence_length: true "fastp": - pct_duplication: False - after_filtering_q30_rate: False - after_filtering_q30_bases: False + pct_duplication: false + after_filtering_q30_rate: false + after_filtering_q30_bases: false filtering_result_passed_filter_reads: 3300 - after_filtering_gc_content: False - pct_surviving: True - pct_adapter: True - "Kraken2": False - "Centrifuge": False + after_filtering_gc_content: false + pct_surviving: true + pct_adapter: true + "Kraken2": false + "Centrifuge": false "QUAST: assembly": - N75: True - L50: True - L75: True - "Largest contig": True - "Total length": True - N50: True - "Bowtie2: assembly": False + N75: true + L50: true + L75: true + "Largest contig": true + "Total length": true + N50: true + "Bowtie2: assembly": false "QUAST: bins": - N75: True - L50: True - L75: True - "Largest contig": True - "Total length": True - N50: True - "Prokka": False + N75: true + L50: true + L75: true + "Largest contig": true + "Total length": true + N50: true + "Prokka": false table_columns_placement: "FastQC: raw reads": @@ -244,6 +257,6 @@ table_columns_name: custom_table_header_config: general_stats_table: "Total length": - hidden: True + hidden: true N50: - hidden: True + hidden: true diff --git a/bin/combine_tables.py b/bin/combine_tables.py index a2dcf986..2b8d3767 100755 --- a/bin/combine_tables.py +++ b/bin/combine_tables.py @@ -3,10 +3,9 @@ ## Originally written by Daniel Straub and Sabrina Krakau and released under the MIT license. ## See git repository (https://github.com/nf-core/mag) for full license text. - -import sys import argparse -import os.path +import sys + import pandas as pd @@ -19,19 +18,14 @@ def parse_args(args=None): metavar="FILE", help="Bin depths summary file.", ) + parser.add_argument("-b", "--binqc_summary", metavar="FILE", help="BUSCO summary file.") + parser.add_argument("-q", "--quast_summary", metavar="FILE", help="QUAST BINS summary file.") + parser.add_argument("-g", "--gtdbtk_summary", metavar="FILE", help="GTDB-Tk summary file.") + parser.add_argument("-a", "--cat_summary", metavar="FILE", help="CAT table file.") parser.add_argument( - "-b", "--busco_summary", metavar="FILE", help="BUSCO summary file." - ) - parser.add_argument( - "-c", "--checkm_summary", metavar="FILE", help="CheckM summary file." - ) - parser.add_argument( - "-q", "--quast_summary", metavar="FILE", help="QUAST BINS summary file." - ) - parser.add_argument( - "-g", "--gtdbtk_summary", metavar="FILE", help="GTDB-Tk summary file." + "-t", "--binqc_tool", help="Bin QC tool used", choices=["busco", "checkm", "checkm2"] ) - parser.add_argument("-a", "--cat_summary", metavar="FILE", help="CAT table file.") + parser.add_argument( "-o", "--out", @@ -81,9 +75,7 @@ def parse_cat_table(cat_table): ) # merge all rank columns into a single column df["CAT_rank"] = ( - df.filter(regex="rank_\d+") - .apply(lambda x: ";".join(x.dropna()), axis=1) - .str.lstrip() + df.filter(regex="rank_\d+").apply(lambda x: ";".join(x.dropna()), axis=1).str.lstrip() ) # remove rank_* columns df.drop(df.filter(regex="rank_\d+").columns, axis=1, inplace=True) @@ -95,39 +87,36 @@ def main(args=None): args = parse_args(args) if ( - not args.busco_summary - and not args.checkm_summary + not args.binqc_summary and not args.quast_summary and not args.gtdbtk_summary ): sys.exit( - "No summary specified! Please specify at least BUSCO, CheckM or QUAST summary." + "No summary specified! " + "Please specify at least BUSCO, CheckM, CheckM2 or QUAST summary." ) - # GTDB-Tk can only be run in combination with BUSCO or CheckM - if args.gtdbtk_summary and not (args.busco_summary or args.checkm_summary): + # GTDB-Tk can only be run in combination with BUSCO, CheckM or CheckM2 + if args.gtdbtk_summary and not args.binqc_summary: sys.exit( - "Invalid parameter combination: GTDB-TK summary specified, but no BUSCO or CheckM summary!" + "Invalid parameter combination: " + "GTDB-TK summary specified, but no BUSCO, CheckM or CheckM2 summary!" ) # handle bin depths results = pd.read_csv(args.depths_summary, sep="\t") - results.columns = [ - "Depth " + str(col) if col != "bin" else col for col in results.columns - ] + results.columns = ["Depth " + str(col) if col != "bin" else col for col in results.columns] bins = results["bin"].sort_values().reset_index(drop=True) - if args.busco_summary: - busco_results = pd.read_csv(args.busco_summary, sep="\t") - if not bins.equals( - busco_results["GenomeBin"].sort_values().reset_index(drop=True) - ): + if args.binqc_summary and args.binqc_tool == "busco": + busco_results = pd.read_csv(args.binqc_summary, sep="\t") + if not bins.equals(busco_results["GenomeBin"].sort_values().reset_index(drop=True)): sys.exit("Bins in BUSCO summary do not match bins in bin depths summary!") results = pd.merge( results, busco_results, left_on="bin", right_on="GenomeBin", how="outer" ) # assuming depths for all bins are given - if args.checkm_summary: + if args.binqc_summary and args.binqc_tool == "checkm": use_columns = [ "Bin Id", "Marker lineage", @@ -147,22 +136,37 @@ def main(args=None): "4", "5+", ] - checkm_results = pd.read_csv(args.checkm_summary, usecols=use_columns, sep="\t") + checkm_results = pd.read_csv(args.binqc_summary, usecols=use_columns, sep="\t") checkm_results["Bin Id"] = checkm_results["Bin Id"] + ".fa" - if not bins.equals( - checkm_results["Bin Id"].sort_values().reset_index(drop=True) - ): + if not set(checkm_results["Bin Id"]).issubset(set(bins)): sys.exit("Bins in CheckM summary do not match bins in bin depths summary!") results = pd.merge( results, checkm_results, left_on="bin", right_on="Bin Id", how="outer" ) # assuming depths for all bins are given results["Bin Id"] = results["Bin Id"].str.removesuffix(".fa") + if args.binqc_summary and args.binqc_tool == "checkm2": + use_columns = [ + "Name", + "Completeness", + "Contamination", + "Completeness_Model_Used", + "Coding_Density", + "Translation_Table_Used", + "Total_Coding_Sequences", + ] + checkm2_results = pd.read_csv(args.binqc_summary, usecols=use_columns, sep="\t") + checkm2_results["Name"] = checkm2_results["Name"] + ".fa" + if not set(checkm2_results["Name"]).issubset(set(bins)): + sys.exit("Bins in CheckM2 summary do not match bins in bin depths summary!") + results = pd.merge( + results, checkm2_results, left_on="bin", right_on="Name", how="outer" + ) # assuming depths for all bins are given + results["Name"] = results["Name"].str.removesuffix(".fa") + if args.quast_summary: quast_results = pd.read_csv(args.quast_summary, sep="\t") - if not bins.equals( - quast_results["Assembly"].sort_values().reset_index(drop=True) - ): + if not bins.equals(quast_results["Assembly"].sort_values().reset_index(drop=True)): sys.exit("Bins in QUAST summary do not match bins in bin depths summary!") results = pd.merge( results, quast_results, left_on="bin", right_on="Assembly", how="outer" diff --git a/conf/base.config b/conf/base.config index 21a8ac3e..3bb06c8f 100644 --- a/conf/base.config +++ b/conf/base.config @@ -19,7 +19,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. @@ -160,12 +160,14 @@ process { cpus = { 8 * task.attempt } memory = { 20.GB * task.attempt } } - withName: MAXBIN2 { errorStrategy = { task.exitStatus in [1, 255] ? 'ignore' : 'retry' } } - withName: DASTOOL_DASTOOL { errorStrategy = { task.exitStatus in ((130..145) + 104) ? 'retry' : task.exitStatus == 1 ? 'ignore' : 'finish' } } + //CheckM2 returns exit code 1 when Diamond doesn't find any hits + withName: CHECKM2_PREDICT { + errorStrategy = { task.exitStatus in (130..145) ? 'retry' : task.exitStatus == 1 ? 'ignore' : 'finish' } + } } diff --git a/conf/modules.config b/conf/modules.config index 507e475f..701598db 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -183,22 +183,78 @@ process { "--min_length ${params.longreads_min_length}", "--keep_percent ${params.longreads_keep_percent}", "--trim", - "--length_weight ${params.longreads_length_weight}" + "--length_weight ${params.longreads_length_weight}", + params.longreads_min_quality ? "--min_mean_q ${params.longreads_min_quality}" : '' ].join(' ').trim() publishDir = [ path: { "${params.outdir}/QC_longreads/Filtlong" }, mode: params.publish_dir_mode, pattern: "*_filtlong.fastq.gz", - enabled: params.save_filtlong_reads + enabled: params.save_filtered_longreads ] ext.prefix = { "${meta.id}_run${meta.run}_filtlong" } } + withName: NANOQ { + ext.args = [ + "--min-len ${params.longreads_min_length}", + params.longreads_min_quality ? "--min-qual ${params.longreads_min_quality}" : '', + "-vv" + ].join(' ').trim() + publishDir = [ + [ + path: { "${params.outdir}/QC_longreads/Nanoq" }, + mode: params.publish_dir_mode, + pattern: "*_nanoq_filtered.fastq.gz", + enabled: params.save_filtered_longreads + ], + [ + path: { "${params.outdir}/QC_longreads/Nanoq" }, + mode: params.publish_dir_mode, + pattern: "*_nanoq_filtered.stats" + ] + ] + ext.prefix = { "${meta.id}_run${meta.run}_nanoq_filtered" } + } + withName: NANOLYSE { - publishDir = [[path: { "${params.outdir}/QC_longreads/NanoLyse" }, mode: params.publish_dir_mode, pattern: "*.log"], [path: { "${params.outdir}/QC_longreads/NanoLyse" }, mode: params.publish_dir_mode, pattern: "*_nanolyse.fastq.gz", enabled: params.save_lambdaremoved_reads]] + publishDir = [ + [ + path: { "${params.outdir}/QC_longreads/NanoLyse" }, + mode: params.publish_dir_mode, + pattern: "*.log" + ], + [ + path: { "${params.outdir}/QC_longreads/NanoLyse" }, + mode: params.publish_dir_mode, + pattern: "*_nanolyse.fastq.gz", + enabled: params.save_lambdaremoved_reads + ] + ] ext.prefix = { "${meta.id}_run${meta.run}_lambdafiltered" } } + withName: CHOPPER { + ext.args2 = [ + params.longreads_min_quality ? "--quality ${params.longreads_min_quality}" : '', + params.longreads_min_length ? "--minlength ${params.longreads_min_length}" : '' + ].join(' ').trim() + publishDir = [ + [ + path: { "${params.outdir}/QC_longreads/Chopper" }, + mode: params.publish_dir_mode, + pattern: "*.log" + ], + [ + path: { "${params.outdir}/QC_longreads/Chopper" }, + mode: params.publish_dir_mode, + pattern: "*_chopper.fastq.gz", + enabled: params.save_lambdaremoved_reads || params.save_filtered_longreads + ] + ] + ext.prefix = { "${meta.id}_run${meta.run}_chopper" } + } + withName: NANOPLOT_RAW { ext.prefix = 'raw' ext.args = { @@ -351,7 +407,11 @@ process { withName: CHECKM_LINEAGEWF { tag = { "${meta.assembler}-${meta.binner}-${meta.domain}-${meta.refinement}-${meta.id}" } ext.prefix = { "${meta.assembler}-${meta.binner}-${meta.domain}-${meta.refinement}-${meta.id}_wf" } - publishDir = [path: { "${params.outdir}/GenomeBinning/QC/CheckM" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }] + publishDir = [ + path: { "${params.outdir}/GenomeBinning/QC/CheckM" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } withName: CHECKM_QA { @@ -364,9 +424,32 @@ process { ] } - withName: COMBINE_CHECKM_TSV { - ext.prefix = { "checkm_summary" } - publishDir = [path: { "${params.outdir}/GenomeBinning/QC" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }] + withName: COMBINE_BINQC_TSV { + ext.prefix = { "${params.binqc_tool}_summary" } + publishDir = [ + path: { "${params.outdir}/GenomeBinning/QC" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: CHECKM2_DATABASEDOWNLOAD { + publishDir = [ + path: { "${params.outdir}/GenomeBinning/QC/CheckM2/checkm2_downloads" }, + mode: params.publish_dir_mode, + overwrite: false, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_checkm2_data + ] + } + + withName: CHECKM2_PREDICT { + ext.prefix = { "${meta.assembler}-${meta.binner}-${meta.domain}-${meta.refinement}-${meta.id}" } + publishDir = [ + path: { "${params.outdir}/GenomeBinning/QC/CheckM2" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } withName: GUNC_DOWNLOADDB { @@ -429,7 +512,7 @@ process { } withName: PROKKA { - ext.args = "--metagenome" + ext.args = { params.prokka_with_compliance ? "--metagenome --compliant --centre ${params.prokka_compliance_centre}" : "--metagenome" } publishDir = [path: { "${params.outdir}/Annotation/Prokka/${meta.assembler}" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }] } @@ -631,9 +714,8 @@ process { ext.prefix = { "${meta.id}" } publishDir = [path: { "${params.outdir}/Annotation/MetaEuk/${meta.assembler}/${meta.id}" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }] } - withName: MULTIQC { - ext.args = { params.multiqc_title ? "--title \"${params.multiqc_title}\"" : '' } + ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } publishDir = [ path: { "${params.outdir}/multiqc" }, mode: params.publish_dir_mode, diff --git a/conf/test_adapterremoval.config b/conf/test_adapterremoval.config index 63f04cf6..fc433a8b 100644 --- a/conf/test_adapterremoval.config +++ b/conf/test_adapterremoval.config @@ -31,7 +31,7 @@ params { skip_krona = true min_length_unbinned_contigs = 1 max_unbinned_contigs = 2 - busco_db = "https://busco-data.ezlab.org/v5/data/lineages/bacteria_odb10.2024-01-08.tar.gz" + binqc_tool = 'checkm' skip_gtdbtk = true gtdbtk_min_completeness = 0.01 clip_tool = 'adapterremoval' diff --git a/conf/test_bbnorm.config b/conf/test_bbnorm.config index 223f99a3..a434f584 100644 --- a/conf/test_bbnorm.config +++ b/conf/test_bbnorm.config @@ -36,8 +36,7 @@ params { skip_krona = true min_length_unbinned_contigs = 1 max_unbinned_contigs = 2 - busco_db = "https://busco-data.ezlab.org/v5/data/lineages/bacteria_odb10.2024-01-08.tar.gz" - busco_clean = true + binqc_tool = 'checkm2' skip_gtdbtk = true gtdbtk_min_completeness = 0.01 bbnorm = true diff --git a/conf/test_full.config b/conf/test_full.config index ed5923d0..5db195fe 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -42,4 +42,8 @@ params { // Skip CONCOCT due to timeout issues skip_concoct = true + + // Set Prokka compliance mode to allow metaSPAdes bins to be annotated + prokka_with_compliance = true + prokka_compliance_centre = "nfcore" } diff --git a/docs/images/mag_logo_mascot_dark.png b/docs/images/mag_logo_mascot_dark.png index 914d64c5..4ec2f131 100644 Binary files a/docs/images/mag_logo_mascot_dark.png and b/docs/images/mag_logo_mascot_dark.png differ diff --git a/docs/images/mag_logo_mascot_dark.svg b/docs/images/mag_logo_mascot_dark.svg index 5ccf27ba..37eb8387 100644 --- a/docs/images/mag_logo_mascot_dark.svg +++ b/docs/images/mag_logo_mascot_dark.svg @@ -10,8 +10,8 @@ width="1260.9" height="570" inkscape:export-filename="mag_logo_mascot_dark.png" - inkscape:export-xdpi="96" - inkscape:export-ydpi="96" + inkscape:export-xdpi="300" + inkscape:export-ydpi="300" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" @@ -33,7 +33,7 @@ showgrid="false" inkscape:zoom="0.50569119" inkscape:cx="616.97733" - inkscape:cy="643.67346" + inkscape:cy="642.68472" inkscape:window-x="1920" inkscape:window-y="724" inkscape:window-maximized="1" @@ -55,7 +55,7 @@ empcolor="#e50000" empopacity="0.30196078" color="#e50000" - opacity="0.14901961" + opacity="0.14902" empspacing="5" dotted="true" gridanglex="30" diff --git a/docs/images/mag_logo_mascot_light.png b/docs/images/mag_logo_mascot_light.png index dc23b217..ecb17340 100644 Binary files a/docs/images/mag_logo_mascot_light.png and b/docs/images/mag_logo_mascot_light.png differ diff --git a/docs/images/mag_logo_mascot_light.svg b/docs/images/mag_logo_mascot_light.svg index 727c8680..0e42229d 100644 --- a/docs/images/mag_logo_mascot_light.svg +++ b/docs/images/mag_logo_mascot_light.svg @@ -10,8 +10,8 @@ width="1260.9" height="570" inkscape:export-filename="mag_logo_mascot_light.png" - inkscape:export-xdpi="96" - inkscape:export-ydpi="96" + inkscape:export-xdpi="300" + inkscape:export-ydpi="300" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" @@ -32,8 +32,8 @@ id="namedview75" showgrid="false" inkscape:zoom="0.50569119" - inkscape:cx="616.97733" - inkscape:cy="643.67346" + inkscape:cx="618.95482" + inkscape:cy="644.66221" inkscape:window-x="1920" inkscape:window-y="724" inkscape:window-maximized="1" @@ -55,7 +55,7 @@ empcolor="#e50000" empopacity="0.30196078" color="#e50000" - opacity="0.14901961" + opacity="0.14902" empspacing="5" dotted="true" gridanglex="30" diff --git a/docs/images/mag_metromap_simple_dark.png b/docs/images/mag_metromap_simple_dark.png new file mode 100644 index 00000000..ee73c55a Binary files /dev/null and b/docs/images/mag_metromap_simple_dark.png differ diff --git a/docs/images/mag_metromap_simple_dark.svg b/docs/images/mag_metromap_simple_dark.svg new file mode 100644 index 00000000..5eccb751 --- /dev/null +++ b/docs/images/mag_metromap_simple_dark.svg @@ -0,0 +1,2047 @@ + + + +Nanoplot(Raw)Nanolyse /chopperKraken2 /CentrifugeFiltlong /NanoqchopperNanoplot(Filtered)porechoporporechop_ABIFastQC(Trimmed)FastQC(Raw)Bowtie2 (Host)Run merge Bowtie2(PhiX)BBNormKronaAdapterRemovalorfastp + + +nf-core/magMEGAHIT /SPAdesProdigalQUASTgeNomadpyDamageFreeBayesBCFToolsDASToolMetaBat2 /MaxBin2 / CONCOCTTiaraProkkaMetaEukGUNCMultiQCBin Summary34567fastqfastqfastqfastq1083Short readclassification4Assembly5Ancient DNA6Binning7Bin refinement8Annotation9Contigclassification10Reportgeneration1Short readpreprocessing2Long readpreprocessing12Bowtie2 (Contigs)GTDBTKCATQUAST9Short readsLong readsAssembled contigsGenome binsMultipleparallelchoicesSingle choiceDEFAULTOPT-INBUSCO /CheckM /CheckM2v3.3 diff --git a/docs/images/mag_metromap_simple_light.png b/docs/images/mag_metromap_simple_light.png new file mode 100644 index 00000000..1ee20624 Binary files /dev/null and b/docs/images/mag_metromap_simple_light.png differ diff --git a/docs/images/mag_metromap_simple_light.svg b/docs/images/mag_metromap_simple_light.svg new file mode 100644 index 00000000..3b4011ce --- /dev/null +++ b/docs/images/mag_metromap_simple_light.svg @@ -0,0 +1,2050 @@ + + + +Kraken2 /CentrifugeNanoplot(Raw)Nanolyse /chopperFiltlong /NanoqchopperNanoplot(Filtered)porechoporporechop_ABIFastQC(Trimmed)FastQC(Raw)Bowtie2 (Host)Run merge Bowtie2(PhiX)BBNormKronav3.3AdapterRemovalorfastp + + +nf-core/magMEGAHIT /SPAdesProdigalQUASTgeNomadpyDamageFreeBayesBCFToolsDASToolMetaBat2 /MaxBin2 /CONCOCTTiaraProkkaMetaEukGUNCMultiQCBin Summary34567fastqfastqfastqfastq1083Short readclassification4Assembly5Ancient DNA6Binning7Bin refinement8Annotation9Contigclassification10Reportgeneration1Short readpreprocessing2Long readpreprocessing12Bowtie2 (Contigs)BUSCO /CheckM /CheckM2GTDBTKCATQUAST9Short readsLong readsAssembled contigsGenome binsMultipleparalleloptionsSingle choiceDEFAULTOPT-IN diff --git a/docs/images/mag_workflow.png b/docs/images/mag_workflow.png index 2a2abfa3..4969e68c 100644 Binary files a/docs/images/mag_workflow.png and b/docs/images/mag_workflow.png differ diff --git a/docs/images/mag_workflow.svg b/docs/images/mag_workflow.svg index e2039d81..38171379 100644 --- a/docs/images/mag_workflow.svg +++ b/docs/images/mag_workflow.svg @@ -8,8 +8,8 @@ inkscape:version="1.3.2 (1:1.3.2+202311252150+091e20ef0f)" sodipodi:docname="mag_workflow.svg" inkscape:export-filename="mag_workflow.png" - inkscape:export-xdpi="289.40701" - inkscape:export-ydpi="289.40701" + inkscape:export-xdpi="300" + inkscape:export-ydpi="300" xml:space="preserve" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" @@ -168,15 +168,6 @@ x2="105" y2="103.70081" gradientUnits="userSpaceOnUse" />classificationReportingMultiQC(MAG summary)tsvNanoPlotEvaluationNanoLyseRemove LambdaQuality filteringQuality filteringNanoPlotEvaluationNanoLyseRemove LambdaAdapter/qualityNanoqchopperchopperFiltlongQuality filteringAdapter/qualitytrimmingPorechopporechop_ABIReportingtrimmingPorechopMultiQC(MAG summary)tsvDBporechop_ABIporechop_ABIDBBUSCOCheckMGUNCCheckM2GUNCv3.2v3.3 -classificationReportingReportingMultiQCMultiQCNanoPlotEvaluationNanoLyseRemove LambdaNanoqchopperchopperFiltlongPRODIGALPRODIGALDBDBBinningBinningMetaBAT2MetaBAT2MaxBin2MaxBin2CONCOCTCONCOCTEvaluationEvaluationBUSCOBUSCOCheckMCheckMGUNCCheckM2GUNCQUASTQUASTvisualization)v3.2v3.3Binning refinementBinning refinementDAS ToolDAS Tool