diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index f9ab31b2f..711e0db12 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -37,7 +37,7 @@ jobs: } profiles: test_full - - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 with: name: Seqera Platform debug log file path: | diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index f43bdd0b9..237c1b0b1 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -25,7 +25,7 @@ jobs: } profiles: test - - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 with: name: Seqera Platform debug log file path: | diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 6d94bcbf9..45884ff90 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -127,7 +127,7 @@ jobs: fi - name: Upload Nextflow logfile for debugging purposes - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 with: name: nextflow_logfile.txt path: .nextflow.log* diff --git a/.github/workflows/fix_linting.yml b/.github/workflows/fix_linting.yml index 8f5bab01b..6a136cec7 100644 --- a/.github/workflows/fix_linting.yml +++ b/.github/workflows/fix_linting.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: # Use the @nf-core-bot token to check out so we can push later - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 with: token: ${{ secrets.nf_core_bot_auth_token }} diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 30e66026f..7a527a346 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -11,7 +11,7 @@ jobs: pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 - name: Set up Python 3.14 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 @@ -28,7 +28,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 - name: Install Nextflow uses: nf-core/setup-nextflow@v2 @@ -71,7 +71,7 @@ jobs: - name: Upload linting log file artifact if: ${{ always() }} - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 with: name: linting-logs path: | diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml index 45c8b606f..e310fe2ce 100644 --- a/.github/workflows/nf-test.yml +++ b/.github/workflows/nf-test.yml @@ -40,7 +40,7 @@ jobs: rm -rf ./* || true rm -rf ./.??* || true ls -la ./ - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 with: fetch-depth: 0 @@ -86,7 +86,7 @@ jobs: TOTAL_SHARDS: ${{ needs.nf-test-changes.outputs.total_shards }} steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 with: fetch-depth: 0 diff --git a/.github/workflows/template-version-comment.yml b/.github/workflows/template-version-comment.yml index c5988af90..e8560fc7c 100644 --- a/.github/workflows/template-version-comment.yml +++ b/.github/workflows/template-version-comment.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 with: ref: ${{ github.event.pull_request.head.sha }} diff --git a/.nf-core.yml b/.nf-core.yml index 4c6b27d7b..d6611cb5b 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -6,7 +6,7 @@ lint: - config_defaults: - params.phix_reference - params.lambda_reference -nf_core_version: 3.4.1 +nf_core_version: 3.5.1 repository_type: pipeline template: author: "Hadrien Gourlé, Daniel Straub, Sabrina Krakau, James A. Fellows Yates, Maxime Borry" @@ -16,4 +16,4 @@ template: name: mag org: nf-core outdir: . - version: 5.2.0 + version: 5.3.0 diff --git a/.prettierignore b/.prettierignore index 2255e3e36..dd749d43d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -12,3 +12,5 @@ testing* bin/ .nf-test/ ro-crate-metadata.json +modules/nf-core/ +subworkflows/nf-core/ diff --git a/CHANGELOG.md b/CHANGELOG.md index e39c9d1ee..30af67b6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,51 @@ 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). +## v5.3.0 - Rainbow Rattlesnake [2025-12-05] + +### `Added` + +- [#905](https://github.com/nf-core/mag/pull/905) - Add nf-test snapshot for `test_assembly_input` profile (by @dialvarezs) +- [#930](https://github.com/nf-core/mag/pull/930) - Add binner SemiBin2 (by @d4straub) +- [#861](https://github.com/nf-core/mag/pull/861) - Added `--generate_bigmag_file` to execute the bigmag workflow that generates the file to be used as input for [BIgMAG](https://github.com/jeffe107/BIgMAG) (added by @jeffe107) + +### `Changed` + +- [#932](https://github.com/nf-core/mag/pull/932) - Replaced usages of deprecated `Channel()` with `channel()` and fix other LSP warnings (by @dialvarezs) +- [#937](https://github.com/nf-core/mag/pull/937) - Updated to nf-core 3.5.1 `TEMPLATE` (by @dialvarezs) +- [#938](https://github.com/nf-core/mag/pull/938) - Update nf-core modules (by @dialvarezs) + +### `Fixed` + +- [#894](https://github.com/nf-core/mag/pull/894) - Fix read order in metaSPAdes to allow co-assembly of paired-end data of multiple samples (reported by @maartenciers, fix by @jfy133 with contributions from @prototaxites, @d4straub and @dialvarezs) +- [#927](https://github.com/nf-core/mag/pull/927) - MetaBinner now succeeds when no contigs are too short or all are binned (reported by @MicroSeq, fix by @d4straub) +- [#929](https://github.com/nf-core/mag/pull/929) - Allow the domain_classification.R script to run with any assembler, not just Megahit or Spades (reported by @MicroSeq, fix by @prototaxites) +- [#943](https://github.com/nf-core/mag/pull/943) - Fixed concatenation of BUSCO summaries with uneven columns by changing from `csvtk` to `qsv` (reported by @jfy133 and @julianu, fix by @dialvarezs) +- [#943](https://github.com/nf-core/mag/pull/943) - Fixed creation of the Tiara report channel used for concatenation (by @dialvarezs) +- [#945](https://github.com/nf-core/mag/pull/945) - Skip mixing of GTDB-Tk MultiQC files when binning is skipped (reported by @amizeranschi, fix by @dialvarezs) +- [#953](https://github.com/nf-core/mag/pull/953) - metaSPAdes retries upon error 250 (out of memory), rather than finishing the pipeline. +- [#954](https://github.com/nf-core/mag/pull/954) - Skip GTDB-Tk when no bin QC tool is enabled and add warning messages (fix by @dialvarezs) +- [#956](https://github.com/nf-core/mag/pull/956) - Support long reads assemblers in assembly input (fix by @dialvarezs) + +### `Dependencies` + +| Tool | Previous version | New version | +| -------- | ---------------- | ----------- | +| bcftools | 1.21 | 1.22 | +| csvtk | 0.31.0 | | +| fastp | 0.24.0 | 1.0.1 | +| geNomad | 1.11.1 | 1.11.2 | +| metamdbg | 1.1 | 1.2 | +| mmseqs | 17.b804f | 18.8cc5c | +| nf-core | | 3.5.1 | +| qsv | | 5.1.0 | +| samtools | 1.21 | 1.22.1 | +| SemiBin2 | | 2.2.0 | + +### `Deprecated` + +- [#943](https://github.com/nf-core/mag/pull/943) - Remove `csvtk/concat` module (by @dialvarezs). + ## v5.2.0 - Puce Pangolin [2025-11-07] ### `Added` diff --git a/CITATIONS.md b/CITATIONS.md index f73b5c8b7..246e023e4 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -56,6 +56,10 @@ > Wang Z, Huang P, You R, Sun F, Zhu S. MetaBinner: a high-performance and stand-alone ensemble binning method to recover individual genomes from complex microbial communities. Genome Biol. 2023 Jan 6;24(1):1. doi: 10.1186/s13059-022-02832-6. PMID: 36609515; PMCID: PMC9817263. +- [SemiBin2](https://doi.org/10.1038/s41467-022-29843-y) + + > Pan S, Zhu C, Zhao XM, Coelho LP. A deep siamese neural network improves metagenome-assembled genomes in microbiome datasets across different environments. Nat Commun. 2022 Apr 28;13(1):2326. doi: 10.1038/s41467-022-29843-y. PMID: 35484115; PMCID: PMC9051138. + - [DAS Tool](https://doi.org/10.1038/s41564-018-0171-1) > Sieber, C. M. K., et al. 2018. "Recovery of Genomes from Metagenomes via a Dereplication, Aggregation and Scoring Strategy." Nature Microbiology 3 (7): 836-43. doi: 10.1038/s41564-018-0171-1 @@ -90,6 +94,10 @@ > Orakov, A., Fullam, A., Coelho, A. P., Khedkar, S., Szklarczyk, D., Mende, D. R., Schmidt, T. S. B., and Bork, P.. 2021. “GUNC: Detection of Chimerism and Contamination in Prokaryotic Genomes.” Genome Biology 22 (1): 178. doi: 10.1186/s13059-021-02393-0. +- [BIgMAG](https://doi.org/10.12688/f1000research.152290.2) + + > Yepes-García, J., Falquet, L. (2024). Metagenome quality metrics and taxonomical annotation visualization through the integration of MAGFlow and BIgMAG. F1000Research 13:640. doi.org/10.12688/f1000research.152290.2 + - [MaxBin2](https://doi.org/10.1093/bioinformatics/btv638) > Yu-Wei, W., Simmons, B. A. & Singer, S. W. (2015) MaxBin 2.0: An Automated Binning Algorithm to Recover Genomes from Multiple Metagenomic Datasets. Bioinformatics 32 (4): 605–7. doi: 10.1093/bioinformatics/btv638. diff --git a/README.md b/README.md index 750b04e4a..d289a9bc6 100644 --- a/README.md +++ b/README.md @@ -5,23 +5,26 @@ -[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new/nf-core/mag) +[![Open in GitHub Codespaces](https://img.shields.io/badge/Open_In_GitHub_Codespaces-black?labelColor=grey&logo=github)](https://github.com/codespaces/new/nf-core/mag) [![GitHub Actions CI Status](https://github.com/nf-core/mag/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/mag/actions/workflows/nf-test.yml) [![GitHub Actions Linting Status](https://github.com/nf-core/mag/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/mag/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/mag/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.3589527-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.3589527) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) [![Cite Publication](https://img.shields.io/badge/Cite%20Us!-Cite%20Publication-orange)](https://doi.org/10.1093/nargab/lqac007) [![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.04.2-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/) -[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.4.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.4.1) +[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.5.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.5.1) [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) + [![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/mag) [![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23mag-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/mag)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![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) ![HiRSE Code Promo Badge](https://img.shields.io/badge/Promo-8db427?label=HiRSE&labelColor=005aa0&link=https%3A%2F%2Fgo.fzj.de%2FCodePromo) +[![Static Badge](https://img.shields.io/badge/%F0%9F%8D%94%20%20BIgMAG-compatible-%2324B064)](https://github.com/jeffe107/BIgMAG) + ## Introduction **nf-core/mag** is a bioinformatics best-practise analysis pipeline for assembly, binning and annotation of metagenomes. @@ -35,11 +38,6 @@ ## Pipeline summary -## 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. - By default, the pipeline currently performs the following: it supports both short and long reads, quality trims the reads and adapters with [fastp](https://github.com/OpenGene/fastp), [AdapterRemoval](https://github.com/MikkelSchubert/adapterremoval), or [trimmomatic](https://github.com/usadellab/Trimmomatic) and [Porechop](https://github.com/rrwick/Porechop), and performs basic QC with [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/), and merges multiple sequencing runs. The pipeline then: @@ -47,7 +45,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/), [CONCOCT](https://github.com/BinPro/CONCOCT), [COMEBin](https://github.com/ziyewang/COMEBin), and/or [MetaBinner](https://github.com/ziyewang/MetaBinner) +- performs metagenome binning using [MetaBAT2](https://bitbucket.org/berkeleylab/metabat/src/master/), [MaxBin2](https://sourceforge.net/projects/maxbin2/), [CONCOCT](https://github.com/BinPro/CONCOCT), [COMEBin](https://github.com/ziyewang/COMEBin), [MetaBinner](https://github.com/ziyewang/MetaBinner), and/or [SemiBin2](https://github.com/BigDataBiology/SemiBin) - 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) @@ -102,6 +100,7 @@ Other code contributors include: - [Greg Fedewa](https://github.com/harper357) - [Vini Salazar](https://github.com/vinisalazar) - [Alex Caswell](https://github.com/AlexHoratio) +- [Jeferyd Yepes](https://github.com/jeffe107) 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 b7ca4dbbb..83c62e2fa 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,5 +1,5 @@ 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 diff --git a/assets/schema_assembly_input.json b/assets/schema_assembly_input.json index c7f9d15c0..9525fb2a8 100644 --- a/assets/schema_assembly_input.json +++ b/assets/schema_assembly_input.json @@ -19,7 +19,7 @@ }, "assembler": { "type": "string", - "pattern": "MEGAHIT|SPAdes|SPAdesHybrid", + "pattern": "MEGAHIT|SPAdes|SPAdesHybrid|Flye|MetaMDBG", "meta": ["assembler"] }, "fasta": { diff --git a/bin/combine_tables.py b/bin/combine_tables.py index 37ecba8a6..cfa9f17e9 100755 --- a/bin/combine_tables.py +++ b/bin/combine_tables.py @@ -202,6 +202,7 @@ def main(args=None): "Coding_Density", "Translation_Table_Used", "Total_Coding_Sequences", + "Genome_Size" ] checkm2_results = pd.read_csv( args.checkm2_summary, usecols=use_columns, sep="\t" diff --git a/bin/domain_classification.R b/bin/domain_classification.R index 33530ca5a..d3809fae4 100755 --- a/bin/domain_classification.R +++ b/bin/domain_classification.R @@ -23,11 +23,6 @@ parser <- add_option(parser, c("-j", "--join_prokaryotes"), default = TRUE, metavar = "logical", help = "Use an general prokaryote classification instead of separating Archaea and Bacteria.") -parser <- add_option(parser, c("-a", "--assembler"), - action = "store", - type = "character", - metavar = "character", - help = "Assembler used to assemble the contigs. 'MEGAHIT' or 'SPAdes' only.") parser <- add_option(parser, c("-o", "--output_prefix"), action = "store", type = "character", @@ -42,12 +37,6 @@ if(is.null(args$classification_file)) { if(is.null(args$contig_to_bin)) { stop("Contig to bin file not provided.") } -if(is.null(args$assembler)) { - stop("Assembler not provided.") -} -if(!(args$assembler %in% c("MEGAHIT", "SPAdes"))) { - stop("Invalid assembler provided.") -} find_classification <- function(probabilities, join_prokaryotes = TRUE) { if(join_prokaryotes) { @@ -58,14 +47,13 @@ find_classification <- function(probabilities, join_prokaryotes = TRUE) { return(classifications[which.max(probabilities)]) } -classify_bins <- function(tiara, contig2bin, join_prokaryotes, assembler){ - ## MEGAHIT produces contigs with spaces in the name +classify_bins <- function(tiara, contig2bin, join_prokaryotes){ + ## Some assemblers produce contigs with spaces in the name ## Depending on the binner, everything after the first space is sometimes dropped ## Make sure that we drop everything after a possible space before doing anything else to allow merging - if(assembler == "MEGAHIT"){ - tiara$sequence_id <- word(tiara$sequence_id) - contig2bin$sequence_id <- word(contig2bin$sequence_id) - } + tiara$sequence_id <- word(tiara$sequence_id) + contig2bin$sequence_id <- word(contig2bin$sequence_id) + if(join_prokaryotes) { n_classifications <- 4 } else { @@ -140,10 +128,11 @@ classify_bins <- function(tiara, contig2bin, join_prokaryotes, assembler){ classifications <- read_tsv(args$classification_file, na = c("NA", "n/a")) contig_to_bin <- read_tsv(args$contig_to_bin, col_names = c("sequence_id", "BinID")) -results <- classify_bins(tiara = classifications, - contig2bin = contig_to_bin, - join_prokaryotes = args$join_prokaryotes, - assembler = args$assembler) +results <- classify_bins( + tiara = classifications, + contig2bin = contig_to_bin, + join_prokaryotes = args$join_prokaryotes +) ## Keep just the classifications so we can loop over more easily results_basic <- select(results, BinID, classification) diff --git a/bin/prepare_bigmag_summary.py b/bin/prepare_bigmag_summary.py new file mode 100755 index 000000000..416807ff0 --- /dev/null +++ b/bin/prepare_bigmag_summary.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python + +## Originally written by Jeferyd Yepes and released under the MIT license. +## See git repository (https://github.com/nf-core/mag) for full license text. + +import argparse +import re +import sys + +import pandas as pd + + +def parse_args(args=None): + parser = argparse.ArgumentParser() + parser.add_argument("-s", "--summary", metavar="FILE", help="Pipeline summary file.") + parser.add_argument("-g", "--gunc_summary", metavar="FILE", help="GUNC summary file.") + + parser.add_argument( + "-o", + "--out", + required=True, + metavar="FILE", + type=argparse.FileType("w"), + help="Output file containing final bigmag summary.", + ) + return parser.parse_args(args) + + +def main(args=None): + args = parse_args(args) + + if ( + not args.summary + and not args.gunc_summary + ): + sys.exit( + "No summary specified! " + "Please specify the pipeline summary and the GUNC summary." + ) + + df_summary = pd.read_csv(args.summary, sep='\t') + df_summary.columns = df_summary.columns.str.replace(r'(_busco|_checkm2|_checkm|_gtdbtk|_gunc|_quast)$', '', regex=True) + for i in range(len(df_summary["bin"])): + name = df_summary["bin"][i] + name = re.sub(r'\.(fa|fasta)(\..*)?$', '', name) + df_summary.at[i,"bin"] = name + df_summary = df_summary.sort_values(by='bin') + df_summary["bin"] = df_summary["bin"].astype(str) + + df_gunc = pd.read_csv(args.gunc_summary, sep='\t') + df_gunc["genome"] = df_gunc["genome"].astype(str) + df_gunc = df_gunc.sort_values(by='genome') + + df_summary = pd.merge(df_summary, df_gunc, left_on='bin', right_on='genome', how='left') + + df_summary.rename(columns={'bin': 'Bin'}, inplace=True) + columns_to_remove = ['Name', "genome", 'Input_file', 'Assembly', 'Bin Id'] + df_summary = df_summary.drop(columns=columns_to_remove, errors="ignore") + + df_summary['sample'] = None + for f in range(len(df_summary["Bin"])): + match = re.search(r'^.*?-.*?-(.*)$', df_summary["Bin"][f]) + if match: + name = match.group(1) + name = re.sub(r'\.(unbinned|noclass)(\..*)?$', '', name) + name = re.sub(r'\.\d+(\.[^.]+)?$', '', name) + df_summary.at[f,"sample"] = name + + df_summary.to_csv(args.out, sep="\t", index=True) + +if __name__ == "__main__": + sys.exit(main()) diff --git a/conf/base.config b/conf/base.config index 077f976ed..93bee5df8 100644 --- a/conf/base.config +++ b/conf/base.config @@ -117,7 +117,7 @@ process { cpus = { params.spades_fix_cpus != -1 ? params.spades_fix_cpus : (10 * task.attempt) } memory = { 64.GB * (2 ** (task.attempt - 1)) } time = { 24.h * (2 ** (task.attempt - 1)) } - errorStrategy = { task.exitStatus in ((130..145) + 104 + 175 + 21 + 12 + 1) ? 'retry' : 'finish' } + errorStrategy = { task.exitStatus in ((130..145) + 250 + 104 + 175 + 21 + 12 + 1) ? 'retry' : 'finish' } maxRetries = 5 } withName: METASPADESHYBRID { diff --git a/conf/modules.config b/conf/modules.config index 935db8178..30fa2dc95 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -13,7 +13,12 @@ process { //default: do not publish into the results folder - publishDir = [path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, enabled: false] + publishDir = [ + path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: false + ] withName: FASTQC_RAW { ext.args = '--quiet' @@ -377,34 +382,58 @@ process { withName: MEGAHIT { ext.args = { params.megahit_options ? params.megahit_options + " -m ${task.memory.toBytes()}" : "-m ${task.memory.toBytes()}" } ext.prefix = { "MEGAHIT-${meta.id}" } - publishDir = [path: { "${params.outdir}/Assembly/MEGAHIT" }, mode: params.publish_dir_mode, pattern: "*.{fa.gz,log}"] + publishDir = [ + path: { "${params.outdir}/Assembly/MEGAHIT" }, + mode: params.publish_dir_mode, + pattern: "*.{fa.gz,log}", + ] } withName: METASPADES { ext.args = params.spades_options ? params.spades_options + ' --meta' : '--meta' ext.prefix = { "SPAdes-${meta.id}" } - publishDir = [path: { "${params.outdir}/Assembly/SPAdes" }, mode: params.publish_dir_mode, pattern: "*.{fasta.gz,gfa.gz,fa.gz,log}"] + publishDir = [ + path: { "${params.outdir}/Assembly/SPAdes" }, + mode: params.publish_dir_mode, + pattern: "*.{fasta.gz,gfa.gz,fa.gz,log}", + ] } withName: METASPADESHYBRID { ext.args = params.spades_options ? params.spades_options + ' --meta' : '--meta' ext.prefix = { "SPAdesHybrid-${meta.id}" } - publishDir = [path: { "${params.outdir}/Assembly/SPAdesHybrid" }, mode: params.publish_dir_mode, pattern: "*.{fasta.gz,gfa.gz,fa.gz,log}"] + publishDir = [ + path: { "${params.outdir}/Assembly/SPAdesHybrid" }, + mode: params.publish_dir_mode, + pattern: "*.{fasta.gz,gfa.gz,fa.gz,log}", + ] } withName: FLYE { ext.args = ' --meta' ext.prefix = { "FLYE-${meta.id}" } - publishDir = [path: { "${params.outdir}/Assembly/FLYE" }, mode: params.publish_dir_mode, pattern: "*.{fasta.gz,gfa.gz,log}"] + publishDir = [ + path: { "${params.outdir}/Assembly/FLYE" }, + mode: params.publish_dir_mode, + pattern: "*.{fasta.gz,gfa.gz,log}", + ] } withName: METAMDBG_ASM { ext.prefix = { "METAMDBG-${meta.id}" } - publishDir = [path: { "${params.outdir}/Assembly/METAMDBG" }, mode: params.publish_dir_mode, pattern: "*.{fasta.gz,log}"] + publishDir = [ + path: { "${params.outdir}/Assembly/METAMDBG" }, + mode: params.publish_dir_mode, + pattern: "*.{fasta.gz,log}", + ] } withName: QUAST { - publishDir = [path: { "${params.outdir}/Assembly/${meta.assembler}/QC/${meta.id}" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }] + publishDir = [ + path: { "${params.outdir}/Assembly/${meta.assembler}/QC/${meta.id}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } withName: 'QUAST_BINS|QUAST_BINS_SUMMARY' { @@ -447,7 +476,11 @@ process { } withName: 'MAG_DEPTHS_PLOT|MAG_DEPTHS_SUMMARY' { - publishDir = [path: { "${params.outdir}/GenomeBinning/depths/bins" }, mode: params.publish_dir_mode, pattern: "*.{png,tsv}"] + publishDir = [ + path: { "${params.outdir}/GenomeBinning/depths/bins" }, + mode: params.publish_dir_mode, + pattern: "*.{png,tsv}", + ] } withName: BIN_SUMMARY { @@ -515,6 +548,7 @@ process { withName: 'CONCAT_BUSCO_TSV|CONCAT_CHECKM_TSV|CONCAT_CHECKM2_TSV' { ext.prefix = { "${meta.id}_summary" } + ext.args = "--delimiter '\t'" publishDir = [ path: { "${params.outdir}/GenomeBinning/QC" }, mode: params.publish_dir_mode, @@ -660,7 +694,11 @@ process { withName: GTDBTK_SUMMARY { ext.args = "--extension fa" - publishDir = [path: { "${params.outdir}/Taxonomy/GTDB-Tk" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }] + publishDir = [ + path: { "${params.outdir}/Taxonomy/GTDB-Tk" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] } withName: PROKKA { @@ -676,19 +714,30 @@ process { withName: PRODIGAL { ext.args = "-p meta" ext.prefix = { "${meta.assembler}-${meta.id}_prodigal" } - publishDir = [path: { "${params.outdir}/Annotation/Prodigal/${meta.assembler}/${meta.id}" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }] + publishDir = [ + path: { "${params.outdir}/Annotation/Prodigal/${meta.assembler}/${meta.id}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }] } withName: FREEBAYES { ext.prefix = { "${meta.assembler}-${meta.id}" } ext.args = "-p ${params.freebayes_ploidy} -q ${params.freebayes_min_basequality} -F ${params.freebayes_minallelefreq}" - publishDir = [path: { "${params.outdir}/Ancient_DNA/variant_calling/freebayes" }, mode: params.publish_dir_mode, pattern: "*.vcf.gz"] + publishDir = [ + path: { "${params.outdir}/Ancient_DNA/variant_calling/freebayes" }, + mode: params.publish_dir_mode, + pattern: "*.vcf.gz", + ] } withName: BCFTOOLS_VIEW { ext.prefix = { "${meta.assembler}-${meta.id}.filtered" } ext.args = "-Oz -W=tbi -v snps,mnps -i 'QUAL>=${params.bcftools_view_high_variant_quality} || (QUAL>=${params.bcftools_view_medium_variant_quality} && FORMAT/AO>=${params.bcftools_view_minimal_allelesupport})'" - publishDir = [path: { "${params.outdir}/Ancient_DNA/variant_calling/filtered" }, mode: params.publish_dir_mode, pattern: "*.vcf.gz"] + publishDir = [ + path: { "${params.outdir}/Ancient_DNA/variant_calling/filtered" }, + mode: params.publish_dir_mode, + pattern: "*.vcf.gz", + ] } withName: BCFTOOLS_CONSENSUS { @@ -737,25 +786,49 @@ process { } withName: METABAT2_JGISUMMARIZEBAMCONTIGDEPTHS_SHORTREAD { - ext.args = params.shortread_percentidentity ? "--percentIdentity ${params.shortread_percentidentity}" : '' - publishDir = [path: { "${params.outdir}/GenomeBinning/depths/contigs" }, mode: params.publish_dir_mode, pattern: '*-depth.txt.gz'] ext.prefix = { "${meta.assembler}-${meta.id}-depth" } + ext.args = params.shortread_percentidentity ? "--percentIdentity ${params.shortread_percentidentity}" : '' + publishDir = [ + path: { "${params.outdir}/GenomeBinning/depths/contigs" }, + mode: params.publish_dir_mode, + pattern: '*-depth.txt.gz', + ] } withName: METABAT2_JGISUMMARIZEBAMCONTIGDEPTHS_LONGREAD { - ext.args = params.longread_percentidentity ? "--percentIdentity ${params.longread_percentidentity}" : '' - publishDir = [path: { "${params.outdir}/GenomeBinning/depths/contigs" }, mode: params.publish_dir_mode, pattern: '*-depth.txt.gz'] ext.prefix = { "${meta.assembler}-${meta.id}-depth" } + ext.args = params.longread_percentidentity ? "--percentIdentity ${params.longread_percentidentity}" : '' + publishDir = [ + path: { "${params.outdir}/GenomeBinning/depths/contigs" }, + mode: params.publish_dir_mode, + pattern: '*-depth.txt.gz', + ] } withName: METABAT2_METABAT2 { - publishDir = [[path: { "${params.outdir}/GenomeBinning/MetaBAT2/bins/" }, mode: params.publish_dir_mode, pattern: '*[!lowDepth|tooShort|unbinned].fa.gz'], [path: { "${params.outdir}/GenomeBinning/MetaBAT2/discarded" }, mode: params.publish_dir_mode, pattern: '*tooShort.fa.gz'], [path: { "${params.outdir}/GenomeBinning/MetaBAT2/discarded" }, mode: params.publish_dir_mode, pattern: '*lowDepth.fa.gz']] ext.prefix = { "${meta.assembler}-MetaBAT2-${meta.id}" } ext.args = [ params.min_contig_size < 1500 ? "-m 1500" : "-m ${params.min_contig_size}", "--unbinned", "--seed ${params.metabat_rng_seed}", ].join(' ').trim() + publishDir = [ + [ + path: { "${params.outdir}/GenomeBinning/MetaBAT2/bins/" }, + mode: params.publish_dir_mode, + pattern: '*[!lowDepth|tooShort|unbinned].fa.gz' + ], + [ + path: { "${params.outdir}/GenomeBinning/MetaBAT2/discarded" }, + mode: params.publish_dir_mode, + pattern: '*tooShort.fa.gz' + ], + [ + path: { "${params.outdir}/GenomeBinning/MetaBAT2/discarded" }, + mode: params.publish_dir_mode, + pattern: '*lowDepth.fa.gz' + ], + ] } withName: MAXBIN2 { @@ -871,13 +944,54 @@ process { ext.prefix = { "${meta.assembler}-MetaBinner-${meta.id}" } } + withName: SEMIBIN_SINGLEEASYBIN { + publishDir = [ + [ + path: { "${params.outdir}/GenomeBinning/SemiBin2/" }, + mode: params.publish_dir_mode, + pattern: 'bins/*.fa.gz', + ], + [ + path: { "${params.outdir}/GenomeBinning/SemiBin2/log" }, + mode: params.publish_dir_mode, + pattern: '*.log', + ], + ] + ext.prefix = { "${meta.assembler}-SemiBin2-${meta.id}" } + ext.args2 = {[ + params.semibin_rng_seed == 0 ? "" : "--random-seed ${params.semibin_rng_seed}", + "--min-len ${params.min_contig_size}", + "--compression gz", + "--engine cpu", + meta.lr_platform ? "--sequencing-type long_reads" : "--sequencing-type short_reads", + meta.sample_count == 1 ? "--environment ${params.semibin_environment}" : "" + ].join(' ').trim()} + // potentially interesting params: --batch-size: Batch size used in the training process (Default: 2048). + } + withName: SEQKIT_STATS { ext.args = "" publishDir = [enabled: false] } withName: SPLIT_FASTA { - publishDir = [[path: { "${params.outdir}/GenomeBinning/${meta.binner}/unbinned" }, mode: params.publish_dir_mode, pattern: '*.*[0-9].fa.gz'], [path: { "${params.outdir}/GenomeBinning/${meta.binner}/unbinned/discarded" }, mode: params.publish_dir_mode, pattern: '*.pooled.fa.gz'], [path: { "${params.outdir}/GenomeBinning/${meta.binner}/unbinned/discarded" }, mode: params.publish_dir_mode, pattern: '*.remaining.fa.gz']] + publishDir = [ + [ + path: { "${params.outdir}/GenomeBinning/${meta.binner}/unbinned" }, + mode: params.publish_dir_mode, + pattern: '*.*[0-9].fa.gz' + ], + [ + path: { "${params.outdir}/GenomeBinning/${meta.binner}/unbinned/discarded" }, + mode: params.publish_dir_mode, + pattern: '*.pooled.fa.gz' + ], + [ + path: { "${params.outdir}/GenomeBinning/${meta.binner}/unbinned/discarded" }, + mode: params.publish_dir_mode, + pattern: '*.remaining.fa.gz' + ], + ] } withName: DASTOOL_FASTATOCONTIG2BIN_METABAT2 { @@ -901,6 +1015,8 @@ process { } withName: DASTOOL_DASTOOL { + ext.prefix = { "${meta.assembler}-DASTool-${meta.id}" } + ext.args = "--write_bins --write_unbinned --write_bin_evals --score_threshold ${params.refine_bins_dastool_threshold}" publishDir = [ [ path: { "${params.outdir}/GenomeBinning/DASTool" }, @@ -908,8 +1024,6 @@ process { pattern: '*.{tsv,log,eval,seqlength}', ] ] - ext.prefix = { "${meta.assembler}-DASTool-${meta.id}" } - ext.args = "--write_bins --write_unbinned --write_bin_evals --score_threshold ${params.refine_bins_dastool_threshold}" } withName: RENAME_POSTDASTOOL { @@ -938,25 +1052,39 @@ process { } withName: TIARA_CLASSIFY { - ext.args = { "--join_prokaryotes --assembler ${meta.assembler}" } + ext.args = '--join_prokaryotes' ext.prefix = { "${meta.assembler}-${meta.binner}-${meta.bin}-${meta.id}" } } - withName: TIARA_SUMMARY { - publishDir = [path: { "${params.outdir}/GenomeBinning/Tiara" }, mode: params.publish_dir_mode, pattern: "tiara_summary.tsv"] + withName: CONCAT_TIARA_TSV { ext.prefix = "tiara_summary" + publishDir = [ + path: { "${params.outdir}/GenomeBinning/Tiara" }, + mode: params.publish_dir_mode, + pattern: "tiara_summary.tsv", + ] } withName: MMSEQS_DATABASES { ext.prefix = { "${params.metaeuk_mmseqs_db.replaceAll("/", "-")}" } - publishDir = [path: { "${params.outdir}/Annotation/mmseqs_db/" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, enabled: params.save_mmseqs_db] + publishDir = [ + path: { "${params.outdir}/Annotation/mmseqs_db/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_mmseqs_db, + ] } withName: METAEUK_EASYPREDICT { ext.args = "" 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 }] + 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}\"" : '' } publishDir = [ @@ -965,4 +1093,13 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } + withName: BIGMAG { + publishDir = [ + [ + path: { "${params.outdir}/GenomeBinning/BIgMAG/" }, + mode: params.publish_dir_mode, + pattern: '*.tsv', + ] + ] + } } diff --git a/conf/test_alternatives.config b/conf/test_alternatives.config index 783c7c9d5..fe7410319 100644 --- a/conf/test_alternatives.config +++ b/conf/test_alternatives.config @@ -20,6 +20,12 @@ process { ] } +process { + CHECKM2_DATABASEDOWNLOAD { + ext.args = '-x 4' + } +} + params { config_profile_name = 'Test alternatives profile' config_profile_description = 'Minimal test dataset to check pipeline function' @@ -27,6 +33,7 @@ params { // Input data input = params.pipelines_testdata_base_path + 'mag/samplesheets/samplesheet.v4.csv' clip_tool = 'trimmomatic' + coassemble_group = true run_busco = true busco_clean = true run_checkm2 = true @@ -41,6 +48,7 @@ params { skip_concoct = true skip_comebin = true skip_metabinner = true + skip_semibin = true skip_metaeuk = true megahit_fix_cpu_1 = true } diff --git a/conf/test_assembly_input.config b/conf/test_assembly_input.config index b6643ea61..0b5909239 100644 --- a/conf/test_assembly_input.config +++ b/conf/test_assembly_input.config @@ -22,6 +22,7 @@ process { process { withName: METAEUK_EASYPREDICT { + cpus = 1 // to keep output order consistent ext.args = '-s 1 --max-seqs 10 --max-accept 1' } } @@ -36,6 +37,7 @@ params { busco_db = params.pipelines_testdata_base_path + 'mag/databases/busco/bacteria_odb10.2024-01-08.tar.gz' busco_db_lineage = 'bacteria_odb10' + busco_clean = true skip_quast = true skip_prodigal = true @@ -53,9 +55,10 @@ params { // TODO: enable when we have a suitable way to run a small test // GUNC fails with exit code 1 if no matches, see https://github.com/grp-bork/gunc/issues/42 + // Solving this will make it possible to generate the BIgMAG file in tests too run_gunc = false gunc_db = params.pipelines_testdata_base_path + 'mag/databases/gunc/gunc-mock.dmnd' skip_metaeuk = false - metaeuk_mmseqs_db = 'UniProtKB/Swiss-Prot' + metaeuk_mmseqs_db = 'Kalamari' } diff --git a/conf/test_longreadonly.config b/conf/test_longreadonly.config index d6b8e3afb..c14c03afb 100644 --- a/conf/test_longreadonly.config +++ b/conf/test_longreadonly.config @@ -40,4 +40,5 @@ params { skip_concoct = true skip_comebin = true skip_metabinner = true + skip_semibin = true } diff --git a/conf/test_longreadonly_alternatives.config b/conf/test_longreadonly_alternatives.config index 5d4672735..347ed1aec 100644 --- a/conf/test_longreadonly_alternatives.config +++ b/conf/test_longreadonly_alternatives.config @@ -40,5 +40,6 @@ params { skip_concoct = true skip_comebin = true skip_metabinner = true + skip_semibin = true skip_metaeuk = true } diff --git a/conf/test_minimal.config b/conf/test_minimal.config index 1189c3383..509cfb3d1 100644 --- a/conf/test_minimal.config +++ b/conf/test_minimal.config @@ -42,6 +42,7 @@ params { skip_concoct = true skip_comebin = true skip_metabinner = true + skip_semibin = true skip_prokka = true skip_binqc = true run_busco = false diff --git a/conf/test_single_end.config b/conf/test_single_end.config index 553ff12f7..0de0c8937 100644 --- a/conf/test_single_end.config +++ b/conf/test_single_end.config @@ -41,6 +41,7 @@ params { bcftools_view_minimal_allelesupport = 3 skip_comebin = true skip_metabinner = true + skip_semibin = true // contigs too short min_length_unbinned_contigs = 1000000 max_unbinned_contigs = 2 run_busco = false diff --git a/docs/images/mag_metromap_dark.png b/docs/images/mag_metromap_dark.png index 07dafaae2..19eedf741 100644 Binary files a/docs/images/mag_metromap_dark.png and b/docs/images/mag_metromap_dark.png differ diff --git a/docs/images/mag_metromap_dark.svg b/docs/images/mag_metromap_dark.svg index cb0eb26fa..e64396490 100644 --- a/docs/images/mag_metromap_dark.svg +++ b/docs/images/mag_metromap_dark.svg @@ -8,7 +8,7 @@ version="1.1" id="svg1" xml:space="preserve" - inkscape:version="1.3.2 (1:1.3.2+202311252150+091e20ef0f)" + inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" sodipodi:docname="mag_metromap_dark.svg" inkscape:export-filename="mag_metromap_dark.png" inkscape:export-xdpi="300" @@ -27,11 +27,16 @@ inkscape:deskcolor="#d1d1d1" inkscape:document-units="mm" showgrid="false" - inkscape:zoom="0.825266" - inkscape:cx="885.77501" - inkscape:cy="545.27873" + inkscape:zoom="0.82526601" + inkscape:cx="1008.1598" + inkscape:cy="663.42245" inkscape:current-layer="g9" - showguides="true">DASToolDASToolv5.2v5.3STARTMetaBat2 /MaxBin2 /MetaBat2 / MaxBin2 /CONCOCT/CONCOCT/ COMEBin /COMEBin /MetaBinnerMetaBinner / SemiBin25TiaraTiaraGUNCPROKKAMetaEuk78GTDBTK / CATBUSCO / CheckM / CheckM2QUASTContig binningBin refinementBin quality evaluationBin taxonomic classificationand annotationENDMultiQC/MultiQC/Bin Summary /Bin SummaryBIgMAG Summary9DASToolDASToolv5.2v5.3MetaBat2 /MaxBin2 /MetaBat2 / MaxBin2 /CONCOCT/CONCOCT/ COMEBin /COMEBin /MetaBinnerMetaBinner / SemiBin25TiaraTiaraGUNCPROKKAMetaEuk78GTDBTK / CATBUSCO / CheckM / CheckM2QUASTContig binningBin refinementBin quality evaluationBin taxonomic classificationand annotationENDMultiQC/MultiQC/Bin Summary /Bin SummaryBIgMAG Summary9 +Output files + +- `GenomeBinning/SemiBin2/` + - `bins/[assembler]-[binner]-[sample/group]_._*.fa.gz`: Genome bins retrieved from input assembly. + - `log/[assembler]-[binner]-[sample/group].SemiBinRun.log`: Log file. + + + +All the files and contigs in these folders will be assessed by QUAST and binning QC tools, if the parameter `--postbinning_input` is not set to `refined_bins_only`. + +Note that SemiBin2 does not output what it considers 'unbinned' contigs, therefore no 'discarded' contigs are produced here. You may still need to do your own manual curation of the resulting bins. + ### DAS Tool [DAS Tool](https://github.com/cmks/DAS_Tool) is an automated binning refinement method that integrates the results of a flexible number of binning algorithms to calculate an optimized, non-redundant set of bins from a single assembly. nf-core/mag uses this tool to attempt to further improve bins based on combining the MetaBAT2 and MaxBin2 binning output, assuming sufficient quality is met for those bins. @@ -826,6 +843,17 @@ Note that in contrast to the other tools, for CheckM the bin name given in the c All columns other than the primary `bin` key column, and the `Depth ` columns, will include a suffix specifying from which bin QC tool the column is derived from to distinguish identically named columns from different tools. +## Summary file to be used as input for BIgMAG + +
+Output files + +- `GenomeBinning/BIgMAG/bigmag_summary.tsv`: Summary of bin sequencing depths together with GUNC, QUAST, GTDB-Tk, BUSCO and CheckM2 results. + +
+ +The output file in this directory is used as input for the dashboard [BIgMAG](https://github.com/jeffe107/BIgMAG) for visualisation and evaluation of MAG quality. + ## Ancient DNA Optional, only running when parameter `-profile ancient_dna` is specified. diff --git a/docs/usage.md b/docs/usage.md index ed0845cb2..e711afed3 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -100,13 +100,13 @@ The assembly CSV file should contain the following columns: `id,group,assembler,fasta` -Where `id` is the ID of the assembly, group is the assembly/binning group (see samplesheet information section for more details), `assembler` is the assembler used to produce the assembly (one of `MEGAHIT`, `SPAdes`, or `SPAdesHybrid`), and `fasta` is the path to the assembly fasta file. Input fasta files can be compressed or uncompressed, but compressed assemblies will be automatically uncompressed for use within the pipeline. The exact information required for each supplied assembly depends on whether the assemblies provided are single assemblies or group-wise co-assemblies. For the following example `--input` CSV: +Where `id` is the ID of the assembly, group is the assembly/binning group (see samplesheet information section for more details), `assembler` is the assembler used to produce the assembly (one of `MEGAHIT`, `SPAdes`, `SPAdesHybrid`, `Flye` or `MetaMDBG`), and `fasta` is the path to the assembly fasta file. Input fasta files can be compressed or uncompressed, but compressed assemblies will be automatically uncompressed for use within the pipeline. The exact information required for each supplied assembly depends on whether the assemblies provided are single assemblies or group-wise co-assemblies. For the following example `--input` CSV: ```csv title="samplesheet.csv" -sample,group,short_reads_1,short_reads_2,long_reads,short_reads_platform -sample1,0,data/sample1_R1.fastq.gz,data/sample1_R2.fastq.gz,,ILLUMINA -sample2,0,data/sample2_R1.fastq.gz,data/sample2_R2.fastq.gz,,ILLUMINA -sample3,1,data/sample3_R1.fastq.gz,data/sample3_R2.fastq.gz,,ILLUMINA +sample,group,short_reads_1,short_reads_2,short_reads_platform +sample1,0,data/sample1_R1.fastq.gz,data/sample1_R2.fastq.gz,ILLUMINA +sample2,0,data/sample2_R1.fastq.gz,data/sample2_R2.fastq.gz,ILLUMINA +sample3,1,data/sample3_R1.fastq.gz,data/sample3_R2.fastq.gz,ILLUMINA ``` If the assemblies are single assemblies, then the `id` and `group` columns should match those supplied in the `-input` read CSV files for each read set: @@ -543,3 +543,9 @@ Up until version 4.0.0, this pipeline offered raw read taxonomic profiling using This feature was removed in version 5.0.0 to strengthen the pipeline's focus on metagenome assembly and binning. If you require taxonomic profiling of raw reads, we recommend using [nf-core/taxprofiler](https://nf-co.re/taxprofiler/), which is specifically designed for taxonomic profiling of raw reads and supports a wide range of tools for this purpose. + +## BIgMAG compatibility + +With the parameter `--generate_bigmag_file` a module will be triggered to generate a file that contains the output from all of the bin-quality tools that can be uploaded to the [BIgMAG](https://github.com/jeffe107/BIgMAG) dashboard for visualising and evaluating MAGs. +Please note that generating this file requires the parameters `--run_busco`, `--run_gunc` and `--run_checkm2`, and GTDBTk should be executed (i.e., not skipped). +The file `bigmag_summary.tsv` located at `GenomeBinning/BIgMAG` is the only file needed to run the BIgMAG dashboard. diff --git a/modules.json b/modules.json index 078b3ba25..270ef1307 100644 --- a/modules.json +++ b/modules.json @@ -18,22 +18,22 @@ }, "bcftools/consensus": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "bcftools/index": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "bcftools/view": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "busco/busco": { "branch": "master", - "git_sha": "36c6c8445284e021d95ce30cdf743baef66b21aa", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "cat/fastq": { @@ -63,7 +63,7 @@ }, "catpack/prepare": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "catpack/summarise": { @@ -78,7 +78,7 @@ }, "checkm/qa": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "checkm2/databasedownload": { @@ -88,12 +88,12 @@ }, "checkm2/predict": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "chopper": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "comebin/runcomebin": { @@ -103,47 +103,42 @@ }, "concoct/concoct": { "branch": "master", - "git_sha": "ff39793aeff17b7ccb107424215898710b4aa424", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["fasta_binning_concoct"] }, "concoct/concoctcoveragetable": { "branch": "master", - "git_sha": "ff39793aeff17b7ccb107424215898710b4aa424", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["fasta_binning_concoct"] }, "concoct/cutupfasta": { "branch": "master", - "git_sha": "ff39793aeff17b7ccb107424215898710b4aa424", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["fasta_binning_concoct"] }, "concoct/extractfastabins": { "branch": "master", - "git_sha": "ff39793aeff17b7ccb107424215898710b4aa424", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["fasta_binning_concoct"] }, "concoct/mergecutupclustering": { "branch": "master", - "git_sha": "ff39793aeff17b7ccb107424215898710b4aa424", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["fasta_binning_concoct"] }, - "csvtk/concat": { - "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"] - }, "dastool/dastool": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "dastool/fastatocontig2bin": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "fastp": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "d9ec4ef289ad39b8a662a7a12be50409b11df84b", "installed_by": ["modules"] }, "fastqc": { @@ -168,12 +163,12 @@ }, "genomad/download": { "branch": "master", - "git_sha": "8aa4fc43efb71597bc3377d5ab06119ce15dd51b", + "git_sha": "775256e10789e0f61ba57068b7256b23417f9772", "installed_by": ["modules"] }, "genomad/endtoend": { "branch": "master", - "git_sha": "8aa4fc43efb71597bc3377d5ab06119ce15dd51b", + "git_sha": "775256e10789e0f61ba57068b7256b23417f9772", "installed_by": ["modules"] }, "gtdbtk/classifywf": { @@ -188,12 +183,12 @@ }, "gunc/mergecheckm": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "gunc/run": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "gunzip": { @@ -223,27 +218,27 @@ }, "metaeuk/easypredict": { "branch": "master", - "git_sha": "47aa188c8a6b974917e4d000e47a3f4b71da67f6", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "metamdbg/asm": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "ecfdcb572340123aa4eac9d5e87d50b6965fdf83", "installed_by": ["modules"] }, "minimap2/align": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "minimap2/index": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "mmseqs/databases": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "38697a933bef7041bb935c9b8374d9948ce6c794", "installed_by": ["modules"] }, "multiqc": { @@ -258,7 +253,7 @@ }, "nanoplot": { "branch": "master", - "git_sha": "9322f997f94451510f974e417ec5277869030b44", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "nanoq": { @@ -273,12 +268,12 @@ }, "porechop/porechop": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "prodigal": { "branch": "master", - "git_sha": "ddb0d667cf6cdee3bab9497241de4bbf6b88d8cc", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "prokka": { @@ -296,21 +291,32 @@ "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", "installed_by": ["modules"] }, + "qsv/cat": { + "branch": "master", + "git_sha": "dff559d4a2dc87fc57a740bfefbf59198d1ad692", + "installed_by": ["modules"] + }, "samtools/faidx": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "samtools/index": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1", "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1", "installed_by": ["modules"] }, + "semibin/singleeasybin": { + "branch": "master", + "git_sha": "70e28be74bc73c74f085d6478a0a5e07ee5606c1", + "installed_by": ["modules"], + "patch": "modules/nf-core/semibin/singleeasybin/semibin-singleeasybin.diff" + }, "seqkit/stats": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", @@ -333,12 +339,12 @@ }, "trimmomatic": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "untar": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "00ee87ebb541af0008596400ce6d5f66d79d5408", "installed_by": ["modules"], "patch": "modules/nf-core/untar/untar.diff" } @@ -358,12 +364,12 @@ }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "271e7fc14eb1320364416d996fb077421f3faed2", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", - "git_sha": "4b406a74dc0449c0401ed87d5bfff4252fd277fd", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["subworkflows"] } } diff --git a/modules/local/bigmag_summary/environment.yml b/modules/local/bigmag_summary/environment.yml new file mode 100644 index 000000000..87aab3ccb --- /dev/null +++ b/modules/local/bigmag_summary/environment.yml @@ -0,0 +1,7 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::python=3.10.6 + - conda-forge::pandas=1.4.3 diff --git a/modules/local/bigmag_summary/main.nf b/modules/local/bigmag_summary/main.nf new file mode 100644 index 000000000..97885016d --- /dev/null +++ b/modules/local/bigmag_summary/main.nf @@ -0,0 +1,36 @@ +process PREPARE_BIGMAG_SUMMARY { + + conda "conda-forge::pandas=1.4.3" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://depot.galaxyproject.org/singularity/pandas:1.4.3' + : 'biocontainers/pandas:1.4.3'}" + + input: + path summary + path gunc_sum + + output: + path "bigmag_summary.tsv", emit: bigmag_summary + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + summary = summary.sort().size() > 0 ? "--summary ${summary}" : "" + def gunc_summary = gunc_sum.sort().size() > 0 ? "--gunc_summary ${gunc_sum}" : "" + """ + prepare_bigmag_summary.py \ + ${args} \ + ${summary} \ + ${gunc_summary} \ + --out bigmag_summary.tsv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python --version 2>&1 | sed 's/Python //g') + pandas: \$(python -c "import pkg_resources; print(pkg_resources.get_distribution('pandas').version)") + END_VERSIONS + """ +} diff --git a/modules/local/metabinner_bins/main.nf b/modules/local/metabinner_bins/main.nf index 928bc62a6..14eb96355 100644 --- a/modules/local/metabinner_bins/main.nf +++ b/modules/local/metabinner_bins/main.nf @@ -13,10 +13,10 @@ process METABINNER_BINS { val val_min_contig_size output: - tuple val(meta), path("*.tooShort.fa.gz") , emit: tooshort - tuple val(meta), path("*.unbinned.fa.gz") , emit: unbinned - tuple val(meta), path("bins/*.fa.gz") , emit: bins - path "versions.yml" , emit: versions + tuple val(meta), path("*.tooShort.fa.gz"), emit: tooshort, optional: true + tuple val(meta), path("*.unbinned.fa.gz"), emit: unbinned, optional: true + tuple val(meta), path("bins/*.fa.gz") , emit: bins + path "versions.yml" , emit: versions script: def prefix = task.ext.prefix ?: "${meta.id}" diff --git a/modules/local/tiara_classify/main.nf b/modules/local/tiara_classify/main.nf index 0ec993073..04a2cf31f 100644 --- a/modules/local/tiara_classify/main.nf +++ b/modules/local/tiara_classify/main.nf @@ -42,6 +42,7 @@ process TIARA_CLASSIFY { done < bin2classification.tsv cat <<-END_VERSIONS > versions.yml + "${task.process}": r-base: \$(R --version | head -n 1 | grep -Eo '[0-9.]+ ') r-tidyverse: \$(cat tidyverse_version.txt) END_VERSIONS diff --git a/modules/nf-core/bcftools/consensus/environment.yml b/modules/nf-core/bcftools/consensus/environment.yml index 557488607..ba863b388 100644 --- a/modules/nf-core/bcftools/consensus/environment.yml +++ b/modules/nf-core/bcftools/consensus/environment.yml @@ -4,4 +4,7 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::bcftools=1.21 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.22.1 + # renovate: datasource=conda depName=bioconda/bcftools + - bioconda::bcftools=1.22 diff --git a/modules/nf-core/bcftools/consensus/main.nf b/modules/nf-core/bcftools/consensus/main.nf index bcff83114..fe60ed46c 100644 --- a/modules/nf-core/bcftools/consensus/main.nf +++ b/modules/nf-core/bcftools/consensus/main.nf @@ -4,8 +4,8 @@ process BCFTOOLS_CONSENSUS { 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/5a/5acacb55c52bec97c61fd34ffa8721fce82ce823005793592e2a80bf71632cd0/data': - 'community.wave.seqera.io/library/bcftools:1.21--4335bec1d7b44d11' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data': + 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f' }" input: tuple val(meta), path(vcf), path(tbi), path(fasta), path(mask) diff --git a/modules/nf-core/bcftools/consensus/tests/main.nf.test b/modules/nf-core/bcftools/consensus/tests/main.nf.test index 567c78bc6..aa2084598 100644 --- a/modules/nf-core/bcftools/consensus/tests/main.nf.test +++ b/modules/nf-core/bcftools/consensus/tests/main.nf.test @@ -31,7 +31,7 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out).match() } - ) + ) } } @@ -57,7 +57,7 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out).match() } - ) + ) } } @@ -87,4 +87,4 @@ nextflow_process { ) } } -} \ No newline at end of file +} diff --git a/modules/nf-core/bcftools/consensus/tests/main.nf.test.snap b/modules/nf-core/bcftools/consensus/tests/main.nf.test.snap index 564303f08..6ca4ff14c 100644 --- a/modules/nf-core/bcftools/consensus/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/consensus/tests/main.nf.test.snap @@ -11,7 +11,7 @@ ] ], "1": [ - "versions.yml:md5,f23de3ce430443d1a74a0da8bf1951eb" + "versions.yml:md5,2a5790dcbde6506afdd3bb7abc3688e3" ], "fasta": [ [ @@ -22,15 +22,15 @@ ] ], "versions": [ - "versions.yml:md5,f23de3ce430443d1a74a0da8bf1951eb" + "versions.yml:md5,2a5790dcbde6506afdd3bb7abc3688e3" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-04-01T13:15:31.674308506" + "timestamp": "2025-09-11T14:09:07.198335" }, "bcftools - test": { "content": [ @@ -44,7 +44,7 @@ ] ], "1": [ - "versions.yml:md5,f23de3ce430443d1a74a0da8bf1951eb" + "versions.yml:md5,2a5790dcbde6506afdd3bb7abc3688e3" ], "fasta": [ [ @@ -55,15 +55,15 @@ ] ], "versions": [ - "versions.yml:md5,f23de3ce430443d1a74a0da8bf1951eb" + "versions.yml:md5,2a5790dcbde6506afdd3bb7abc3688e3" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-04-01T13:15:23.26111289" + "timestamp": "2025-09-11T14:08:57.627167" }, "bcftools - test - no mask": { "content": [ @@ -77,7 +77,7 @@ ] ], "1": [ - "versions.yml:md5,f23de3ce430443d1a74a0da8bf1951eb" + "versions.yml:md5,2a5790dcbde6506afdd3bb7abc3688e3" ], "fasta": [ [ @@ -88,14 +88,14 @@ ] ], "versions": [ - "versions.yml:md5,f23de3ce430443d1a74a0da8bf1951eb" + "versions.yml:md5,2a5790dcbde6506afdd3bb7abc3688e3" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-04-01T13:15:27.500207988" + "timestamp": "2025-09-11T14:09:02.014318" } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/index/environment.yml b/modules/nf-core/bcftools/index/environment.yml index 557488607..ba863b388 100644 --- a/modules/nf-core/bcftools/index/environment.yml +++ b/modules/nf-core/bcftools/index/environment.yml @@ -4,4 +4,7 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::bcftools=1.21 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.22.1 + # renovate: datasource=conda depName=bioconda/bcftools + - bioconda::bcftools=1.22 diff --git a/modules/nf-core/bcftools/index/main.nf b/modules/nf-core/bcftools/index/main.nf index 66d824a1b..16ff775a0 100644 --- a/modules/nf-core/bcftools/index/main.nf +++ b/modules/nf-core/bcftools/index/main.nf @@ -4,8 +4,8 @@ process BCFTOOLS_INDEX { 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/5a/5acacb55c52bec97c61fd34ffa8721fce82ce823005793592e2a80bf71632cd0/data': - 'community.wave.seqera.io/library/bcftools:1.21--4335bec1d7b44d11' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data': + 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f' }" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/bcftools/index/tests/main.nf.test b/modules/nf-core/bcftools/index/tests/main.nf.test index 9b3748533..24bbf948d 100644 --- a/modules/nf-core/bcftools/index/tests/main.nf.test +++ b/modules/nf-core/bcftools/index/tests/main.nf.test @@ -110,4 +110,4 @@ nextflow_process { } -} \ No newline at end of file +} diff --git a/modules/nf-core/bcftools/index/tests/main.nf.test.snap b/modules/nf-core/bcftools/index/tests/main.nf.test.snap index 19cdce7aa..30f6f7c35 100644 --- a/modules/nf-core/bcftools/index/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/index/tests/main.nf.test.snap @@ -14,7 +14,7 @@ ], "2": [ - "versions.yml:md5,0679fa7bdb181a09497bb5d0e0208e7e" + "versions.yml:md5,cea31a4d868054c7308a4129232a1f0e" ], "csi": [ [ @@ -28,15 +28,15 @@ ], "versions": [ - "versions.yml:md5,0679fa7bdb181a09497bb5d0e0208e7e" + "versions.yml:md5,cea31a4d868054c7308a4129232a1f0e" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-04-01T13:27:09.068494316" + "timestamp": "2025-09-11T14:12:33.825153" }, "sarscov2 - vcf - tbi": { "content": [ @@ -49,14 +49,14 @@ ] ], [ - "versions.yml:md5,0679fa7bdb181a09497bb5d0e0208e7e" + "versions.yml:md5,cea31a4d868054c7308a4129232a1f0e" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-04-01T13:27:02.067535809" + "timestamp": "2025-09-11T14:12:28.804939" }, "sarscov2 - vcf - tbi - stub": { "content": [ @@ -73,7 +73,7 @@ ] ], "2": [ - "versions.yml:md5,0679fa7bdb181a09497bb5d0e0208e7e" + "versions.yml:md5,cea31a4d868054c7308a4129232a1f0e" ], "csi": [ @@ -87,15 +87,15 @@ ] ], "versions": [ - "versions.yml:md5,0679fa7bdb181a09497bb5d0e0208e7e" + "versions.yml:md5,cea31a4d868054c7308a4129232a1f0e" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-04-01T13:27:13.198252226" + "timestamp": "2025-09-11T14:12:38.852782" }, "sarscov2 - vcf - csi": { "content": [ @@ -108,13 +108,13 @@ ] ], [ - "versions.yml:md5,0679fa7bdb181a09497bb5d0e0208e7e" + "versions.yml:md5,cea31a4d868054c7308a4129232a1f0e" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-04-01T13:26:58.059916648" + "timestamp": "2025-09-11T14:12:24.498904" } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/view/environment.yml b/modules/nf-core/bcftools/view/environment.yml index 557488607..ba863b388 100644 --- a/modules/nf-core/bcftools/view/environment.yml +++ b/modules/nf-core/bcftools/view/environment.yml @@ -4,4 +4,7 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::bcftools=1.21 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.22.1 + # renovate: datasource=conda depName=bioconda/bcftools + - bioconda::bcftools=1.22 diff --git a/modules/nf-core/bcftools/view/main.nf b/modules/nf-core/bcftools/view/main.nf index 5ef5d1bc6..72b31200b 100644 --- a/modules/nf-core/bcftools/view/main.nf +++ b/modules/nf-core/bcftools/view/main.nf @@ -4,8 +4,8 @@ process BCFTOOLS_VIEW { 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/5a/5acacb55c52bec97c61fd34ffa8721fce82ce823005793592e2a80bf71632cd0/data': - 'community.wave.seqera.io/library/bcftools:1.21--4335bec1d7b44d11' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data': + 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f' }" input: tuple val(meta), path(vcf), path(index) diff --git a/modules/nf-core/bcftools/view/tests/main.nf.test b/modules/nf-core/bcftools/view/tests/main.nf.test index 1e60c50d5..8281c17ed 100644 --- a/modules/nf-core/bcftools/view/tests/main.nf.test +++ b/modules/nf-core/bcftools/view/tests/main.nf.test @@ -295,4 +295,4 @@ nextflow_process { } -} \ No newline at end of file +} diff --git a/modules/nf-core/bcftools/view/tests/main.nf.test.snap b/modules/nf-core/bcftools/view/tests/main.nf.test.snap index 93d9adb66..38b61e44b 100644 --- a/modules/nf-core/bcftools/view/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/view/tests/main.nf.test.snap @@ -24,7 +24,7 @@ ] ], "3": [ - "versions.yml:md5,dcf736f3b92fe7943416d890ed15521e" + "versions.yml:md5,ad4e3c17561ccfd75a5438895b687d60" ], "csi": [ [ @@ -48,15 +48,15 @@ ] ], "versions": [ - "versions.yml:md5,dcf736f3b92fe7943416d890ed15521e" + "versions.yml:md5,ad4e3c17561ccfd75a5438895b687d60" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-04-01T14:12:56.166195802" + "timestamp": "2025-09-11T14:59:19.949819" }, "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi": { "content": [ @@ -82,14 +82,14 @@ ] ], [ - "versions.yml:md5,dcf736f3b92fe7943416d890ed15521e" + "versions.yml:md5,ad4e3c17561ccfd75a5438895b687d60" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-04-01T14:12:33.048845065" + "timestamp": "2025-09-11T14:59:00.329884" }, "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index - stub": { "content": [ @@ -116,7 +116,7 @@ ] ], "3": [ - "versions.yml:md5,dcf736f3b92fe7943416d890ed15521e" + "versions.yml:md5,ad4e3c17561ccfd75a5438895b687d60" ], "csi": [ [ @@ -140,15 +140,15 @@ ] ], "versions": [ - "versions.yml:md5,dcf736f3b92fe7943416d890ed15521e" + "versions.yml:md5,ad4e3c17561ccfd75a5438895b687d60" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-04-01T14:12:52.003188711" + "timestamp": "2025-09-11T14:59:15.546282" }, "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi - stub": { "content": [ @@ -175,7 +175,7 @@ ], "3": [ - "versions.yml:md5,dcf736f3b92fe7943416d890ed15521e" + "versions.yml:md5,ad4e3c17561ccfd75a5438895b687d60" ], "csi": [ @@ -199,15 +199,15 @@ ] ], "versions": [ - "versions.yml:md5,dcf736f3b92fe7943416d890ed15521e" + "versions.yml:md5,ad4e3c17561ccfd75a5438895b687d60" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-04-01T14:13:03.303865495" + "timestamp": "2025-09-11T14:59:24.406961" }, "sarscov2 - [vcf, tbi], vcf, tsv, []": { "content": [ @@ -221,27 +221,27 @@ ] ], [ - "versions.yml:md5,dcf736f3b92fe7943416d890ed15521e" + "versions.yml:md5,ad4e3c17561ccfd75a5438895b687d60" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-04-01T14:12:40.727725444" + "timestamp": "2025-09-11T14:59:05.680096" }, "sarscov2 - [vcf, tbi], [], [], [] - stub": { "content": [ "out.vcf", [ - "versions.yml:md5,dcf736f3b92fe7943416d890ed15521e" + "versions.yml:md5,ad4e3c17561ccfd75a5438895b687d60" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-04-01T14:12:47.850438431" + "timestamp": "2025-09-11T14:59:10.959586" }, "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index": { "content": [ @@ -267,14 +267,14 @@ ], [ - "versions.yml:md5,dcf736f3b92fe7943416d890ed15521e" + "versions.yml:md5,ad4e3c17561ccfd75a5438895b687d60" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-04-01T14:12:21.639961317" + "timestamp": "2025-09-11T14:58:50.932203" }, "sarscov2 - [vcf, tbi], [], [], []": { "content": [ @@ -288,14 +288,14 @@ ] ], [ - "versions.yml:md5,dcf736f3b92fe7943416d890ed15521e" + "versions.yml:md5,ad4e3c17561ccfd75a5438895b687d60" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-04-01T14:12:14.557692028" + "timestamp": "2025-09-11T14:58:45.877214" }, "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_csi": { "content": [ @@ -321,13 +321,13 @@ ], [ - "versions.yml:md5,dcf736f3b92fe7943416d890ed15521e" + "versions.yml:md5,ad4e3c17561ccfd75a5438895b687d60" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-04-01T14:12:25.812993907" + "timestamp": "2025-09-11T14:58:55.616644" } } \ No newline at end of file diff --git a/modules/nf-core/busco/busco/tests/main.nf.test b/modules/nf-core/busco/busco/tests/main.nf.test index 370e542d1..5610ed939 100644 --- a/modules/nf-core/busco/busco/tests/main.nf.test +++ b/modules/nf-core/busco/busco/tests/main.nf.test @@ -419,4 +419,4 @@ nextflow_process { ) } } -} \ No newline at end of file +} diff --git a/modules/nf-core/catpack/prepare/tests/main.nf.test b/modules/nf-core/catpack/prepare/tests/main.nf.test index 4e96ad9eb..26fd281f0 100644 --- a/modules/nf-core/catpack/prepare/tests/main.nf.test +++ b/modules/nf-core/catpack/prepare/tests/main.nf.test @@ -65,4 +65,4 @@ nextflow_process { } -} \ No newline at end of file +} diff --git a/modules/nf-core/checkm/qa/tests/main.nf.test b/modules/nf-core/checkm/qa/tests/main.nf.test index 8037bbc2a..e744c6493 100644 --- a/modules/nf-core/checkm/qa/tests/main.nf.test +++ b/modules/nf-core/checkm/qa/tests/main.nf.test @@ -85,4 +85,4 @@ nextflow_process { } -} \ No newline at end of file +} diff --git a/modules/nf-core/checkm2/predict/tests/main.nf.test b/modules/nf-core/checkm2/predict/tests/main.nf.test index fbaf4a189..673a10c4b 100644 --- a/modules/nf-core/checkm2/predict/tests/main.nf.test +++ b/modules/nf-core/checkm2/predict/tests/main.nf.test @@ -65,4 +65,4 @@ nextflow_process { ) } } -} \ No newline at end of file +} diff --git a/modules/nf-core/checkm2/predict/tests/nextflow.config b/modules/nf-core/checkm2/predict/tests/nextflow.config index 05da5a143..c6248b490 100644 --- a/modules/nf-core/checkm2/predict/tests/nextflow.config +++ b/modules/nf-core/checkm2/predict/tests/nextflow.config @@ -2,4 +2,4 @@ process { withName: "CHECKM2_PREDICT" { ext.args = "--lowmem" } -} \ No newline at end of file +} diff --git a/modules/nf-core/chopper/tests/main.nf.test b/modules/nf-core/chopper/tests/main.nf.test index e611fa9f7..2af436610 100644 --- a/modules/nf-core/chopper/tests/main.nf.test +++ b/modules/nf-core/chopper/tests/main.nf.test @@ -104,4 +104,4 @@ nextflow_process { ) } } -} \ No newline at end of file +} diff --git a/modules/nf-core/concoct/concoct/tests/main.nf.test b/modules/nf-core/concoct/concoct/tests/main.nf.test index 92d20c176..7b6071b1d 100644 --- a/modules/nf-core/concoct/concoct/tests/main.nf.test +++ b/modules/nf-core/concoct/concoct/tests/main.nf.test @@ -76,7 +76,7 @@ nextflow_process { process.out.versions, file(process.out.log_txt[0][1]).readLines().last().contains("CONCOCT Finished, the log shows how it went."), path(process.out.versions[0]).yaml - ).match() + ).match() } ) } diff --git a/modules/nf-core/concoct/concoctcoveragetable/tests/main.nf.test b/modules/nf-core/concoct/concoctcoveragetable/tests/main.nf.test index 98aa15b32..06d46f8d5 100644 --- a/modules/nf-core/concoct/concoctcoveragetable/tests/main.nf.test +++ b/modules/nf-core/concoct/concoctcoveragetable/tests/main.nf.test @@ -57,7 +57,7 @@ nextflow_process { { assert snapshot( process.out, path(process.out.versions[0]).yaml) - .match() + .match() } ) } @@ -82,7 +82,7 @@ nextflow_process { { assert snapshot( process.out, path(process.out.versions[0]).yaml - ).match() + ).match() } ) } diff --git a/modules/nf-core/concoct/cutupfasta/tests/main.nf.test b/modules/nf-core/concoct/cutupfasta/tests/main.nf.test index e18f8f061..94578e5c0 100644 --- a/modules/nf-core/concoct/cutupfasta/tests/main.nf.test +++ b/modules/nf-core/concoct/cutupfasta/tests/main.nf.test @@ -29,7 +29,7 @@ nextflow_process { { assert snapshot( process.out, path(process.out.versions[0]).yaml - ).match() + ).match() } ) } @@ -58,7 +58,7 @@ nextflow_process { { assert snapshot( process.out, path(process.out.versions[0]).yaml - ).match() + ).match() } ) } diff --git a/modules/nf-core/concoct/extractfastabins/tests/main.nf.test b/modules/nf-core/concoct/extractfastabins/tests/main.nf.test index f339b21b1..8b8af4df9 100644 --- a/modules/nf-core/concoct/extractfastabins/tests/main.nf.test +++ b/modules/nf-core/concoct/extractfastabins/tests/main.nf.test @@ -93,7 +93,7 @@ nextflow_process { { assert snapshot( process.out, path(process.out.versions[0]).yaml - ).match() + ).match() } ) } @@ -121,7 +121,7 @@ nextflow_process { { assert snapshot( process.out, path(process.out.versions[0]).yaml - ).match() + ).match() } ) } diff --git a/modules/nf-core/concoct/mergecutupclustering/tests/main.nf.test b/modules/nf-core/concoct/mergecutupclustering/tests/main.nf.test index d866d2628..9297bf5e4 100644 --- a/modules/nf-core/concoct/mergecutupclustering/tests/main.nf.test +++ b/modules/nf-core/concoct/mergecutupclustering/tests/main.nf.test @@ -80,7 +80,7 @@ nextflow_process { { assert snapshot( process.out, path(process.out.versions[0]).yaml - ).match() + ).match() } ) } @@ -105,7 +105,7 @@ nextflow_process { { assert snapshot( process.out, path(process.out.versions[0]).yaml - ).match() + ).match() } ) } diff --git a/modules/nf-core/csvtk/concat/main.nf b/modules/nf-core/csvtk/concat/main.nf deleted file mode 100644 index 9f17a9b1b..000000000 --- a/modules/nf-core/csvtk/concat/main.nf +++ /dev/null @@ -1,55 +0,0 @@ -process CSVTK_CONCAT { - 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/csvtk:0.31.0--h9ee0642_0' : - 'biocontainers/csvtk:0.31.0--h9ee0642_0' }" - - input: - tuple val(meta), path(csv, name: 'inputs/csv*/*') - val in_format - val out_format - - output: - tuple val(meta), path("${prefix}.${out_extension}"), emit: csv - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def delimiter = in_format == "tsv" ? "\t" : (in_format == "csv" ? "," : in_format) - def out_delimiter = out_format == "tsv" ? "\t" : (out_format == "csv" ? "," : out_format) - out_extension = out_format == "tsv" ? 'tsv' : 'csv' - """ - csvtk \\ - concat \\ - $args \\ - --num-cpus $task.cpus \\ - --delimiter "${delimiter}" \\ - --out-delimiter "${out_delimiter}" \\ - --out-file ${prefix}.${out_extension} \\ - $csv - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - csvtk: \$(echo \$( csvtk version | sed -e "s/csvtk v//g" )) - END_VERSIONS - """ - - stub: - prefix = task.ext.prefix ?: "${meta.id}" - out_extension = out_format == "tsv" ? 'tsv' : 'csv' - """ - touch ${prefix}.${out_extension} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - csvtk: \$(echo \$( csvtk version | sed -e "s/csvtk v//g" )) - END_VERSIONS - """ -} diff --git a/modules/nf-core/csvtk/concat/meta.yml b/modules/nf-core/csvtk/concat/meta.yml deleted file mode 100644 index 37497b312..000000000 --- a/modules/nf-core/csvtk/concat/meta.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: csvtk_concat -description: Concatenate two or more CSV (or TSV) tables into a single table -keywords: - - concatenate - - tsv - - csv -tools: - - csvtk: - description: A cross-platform, efficient, practical CSV/TSV toolkit - homepage: http://bioinf.shenwei.me/csvtk - documentation: http://bioinf.shenwei.me/csvtk - tool_dev_url: https://github.com/shenwei356/csvtk - licence: ["MIT"] - identifier: "" -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - csv: - type: file - description: CSV/TSV formatted files - pattern: "*.{csv,tsv}" - ontologies: - - edam: http://edamontology.org/format_3752 # CSV - - edam: http://edamontology.org/format_3475 # TSV - - in_format: - type: string - description: Input format (csv, tab, or a delimiting character) - pattern: "*" - - out_format: - type: string - description: Output format (csv, tab, or a delimiting character) - pattern: "*" -output: - csv: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.${out_extension}: - type: file - description: Concatenated CSV/TSV file - pattern: "*.{csv,tsv}" - ontologies: - - edam: http://edamontology.org/format_3752 # CSV - - edam: http://edamontology.org/format_3475 # TSV - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "version.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML -authors: - - "@rpetit3" -maintainers: - - "@rpetit3" diff --git a/modules/nf-core/csvtk/concat/tests/main.nf.test b/modules/nf-core/csvtk/concat/tests/main.nf.test deleted file mode 100644 index b6c1a581a..000000000 --- a/modules/nf-core/csvtk/concat/tests/main.nf.test +++ /dev/null @@ -1,72 +0,0 @@ -// nf-core modules test csvtk/concat -nextflow_process { - - name "Test Process CSVTK_CONCAT" - script "../main.nf" - process "CSVTK_CONCAT" - - tag "modules" - tag "modules_nfcore" - tag "csvtk" - tag "csvtk/concat" - - test("tsv - concat - csv") { - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - [ - file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_hybrid.csv", checkIfExists: true), - file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_long.csv", checkIfExists: true), - file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_short.csv", checkIfExists: true), - file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_short.csv", checkIfExists: true) - ] - ] - input[1] = "tsv" - input[2] = "csv" - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - - test("tsv - concat - csv - stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ - [ id:'test' ], // meta map - [ - file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_hybrid.csv", checkIfExists: true), - file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_long.csv", checkIfExists: true), - file("https://github.com/nf-core/test-datasets/raw/bacass/bacass_short.csv", checkIfExists: true) - ] - ] - input[1] = "tsv" - input[2] = "csv" - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - - } - -} \ No newline at end of file diff --git a/modules/nf-core/csvtk/concat/tests/main.nf.test.snap b/modules/nf-core/csvtk/concat/tests/main.nf.test.snap deleted file mode 100644 index 254d34a17..000000000 --- a/modules/nf-core/csvtk/concat/tests/main.nf.test.snap +++ /dev/null @@ -1,68 +0,0 @@ -{ - "tsv - concat - csv - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.csv:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - "versions.yml:md5,c203a84cc5b289951b70302549dcf08d" - ], - "csv": [ - [ - { - "id": "test" - }, - "test.csv:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,c203a84cc5b289951b70302549dcf08d" - ] - } - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.3" - }, - "timestamp": "2025-01-08T04:46:46.133640633" - }, - "tsv - concat - csv": { - "content": [ - { - "0": [ - [ - { - "id": "test" - }, - "test.csv:md5,bb0ed52999b6b24297bcefb3c29f0a5c" - ] - ], - "1": [ - "versions.yml:md5,c203a84cc5b289951b70302549dcf08d" - ], - "csv": [ - [ - { - "id": "test" - }, - "test.csv:md5,bb0ed52999b6b24297bcefb3c29f0a5c" - ] - ], - "versions": [ - "versions.yml:md5,c203a84cc5b289951b70302549dcf08d" - ] - } - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.3" - }, - "timestamp": "2025-01-08T04:46:31.419386462" - } -} \ No newline at end of file diff --git a/modules/nf-core/dastool/dastool/tests/main.nf.test b/modules/nf-core/dastool/dastool/tests/main.nf.test index fcf9a77d7..2a40149ca 100644 --- a/modules/nf-core/dastool/dastool/tests/main.nf.test +++ b/modules/nf-core/dastool/dastool/tests/main.nf.test @@ -174,4 +174,3 @@ nextflow_process { } } - diff --git a/modules/nf-core/dastool/fastatocontig2bin/tests/main.nf.test b/modules/nf-core/dastool/fastatocontig2bin/tests/main.nf.test index f2901cb7e..addcea162 100644 --- a/modules/nf-core/dastool/fastatocontig2bin/tests/main.nf.test +++ b/modules/nf-core/dastool/fastatocontig2bin/tests/main.nf.test @@ -80,4 +80,3 @@ nextflow_process { } } - diff --git a/modules/nf-core/fastp/environment.yml b/modules/nf-core/fastp/environment.yml index 90adcd2c5..0c36eed25 100644 --- a/modules/nf-core/fastp/environment.yml +++ b/modules/nf-core/fastp/environment.yml @@ -4,4 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::fastp=0.24.0 + # renovate: datasource=conda depName=bioconda/fastp + - bioconda::fastp=1.0.1 diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf index 6e3e6c43a..85013f5d7 100644 --- a/modules/nf-core/fastp/main.nf +++ b/modules/nf-core/fastp/main.nf @@ -4,12 +4,11 @@ process FASTP { 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/88/889a182b8066804f4799f3808a5813ad601381a8a0e3baa4ab8d73e739b97001/data' : - 'community.wave.seqera.io/library/fastp:0.24.0--62c97b06e8447690' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/52/527b18847a97451091dba07a886b24f17f742a861f9f6c9a6bfb79d4f1f3bf9d/data' : + 'community.wave.seqera.io/library/fastp:1.0.1--c8b87fe62dcc103c' }" input: - tuple val(meta), path(reads) - path adapter_fasta + tuple val(meta), path(reads), path(adapter_fasta) val discard_trimmed_pass val save_trimmed_fail val save_merged diff --git a/modules/nf-core/fastp/meta.yml b/modules/nf-core/fastp/meta.yml index b8673272a..324025fe5 100644 --- a/modules/nf-core/fastp/meta.yml +++ b/modules/nf-core/fastp/meta.yml @@ -25,11 +25,11 @@ input: respectively. If you wish to run interleaved paired-end data, supply as single-end data but with `--interleaved_in` in your `modules.conf`'s `ext.args` for the module. ontologies: [] - - adapter_fasta: - type: file - description: File in FASTA format containing possible adapters to remove. - pattern: "*.{fasta,fna,fas,fa}" - ontologies: [] + - adapter_fasta: + type: file + description: File in FASTA format containing possible adapters to remove. + pattern: "*.{fasta,fna,fas,fa}" + ontologies: [] - discard_trimmed_pass: type: boolean description: | diff --git a/modules/nf-core/fastp/tests/main.nf.test b/modules/nf-core/fastp/tests/main.nf.test index 30dbb8aab..5125705ce 100644 --- a/modules/nf-core/fastp/tests/main.nf.test +++ b/modules/nf-core/fastp/tests/main.nf.test @@ -13,14 +13,19 @@ nextflow_process { process { """ + adapter_fasta = [] // empty list for no adapter file! + discard_trimmed_pass = false + save_trimmed_fail = false + save_merged = false + 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) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -31,11 +36,11 @@ nextflow_process { { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, { assert snapshot( - process.out.json, process.out.reads, process.out.reads_fail, process.out.reads_merged, - process.out.versions).match() } + process.out.versions).match() + } ) } } @@ -46,20 +51,22 @@ nextflow_process { process { """ - adapter_fasta = [] - save_trimmed_pass = true - save_trimmed_fail = false - save_merged = false + adapter_fasta = [] + discard_trimmed_pass = false + save_trimmed_fail = false + save_merged = false 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/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -70,7 +77,6 @@ nextflow_process { { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, { assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") }, { assert snapshot( - process.out.json, process.out.reads, process.out.reads_fail, process.out.reads_merged, @@ -85,14 +91,19 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + save_trimmed_fail = false + save_merged = false + input[0] = Channel.of([ [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -106,7 +117,6 @@ nextflow_process { { assert process.out.reads_merged == [] }, { assert snapshot( process.out.reads, - process.out.json, process.out.versions).match() } ) } @@ -118,14 +128,19 @@ nextflow_process { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + save_trimmed_fail = true + save_merged = false + input[0] = Channel.of([ [ id:'test', single_end:true ], // 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_1.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = true - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -136,7 +151,6 @@ nextflow_process { { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, { assert snapshot( - process.out.json, process.out.reads, process.out.reads_fail, process.out.reads_merged, @@ -151,15 +165,22 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + save_trimmed_fail = true + save_merged = false + 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/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = true - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -173,7 +194,6 @@ nextflow_process { process.out.reads, process.out.reads_fail, process.out.reads_merged, - process.out.json, process.out.versions).match() } ) } @@ -184,15 +204,22 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + save_trimmed_fail = false + save_merged = true + 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/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = true + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -203,7 +230,6 @@ nextflow_process { { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, { assert path(process.out.log.get(0).get(1)).getText().contains("total reads: 75") }, { assert snapshot( - process.out.json, process.out.reads, process.out.reads_fail, process.out.reads_merged, @@ -217,15 +243,22 @@ nextflow_process { when { process { """ + adapter_fasta = file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) + discard_trimmed_pass = false + save_trimmed_fail = false + save_merged = true + 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/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ], + adapter_fasta ]) - input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) + input[1] = false input[2] = false - input[3] = false - input[4] = true + input[3] = true """ } } @@ -236,7 +269,6 @@ nextflow_process { { assert path(process.out.html.get(0).get(1)).getText().contains("
") }, { assert path(process.out.log.get(0).get(1)).getText().contains("total bases: 13683") }, { assert snapshot( - process.out.json, process.out.reads, process.out.reads_fail, process.out.reads_merged, @@ -250,14 +282,20 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_trimmed_pass = true + save_trimmed_fail = false + save_merged = false + 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) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = true - input[3] = false - input[4] = false + + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -268,7 +306,6 @@ nextflow_process { { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, { assert snapshot( - process.out.json, process.out.reads, process.out.reads, process.out.reads_fail, @@ -285,15 +322,22 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_trimmed_pass = true + save_trimmed_fail = false + save_merged = false + 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/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ], + adapter_fasta ]) - input[1] = [] - input[2] = true - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -304,7 +348,6 @@ nextflow_process { { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, { assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") }, { assert snapshot( - process.out.json, process.out.reads, process.out.reads, process.out.reads_fail, @@ -324,14 +367,19 @@ nextflow_process { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + save_trimmed_fail = false + save_merged = false + 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) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -352,20 +400,20 @@ nextflow_process { process { """ - adapter_fasta = [] - save_trimmed_pass = true - save_trimmed_fail = false - save_merged = false + adapter_fasta = [] + discard_trimmed_pass = false + save_trimmed_fail = false + save_merged = false 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/test_2.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -386,14 +434,19 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + save_trimmed_fail = false + save_merged = false + input[0] = Channel.of([ [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -414,14 +467,19 @@ nextflow_process { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + save_trimmed_fail = true + save_merged = false + input[0] = Channel.of([ [ id:'test', single_end:true ], // 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_1.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = true - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -442,15 +500,20 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + save_trimmed_fail = true + save_merged = false + 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/test_2.fastq.gz', checkIfExists: true)], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = true - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -470,15 +533,20 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_trimmed_pass = false + save_trimmed_fail = false + save_merged = true + 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/test_2.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = false - input[3] = false - input[4] = true + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -498,15 +566,22 @@ nextflow_process { when { process { """ + adapter_fasta = file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) + discard_trimmed_pass = false + save_trimmed_fail = false + save_merged = true + 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/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ], + adapter_fasta ]) - input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) - input[2] = false - input[3] = false - input[4] = true + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -526,14 +601,19 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_trimmed_pass = true + save_trimmed_fail = false + save_merged = false + 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) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = true - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -553,15 +633,20 @@ nextflow_process { when { process { """ + adapter_fasta = [] + discard_trimmed_pass = true + save_trimmed_fail = false + save_merged = false + 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/test_2.fastq.gz', checkIfExists: true) ], + adapter_fasta ]) - input[1] = [] - input[2] = true - input[3] = false - input[4] = false + input[1] = discard_trimmed_pass + input[2] = save_trimmed_fail + input[3] = save_merged """ } } @@ -573,4 +658,4 @@ nextflow_process { ) } } -} \ No newline at end of file +} diff --git a/modules/nf-core/fastp/tests/main.nf.test.snap b/modules/nf-core/fastp/tests/main.nf.test.snap index 9e2aaf315..a30c680d1 100644 --- a/modules/nf-core/fastp/tests/main.nf.test.snap +++ b/modules/nf-core/fastp/tests/main.nf.test.snap @@ -39,7 +39,7 @@ ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ], "html": [ [ @@ -78,27 +78,18 @@ ], "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:40:51.8619133" + "timestamp": "2025-09-11T09:55:42.073182" }, "test_fastp_paired_end": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,7cf3bff1922b512bcca58439eb2d3679" - ] - ], [ [ { @@ -118,26 +109,17 @@ ], [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:39:15.121411815" + "timestamp": "2025-09-19T16:23:12.436191" }, "test_fastp_paired_end_merged_adapterlist": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,533983f8c11cc3f2ccdcea01531f68ae" - ] - ], [ [ { @@ -163,26 +145,17 @@ ] ], [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:39:51.561598206" + "timestamp": "2025-09-19T16:23:32.267735" }, "test_fastp_single_end_qc_only": { "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,93f407199ee8b94c023c291bddfc4dce" - ] - ], [ ], @@ -202,14 +175,14 @@ ], [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:39:56.392912049" + "timestamp": "2025-09-19T16:23:36.149003" }, "test_fastp_paired_end_trim_fail": { "content": [ @@ -242,23 +215,14 @@ ], [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,5009a892192f2084c2af69c153d88d6c" - ] - ], - [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:39:38.690242568" + "timestamp": "2025-09-19T16:23:24.23891" }, "fastp - stub test_fastp_interleaved": { "content": [ @@ -306,7 +270,7 @@ ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ], "html": [ [ @@ -351,15 +315,15 @@ ], "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:40:23.678200076" + "timestamp": "2025-09-11T09:55:19.47199" }, "test_fastp_single_end - stub": { "content": [ @@ -407,7 +371,7 @@ ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ], "html": [ [ @@ -452,15 +416,15 @@ ], "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:40:08.756547678" + "timestamp": "2025-09-11T09:55:09.617001" }, "test_fastp_paired_end_merged_adapterlist - stub": { "content": [ @@ -517,7 +481,7 @@ ] ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ], "html": [ [ @@ -571,15 +535,15 @@ ] ], "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:40:47.596331823" + "timestamp": "2025-09-11T09:55:37.413738" }, "test_fastp_paired_end_merged - stub": { "content": [ @@ -636,7 +600,7 @@ ] ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ], "html": [ [ @@ -690,27 +654,18 @@ ] ], "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:40:39.962303534" + "timestamp": "2025-09-11T09:55:32.965652" }, "test_fastp_paired_end_merged": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,8f99097bfa04b629891105b8af9c429f" - ] - ], [ [ { @@ -736,14 +691,14 @@ ] ], [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:39:46.300238743" + "timestamp": "2025-09-19T16:23:28.074624" }, "test_fastp_paired_end - stub": { "content": [ @@ -794,7 +749,7 @@ ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ], "html": [ [ @@ -842,27 +797,18 @@ ], "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:40:16.309925689" + "timestamp": "2025-09-11T09:55:14.414258" }, "test_fastp_single_end": { "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,81dc86dd695967bb5c015e0a978bf20c" - ] - ], [ [ { @@ -879,14 +825,14 @@ ], [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:39:07.133909607" + "timestamp": "2025-09-19T16:23:08.469846" }, "test_fastp_single_end_trim_fail - stub": { "content": [ @@ -940,7 +886,7 @@ ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ], "html": [ [ @@ -991,15 +937,15 @@ ], "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:40:28.086573661" + "timestamp": "2025-09-11T09:55:23.871395" }, "test_fastp_paired_end_trim_fail - stub": { "content": [ @@ -1060,7 +1006,7 @@ ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ], "html": [ [ @@ -1118,15 +1064,15 @@ ], "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:40:35.606162029" + "timestamp": "2025-09-11T09:55:28.399328" }, "fastp test_fastp_interleaved": { "content": [ @@ -1140,35 +1086,17 @@ ] ], [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,101003b8ac634ca5fd381656ac2b8b9f" - ] - ], - [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:39:23.114582408" + "timestamp": "2025-09-19T16:23:16.479494" }, "test_fastp_single_end_trim_fail": { "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,d721f75d68a382c819b6499e6325a942" - ] - ], [ [ { @@ -1191,26 +1119,17 @@ ], [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:39:30.757538842" + "timestamp": "2025-09-19T16:23:20.299076" }, "test_fastp_paired_end_qc_only": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.fastp.json:md5,1ad31d6559ff5d4d275f501f3f5c02b9" - ] - ], [ ], @@ -1230,14 +1149,14 @@ ], [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:40:01.381972575" + "timestamp": "2025-09-19T16:23:40.113724" }, "test_fastp_paired_end_qc_only - stub": { "content": [ @@ -1279,7 +1198,7 @@ ], "6": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ], "html": [ [ @@ -1318,14 +1237,14 @@ ], "versions": [ - "versions.yml:md5,3799377c4173131ba9392346e1c40bb9" + "versions.yml:md5,c4974822658d02533e660fae343f281b" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.6" }, - "timestamp": "2025-03-31T13:40:56.392034947" + "timestamp": "2025-09-11T09:55:46.696419" } } \ No newline at end of file diff --git a/modules/nf-core/genomad/download/environment.yml b/modules/nf-core/genomad/download/environment.yml index b45cf0921..bc9a66b1c 100644 --- a/modules/nf-core/genomad/download/environment.yml +++ b/modules/nf-core/genomad/download/environment.yml @@ -4,5 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::genomad=1.11.1 - - conda-forge::rich-click=1.8.9 # temporary fix to prevent wrong geNomad version reported + - bioconda::genomad=1.11.2 diff --git a/modules/nf-core/genomad/download/main.nf b/modules/nf-core/genomad/download/main.nf index 1d0bd2e97..d5007b0df 100644 --- a/modules/nf-core/genomad/download/main.nf +++ b/modules/nf-core/genomad/download/main.nf @@ -3,8 +3,8 @@ process GENOMAD_DOWNLOAD { 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/f3/f367c7e7112f39b159ef871c046709d0213285c2cb98388ca5defd73846b6eda/data' - : 'community.wave.seqera.io/library/genomad_rich-click:f0535431e035ccee'}" + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/bb/bbaadac0c5d49bb7c664d9d3651521aa638b795cdbab7eb9493ec66350508f97/data' + : 'community.wave.seqera.io/library/genomad:1.11.2--1e14efa5dfbf0dc3'}" output: path "genomad_db/" , emit: genomad_db diff --git a/modules/nf-core/genomad/download/tests/main.nf.test.snap b/modules/nf-core/genomad/download/tests/main.nf.test.snap index 67a0a217c..3bfd79295 100644 --- a/modules/nf-core/genomad/download/tests/main.nf.test.snap +++ b/modules/nf-core/genomad/download/tests/main.nf.test.snap @@ -42,7 +42,7 @@ ] ], "1": [ - "versions.yml:md5,7f23ba79fd8d3825dcc69f3dfc219c3f" + "versions.yml:md5,004a143aa24628dda9cf25a0d4250f5e" ], "genomad_db": [ [ @@ -84,7 +84,7 @@ ] ], "versions": [ - "versions.yml:md5,7f23ba79fd8d3825dcc69f3dfc219c3f" + "versions.yml:md5,004a143aa24628dda9cf25a0d4250f5e" ] } ], @@ -92,7 +92,7 @@ "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-11-05T15:18:39.766616699" + "timestamp": "2025-11-17T10:28:32.456407168" }, "No input": { "content": [ @@ -137,7 +137,7 @@ ] ], "1": [ - "versions.yml:md5,7f23ba79fd8d3825dcc69f3dfc219c3f" + "versions.yml:md5,004a143aa24628dda9cf25a0d4250f5e" ], "genomad_db": [ [ @@ -179,7 +179,7 @@ ] ], "versions": [ - "versions.yml:md5,7f23ba79fd8d3825dcc69f3dfc219c3f" + "versions.yml:md5,004a143aa24628dda9cf25a0d4250f5e" ] } ], @@ -187,6 +187,6 @@ "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-11-05T15:18:07.76756628" + "timestamp": "2025-11-17T10:28:12.068812802" } } \ No newline at end of file diff --git a/modules/nf-core/genomad/endtoend/environment.yml b/modules/nf-core/genomad/endtoend/environment.yml index 27c93b430..bc9a66b1c 100644 --- a/modules/nf-core/genomad/endtoend/environment.yml +++ b/modules/nf-core/genomad/endtoend/environment.yml @@ -4,5 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::genomad=1.11.1 - - conda-forge::rich-click=1.8.9 # temporary fix to prevent wrong version reported + - bioconda::genomad=1.11.2 diff --git a/modules/nf-core/genomad/endtoend/main.nf b/modules/nf-core/genomad/endtoend/main.nf index 96e56a798..13f84de14 100644 --- a/modules/nf-core/genomad/endtoend/main.nf +++ b/modules/nf-core/genomad/endtoend/main.nf @@ -4,8 +4,8 @@ process GENOMAD_ENDTOEND { 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/f3/f367c7e7112f39b159ef871c046709d0213285c2cb98388ca5defd73846b6eda/data' - : 'community.wave.seqera.io/library/genomad_rich-click:f0535431e035ccee'}" + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/bb/bbaadac0c5d49bb7c664d9d3651521aa638b795cdbab7eb9493ec66350508f97/data' + : 'community.wave.seqera.io/library/genomad:1.11.2--1e14efa5dfbf0dc3'}" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/genomad/endtoend/tests/main.nf.test.snap b/modules/nf-core/genomad/endtoend/tests/main.nf.test.snap index c0f548e43..ada9cf87f 100644 --- a/modules/nf-core/genomad/endtoend/tests/main.nf.test.snap +++ b/modules/nf-core/genomad/endtoend/tests/main.nf.test.snap @@ -80,14 +80,14 @@ ] ], [ - "versions.yml:md5,f6708c68714afef839ab49a62d9db22d" + "versions.yml:md5,9268a8dfeec21e983bbee7de567b5f1b" ] ], "meta": { "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-11-05T15:20:15.618243167" + "timestamp": "2025-11-17T10:29:39.259513772" }, "sarscov2 - genome - fasta - stub": { "content": [ @@ -136,7 +136,7 @@ ] ], "14": [ - "versions.yml:md5,f6708c68714afef839ab49a62d9db22d" + "versions.yml:md5,9268a8dfeec21e983bbee7de567b5f1b" ], "2": [ [ @@ -268,7 +268,7 @@ ] ], "versions": [ - "versions.yml:md5,f6708c68714afef839ab49a62d9db22d" + "versions.yml:md5,9268a8dfeec21e983bbee7de567b5f1b" ], "virus_fasta": [ [ @@ -308,6 +308,6 @@ "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-11-05T15:21:28.957741139" + "timestamp": "2025-11-17T10:30:28.400394867" } } \ No newline at end of file diff --git a/modules/nf-core/gunc/mergecheckm/main.nf b/modules/nf-core/gunc/mergecheckm/main.nf index 611f916c2..53723d5c0 100644 --- a/modules/nf-core/gunc/mergecheckm/main.nf +++ b/modules/nf-core/gunc/mergecheckm/main.nf @@ -41,6 +41,6 @@ process GUNC_MERGECHECKM { cat <<-END_VERSIONS > versions.yml "${task.process}": gunc: \$( gunc --version ) - END_VERSIONS + END_VERSIONS """ } diff --git a/modules/nf-core/gunc/mergecheckm/tests/main.nf.test b/modules/nf-core/gunc/mergecheckm/tests/main.nf.test index dbd67b901..3ae1a91f1 100644 --- a/modules/nf-core/gunc/mergecheckm/tests/main.nf.test +++ b/modules/nf-core/gunc/mergecheckm/tests/main.nf.test @@ -172,4 +172,4 @@ nextflow_process { } } -} \ No newline at end of file +} diff --git a/modules/nf-core/gunc/run/main.nf b/modules/nf-core/gunc/run/main.nf index 9ee614e4c..81262179f 100644 --- a/modules/nf-core/gunc/run/main.nf +++ b/modules/nf-core/gunc/run/main.nf @@ -40,7 +40,7 @@ process GUNC_RUN { stub: """ touch maxCSS_level.tsv all_levels.tsv - + cat <<-END_VERSIONS > versions.yml "${task.process}": gunc: \$( gunc --version ) diff --git a/modules/nf-core/gunc/run/tests/main.nf.test b/modules/nf-core/gunc/run/tests/main.nf.test index c1659f0c5..4721601fc 100644 --- a/modules/nf-core/gunc/run/tests/main.nf.test +++ b/modules/nf-core/gunc/run/tests/main.nf.test @@ -93,4 +93,4 @@ nextflow_process { } -} \ No newline at end of file +} diff --git a/modules/nf-core/metaeuk/easypredict/tests/main.nf.test b/modules/nf-core/metaeuk/easypredict/tests/main.nf.test index 0fd5befbb..7ec5aee06 100644 --- a/modules/nf-core/metaeuk/easypredict/tests/main.nf.test +++ b/modules/nf-core/metaeuk/easypredict/tests/main.nf.test @@ -33,15 +33,15 @@ nextflow_process { ) } } - + test("homo_sapiens - fasta - mmseqs db") { setup { run("MMSEQS_DATABASES") { script "../../../mmseqs/databases/main.nf" - + process { """ - input[0] = 'UniProtKB/Swiss-Prot' + input[0] = 'Kalamari' """ } } @@ -64,8 +64,8 @@ nextflow_process { ) } } - - + + test("homo_sapiens - fasta - fasta -- stub") { options '-stub' when { @@ -91,4 +91,4 @@ nextflow_process { ) } } -} \ No newline at end of file +} diff --git a/modules/nf-core/metaeuk/easypredict/tests/main.nf.test.snap b/modules/nf-core/metaeuk/easypredict/tests/main.nf.test.snap index f51a149ab..ee9c39186 100644 --- a/modules/nf-core/metaeuk/easypredict/tests/main.nf.test.snap +++ b/modules/nf-core/metaeuk/easypredict/tests/main.nf.test.snap @@ -174,7 +174,7 @@ { "id": "test" }, - "test.fas:md5,3834a7d4dc4f7da755afc00b73589a1b" + "test.fas:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "1": [ @@ -182,7 +182,7 @@ { "id": "test" }, - "test.codon.fas:md5,21e47f601e73834f96a61f5150535716" + "test.codon.fas:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "2": [ @@ -190,7 +190,7 @@ { "id": "test" }, - "test.headersMap.tsv:md5,518ed985e5dad185ba2e8228c540c059" + "test.headersMap.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "3": [ @@ -198,7 +198,7 @@ { "id": "test" }, - "test.gff:md5,0d1e318931bb2b441fbc035137b7fc49" + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "4": [ @@ -209,7 +209,7 @@ { "id": "test" }, - "test.codon.fas:md5,21e47f601e73834f96a61f5150535716" + "test.codon.fas:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "faa": [ @@ -217,7 +217,7 @@ { "id": "test" }, - "test.fas:md5,3834a7d4dc4f7da755afc00b73589a1b" + "test.fas:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "gff": [ @@ -225,7 +225,7 @@ { "id": "test" }, - "test.gff:md5,0d1e318931bb2b441fbc035137b7fc49" + "test.gff:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "tsv": [ @@ -233,7 +233,7 @@ { "id": "test" }, - "test.headersMap.tsv:md5,518ed985e5dad185ba2e8228c540c059" + "test.headersMap.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "versions": [ @@ -243,8 +243,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nextflow": "25.10.0" }, - "timestamp": "2025-09-25T08:18:53.256041749" + "timestamp": "2025-11-01T17:50:24.868686992" } } \ No newline at end of file diff --git a/modules/nf-core/metamdbg/asm/environment.yml b/modules/nf-core/metamdbg/asm/environment.yml index 5641ddf77..c433d7f58 100644 --- a/modules/nf-core/metamdbg/asm/environment.yml +++ b/modules/nf-core/metamdbg/asm/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::metamdbg=1.1 + - bioconda::metamdbg=1.2 diff --git a/modules/nf-core/metamdbg/asm/main.nf b/modules/nf-core/metamdbg/asm/main.nf index c258a58e1..7c82e8717 100644 --- a/modules/nf-core/metamdbg/asm/main.nf +++ b/modules/nf-core/metamdbg/asm/main.nf @@ -4,8 +4,8 @@ process METAMDBG_ASM { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/metamdbg:1.1--h077b44d_1': - 'biocontainers/metamdbg:1.1--h077b44d_1' }" + 'https://depot.galaxyproject.org/singularity/metamdbg:1.2--h077b44d_0': + 'biocontainers/metamdbg:1.2--h077b44d_0' }" input: tuple val(meta), path(reads) diff --git a/modules/nf-core/metamdbg/asm/tests/main.nf.test.snap b/modules/nf-core/metamdbg/asm/tests/main.nf.test.snap index 12a192d71..23e628446 100644 --- a/modules/nf-core/metamdbg/asm/tests/main.nf.test.snap +++ b/modules/nf-core/metamdbg/asm/tests/main.nf.test.snap @@ -4,39 +4,39 @@ "test.contigs.fasta.gz", "test.metaMDBG.log", [ - "versions.yml:md5,7891f9a1057e30846f3f7ec4ab0c7b4b" + "versions.yml:md5,bce50e016364469f06dc4e8006b9ab6b" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "25.04.6" }, - "timestamp": "2024-12-17T10:23:06.500307496" + "timestamp": "2025-09-18T12:02:15.785819305" }, "metamdbg_asm - ont": { "content": [ "test.contigs.fasta.gz", "test.metaMDBG.log", [ - "versions.yml:md5,7891f9a1057e30846f3f7ec4ab0c7b4b" + "versions.yml:md5,bce50e016364469f06dc4e8006b9ab6b" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "25.04.6" }, - "timestamp": "2024-12-17T10:22:42.120580907" + "timestamp": "2025-09-18T12:01:41.895158305" }, "stub_versions": { "content": [ [ - "versions.yml:md5,7891f9a1057e30846f3f7ec4ab0c7b4b" + "versions.yml:md5,bce50e016364469f06dc4e8006b9ab6b" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.2" + "nextflow": "25.04.6" }, - "timestamp": "2024-12-17T10:23:22.954484953" + "timestamp": "2025-09-18T12:02:34.942634273" } } \ No newline at end of file diff --git a/modules/nf-core/minimap2/align/tests/main.nf.test b/modules/nf-core/minimap2/align/tests/main.nf.test index 4072c1719..650614046 100644 --- a/modules/nf-core/minimap2/align/tests/main.nf.test +++ b/modules/nf-core/minimap2/align/tests/main.nf.test @@ -438,4 +438,4 @@ nextflow_process { } -} \ No newline at end of file +} diff --git a/modules/nf-core/minimap2/index/tests/main.nf.test b/modules/nf-core/minimap2/index/tests/main.nf.test index 97840ff75..eec743cf3 100644 --- a/modules/nf-core/minimap2/index/tests/main.nf.test +++ b/modules/nf-core/minimap2/index/tests/main.nf.test @@ -29,4 +29,4 @@ nextflow_process { } -} \ 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 69afa6095..8d98e4f38 100644 --- a/modules/nf-core/mmseqs/databases/environment.yml +++ b/modules/nf-core/mmseqs/databases/environment.yml @@ -4,4 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::mmseqs2=17.b804f + - bioconda::mmseqs2=18.8cc5c + - conda-forge::wget=1.25.0 diff --git a/modules/nf-core/mmseqs/databases/main.nf b/modules/nf-core/mmseqs/databases/main.nf index 51d54ab76..beab6f6ca 100644 --- a/modules/nf-core/mmseqs/databases/main.nf +++ b/modules/nf-core/mmseqs/databases/main.nf @@ -3,16 +3,16 @@ process MMSEQS_DATABASES { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mmseqs2:17.b804f--hd6d6fdc_1': - 'biocontainers/mmseqs2:17.b804f--hd6d6fdc_1' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/ed/edfecaaca16ca7fb7b6428dce0ed9c737549b38146360c98fdabf74e6c4cac68/data' + : 'community.wave.seqera.io/library/mmseqs2_wget:aa683a2c5355899d'}" input: 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/tests/main.nf.test.snap b/modules/nf-core/mmseqs/databases/tests/main.nf.test.snap index 2805e1c02..352f86141 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,387bbb2d1d6bac273e8158743af4c856" + "versions.yml:md5,8b0327ce5ea3f6f7186ba79be01f80b3" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nextflow": "25.10.0" }, - "timestamp": "2025-01-20T15:32:42.284982" + "timestamp": "2025-11-01T16:21:01.933973604" }, "test-mmseqs-databases-stub": { "content": [ diff --git a/modules/nf-core/nanoplot/tests/main.nf.test b/modules/nf-core/nanoplot/tests/main.nf.test index e0042d39b..f5163bab2 100644 --- a/modules/nf-core/nanoplot/tests/main.nf.test +++ b/modules/nf-core/nanoplot/tests/main.nf.test @@ -90,4 +90,4 @@ nextflow_process { ) } } -} \ No newline at end of file +} diff --git a/modules/nf-core/porechop/porechop/main.nf b/modules/nf-core/porechop/porechop/main.nf index 34daf3e89..dd148cf5f 100644 --- a/modules/nf-core/porechop/porechop/main.nf +++ b/modules/nf-core/porechop/porechop/main.nf @@ -3,7 +3,7 @@ process PORECHOP_PORECHOP { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/2b/2bce1f10c51906a66c4c4d3a7485394f67e304177192ad1cce6cf586a3a18bae/data' : 'community.wave.seqera.io/library/porechop_pigz:d1655e5b5bad786c' }" diff --git a/modules/nf-core/prodigal/tests/main.nf.test b/modules/nf-core/prodigal/tests/main.nf.test index 446bd0d19..cddf5efe8 100644 --- a/modules/nf-core/prodigal/tests/main.nf.test +++ b/modules/nf-core/prodigal/tests/main.nf.test @@ -98,4 +98,4 @@ nextflow_process { } } -} \ No newline at end of file +} diff --git a/modules/nf-core/csvtk/concat/environment.yml b/modules/nf-core/qsv/cat/environment.yml similarity index 80% rename from modules/nf-core/csvtk/concat/environment.yml rename to modules/nf-core/qsv/cat/environment.yml index 52d488da4..f54de7311 100644 --- a/modules/nf-core/csvtk/concat/environment.yml +++ b/modules/nf-core/qsv/cat/environment.yml @@ -1,7 +1,6 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - - bioconda - conda-forge dependencies: - - bioconda::csvtk=0.31.0 + - conda-forge::qsv=5.1.0 diff --git a/modules/nf-core/qsv/cat/main.nf b/modules/nf-core/qsv/cat/main.nf new file mode 100644 index 000000000..f29d1cf2f --- /dev/null +++ b/modules/nf-core/qsv/cat/main.nf @@ -0,0 +1,46 @@ +process QSV_CAT { + tag "${meta.id}" + label 'process_single' + + 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/86/864fcf1e6a250b588eaabd4df01334e44bc528fd29049c4fb24f7c56c8c33695/data' + : 'community.wave.seqera.io/library/qsv:5.1.0--9a6a0c23d3b279b5'}" + + input: + tuple val(meta), path(csv, name: 'inputs/in*/*') + val mode + val out_format + val skip_input_format_check + + output: + tuple val(meta), path("${prefix}.${out_format}"), emit: csv + tuple val("${task.process}"), val('qsv'), eval("qsv --version | cut -d' ' -f2 | cut -d'-' -f1"), topic: versions, emit: versions_qsv + + when: + task.ext.when == null || task.ext.when + + script: + prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def skip_format_check_cmd = skip_input_format_check ? 'export QSV_SKIP_FORMAT_CHECK=1' : '' + """ + ${skip_format_check_cmd} + + qsv \\ + cat \\ + ${mode} \\ + ${args} \\ + -o ${prefix}.${out_format} \\ + ${csv} + """ + + stub: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + """ + echo ${args} + + touch ${prefix}.${out_format} + """ +} diff --git a/modules/nf-core/qsv/cat/meta.yml b/modules/nf-core/qsv/cat/meta.yml new file mode 100644 index 000000000..f784da9e9 --- /dev/null +++ b/modules/nf-core/qsv/cat/meta.yml @@ -0,0 +1,68 @@ +name: qsv_cat +description: Concatenate two or more CSV (or TSV) tables into a single table +keywords: + - concatenate + - tsv + - csv +tools: + - csvtk: + description: Blazing-fast Data-Wrangling toolkit + homepage: https://qsv.dathere.com + documentation: https://github.com/dathere/qsv + tool_dev_url: https://github.com/dathere/qsv + licence: ["MIT", "UNLICENSE"] + identifier: "" +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - csv: + type: file + description: CSV/TSV formatted files + pattern: "*.{csv,tsv}" + ontologies: + - edam: http://edamontology.org/format_3752 # CSV + - edam: http://edamontology.org/format_3475 # TSV + - mode: + type: string + description: Concatenation mode (rows, columns or rowskey) + pattern: "^(rows|columns|rowskey)$" + - out_format: + type: string + description: Output format (.csv for comma delimiter, .ssv for semicolon, and .tsv or .tab for tab) + pattern: "^(csv|ssv|tsv|tab)$" + - skip_input_format_check: + type: boolean + description: Skip input format check (by default QSV checks input format based on file extension) +output: + csv: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - ${prefix}.${out_format}: + type: file + description: Concatenated CSV/TSV file + pattern: "*.{csv,tsv,tab,ssv}" + ontologies: + - edam: http://edamontology.org/format_3752 # CSV + - edam: http://edamontology.org/format_3475 # TSV + versions_qsv: &versions + - - ${task.process}: + type: string + description: The name of the process + - qsv: + type: string + description: The name of the tool + - "qsv --version | cut -d' ' -f2 | cut -d'-' -f1": + type: eval + description: The expression to obtain the version of the tool +topics: + versions: *versions +authors: + - "@dialvarezs" +maintainers: + - "@dialvarezs" diff --git a/modules/nf-core/qsv/cat/tests/main.nf.test b/modules/nf-core/qsv/cat/tests/main.nf.test new file mode 100644 index 000000000..2842ea03c --- /dev/null +++ b/modules/nf-core/qsv/cat/tests/main.nf.test @@ -0,0 +1,156 @@ +nextflow_process { + + name "Test Process QSV_CAT" + script "../main.nf" + process "QSV_CAT" + + tag "modules" + tag "modules_nfcore" + tag "qsv" + tag "qsv/cat" + + test("csv - rows") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + [ + file(params.modules_testdata_base_path + 'generic/csv/test.csv', checkIfExists: true), + file(params.modules_testdata_base_path + 'generic/csv/test.csv', checkIfExists: true), + ] + ] + input[1] = "rows" + input[2] = "csv" + input[3] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out).match() } + ) + } + + } + + test("tsv - rows") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + [ + file(params.modules_testdata_base_path + 'generic/tsv/test.tsv', checkIfExists: true), + file(params.modules_testdata_base_path + 'generic/tsv/test.tsv', checkIfExists: true), + ] + ] + input[1] = "rows" + input[2] = "tsv" + input[3] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out).match() } + ) + } + + } + + test("mixed - rows") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + [ + file(params.modules_testdata_base_path + 'generic/tsv/test.tsv', checkIfExists: true), + file(params.modules_testdata_base_path + 'generic/csv/test.csv', checkIfExists: true), + ] + ] + input[1] = "rows" + input[2] = "tsv" + input[3] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out).match() } + ) + } + + } + + // Tests concatenation of CSV files with different headers + test("csv - rowskey") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], + [ + file(params.modules_testdata_base_path + 'generic/csv/test.csv', checkIfExists: true), + file(params.modules_testdata_base_path + 'generic/csv/test2.csv', checkIfExists: true), + file(params.modules_testdata_base_path + 'generic/csv/test3.csv', checkIfExists: true), + ] + ] + input[1] = "rowskey" + input[2] = "csv" + input[3] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out).match() } + ) + } + + } + + test("csv - rows - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], + [ + file(params.modules_testdata_base_path + 'generic/csv/test.csv', checkIfExists: true), + file(params.modules_testdata_base_path + 'generic/csv/test.csv', checkIfExists: true), + ] + ] + input[1] = "rows" + input[2] = "csv" + input[3] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/qsv/cat/tests/main.nf.test.snap b/modules/nf-core/qsv/cat/tests/main.nf.test.snap new file mode 100644 index 000000000..480018d1e --- /dev/null +++ b/modules/nf-core/qsv/cat/tests/main.nf.test.snap @@ -0,0 +1,207 @@ +{ + "csv - rowskey": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.csv:md5,bb75a3ae2b1e79519970292829351981" + ] + ], + "1": [ + [ + "QSV_CAT", + "qsv", + "5.1.0" + ] + ], + "csv": [ + [ + { + "id": "test" + }, + "test.csv:md5,bb75a3ae2b1e79519970292829351981" + ] + ], + "versions_qsv": [ + [ + "QSV_CAT", + "qsv", + "5.1.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2025-11-26T02:28:59.50810191" + }, + "csv - rows - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + "QSV_CAT", + "qsv", + "5.1.0" + ] + ], + "csv": [ + [ + { + "id": "test" + }, + "test.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_qsv": [ + [ + "QSV_CAT", + "qsv", + "5.1.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2025-11-25T19:00:56.129258083" + }, + "tsv - rows": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tsv:md5,86a638410f8342ba47689d2d79dc8196" + ] + ], + "1": [ + [ + "QSV_CAT", + "qsv", + "5.1.0" + ] + ], + "csv": [ + [ + { + "id": "test" + }, + "test.tsv:md5,86a638410f8342ba47689d2d79dc8196" + ] + ], + "versions_qsv": [ + [ + "QSV_CAT", + "qsv", + "5.1.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2025-11-25T18:59:07.728469804" + }, + "mixed - rows": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tsv:md5,0699f477b16150165b3cf249fc2257c9" + ] + ], + "1": [ + [ + "QSV_CAT", + "qsv", + "5.1.0" + ] + ], + "csv": [ + [ + { + "id": "test" + }, + "test.tsv:md5,0699f477b16150165b3cf249fc2257c9" + ] + ], + "versions_qsv": [ + [ + "QSV_CAT", + "qsv", + "5.1.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2025-11-26T02:32:06.053744117" + }, + "csv - rows": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.csv:md5,bf9c8a2c832063797ee50c19adbe6f15" + ] + ], + "1": [ + [ + "QSV_CAT", + "qsv", + "5.1.0" + ] + ], + "csv": [ + [ + { + "id": "test" + }, + "test.csv:md5,bf9c8a2c832063797ee50c19adbe6f15" + ] + ], + "versions_qsv": [ + [ + "QSV_CAT", + "qsv", + "5.1.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2025-11-25T18:59:04.02262118" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml index 62054fc97..89e12a645 100644 --- a/modules/nf-core/samtools/faidx/environment.yml +++ b/modules/nf-core/samtools/faidx/environment.yml @@ -4,5 +4,7 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::htslib=1.21 - - bioconda::samtools=1.21 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.22.1 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.22.1 diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index 6de0095d8..ed2d70a67 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_FAIDX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : - 'biocontainers/samtools:1.21--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' : + 'biocontainers/samtools:1.22.1--h96c455f_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test b/modules/nf-core/samtools/faidx/tests/main.nf.test index 64219b7d9..a505abc12 100644 --- a/modules/nf-core/samtools/faidx/tests/main.nf.test +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test @@ -216,4 +216,4 @@ nextflow_process { } } -} \ No newline at end of file +} diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap index 737224148..3be7b824b 100644 --- a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap @@ -21,7 +21,7 @@ ], "4": [ - "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + "versions.yml:md5,001211003daf11e8dd2f1aca7a378a68" ], "fa": [ @@ -42,15 +42,15 @@ ], "versions": [ - "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + "versions.yml:md5,001211003daf11e8dd2f1aca7a378a68" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.1" + "nextflow": "25.04.6" }, - "timestamp": "2024-11-20T17:31:48.258623157" + "timestamp": "2025-09-10T13:09:38.874686" }, "test_samtools_faidx_get_sizes_bgzip - stub": { "content": [ @@ -83,7 +83,7 @@ ] ], "4": [ - "versions.yml:md5,e3e4ba35a02020d173be8d1ee04eaebf" + "versions.yml:md5,8e7d141eb8c2944042dfb5e942bffe08" ], "fa": [ @@ -113,15 +113,15 @@ ] ], "versions": [ - "versions.yml:md5,e3e4ba35a02020d173be8d1ee04eaebf" + "versions.yml:md5,8e7d141eb8c2944042dfb5e942bffe08" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.1" + "nextflow": "25.04.6" }, - "timestamp": "2024-11-20T17:32:41.122428188" + "timestamp": "2025-09-10T13:10:10.958397" }, "test_samtools_faidx_get_sizes": { "content": [ @@ -149,7 +149,7 @@ ], "4": [ - "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + "versions.yml:md5,001211003daf11e8dd2f1aca7a378a68" ], "fa": [ @@ -174,15 +174,15 @@ ] ], "versions": [ - "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + "versions.yml:md5,001211003daf11e8dd2f1aca7a378a68" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.1" + "nextflow": "25.04.6" }, - "timestamp": "2024-11-20T17:34:02.353546697" + "timestamp": "2025-09-10T13:09:59.237249" }, "test_samtools_faidx_bgzip": { "content": [ @@ -212,7 +212,7 @@ ] ], "4": [ - "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + "versions.yml:md5,001211003daf11e8dd2f1aca7a378a68" ], "fa": [ @@ -239,15 +239,15 @@ ], "versions": [ - "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + "versions.yml:md5,001211003daf11e8dd2f1aca7a378a68" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.1" + "nextflow": "25.04.6" }, - "timestamp": "2024-11-20T17:31:55.157487176" + "timestamp": "2025-09-10T13:09:42.949204" }, "test_samtools_faidx_fasta": { "content": [ @@ -271,7 +271,7 @@ ], "4": [ - "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + "versions.yml:md5,001211003daf11e8dd2f1aca7a378a68" ], "fa": [ [ @@ -292,15 +292,15 @@ ], "versions": [ - "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + "versions.yml:md5,001211003daf11e8dd2f1aca7a378a68" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.1" + "nextflow": "25.04.6" }, - "timestamp": "2024-11-20T17:32:02.149455586" + "timestamp": "2025-09-10T13:09:46.914038" }, "test_samtools_faidx_get_sizes - stub": { "content": [ @@ -328,7 +328,7 @@ ], "4": [ - "versions.yml:md5,e3e4ba35a02020d173be8d1ee04eaebf" + "versions.yml:md5,8e7d141eb8c2944042dfb5e942bffe08" ], "fa": [ @@ -353,15 +353,15 @@ ] ], "versions": [ - "versions.yml:md5,e3e4ba35a02020d173be8d1ee04eaebf" + "versions.yml:md5,8e7d141eb8c2944042dfb5e942bffe08" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.1" + "nextflow": "25.04.6" }, - "timestamp": "2024-11-20T17:32:34.29376776" + "timestamp": "2025-09-10T13:10:06.961912" }, "test_samtools_faidx_stub_fasta": { "content": [ @@ -385,7 +385,7 @@ ], "4": [ - "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + "versions.yml:md5,001211003daf11e8dd2f1aca7a378a68" ], "fa": [ [ @@ -406,15 +406,15 @@ ], "versions": [ - "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + "versions.yml:md5,001211003daf11e8dd2f1aca7a378a68" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.1" + "nextflow": "25.04.6" }, - "timestamp": "2024-11-20T17:32:09.125065185" + "timestamp": "2025-09-10T13:09:51.226016" }, "test_samtools_faidx_stub_fai": { "content": [ @@ -438,7 +438,7 @@ ], "4": [ - "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + "versions.yml:md5,001211003daf11e8dd2f1aca7a378a68" ], "fa": [ @@ -459,15 +459,15 @@ ], "versions": [ - "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + "versions.yml:md5,001211003daf11e8dd2f1aca7a378a68" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.1" + "nextflow": "25.04.6" }, - "timestamp": "2024-11-20T17:32:16.274287863" + "timestamp": "2025-09-10T13:09:55.423005" }, "test_samtools_faidx_get_sizes_bgzip": { "content": [ @@ -500,7 +500,7 @@ ] ], "4": [ - "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + "versions.yml:md5,001211003daf11e8dd2f1aca7a378a68" ], "fa": [ @@ -530,14 +530,14 @@ ] ], "versions": [ - "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" + "versions.yml:md5,001211003daf11e8dd2f1aca7a378a68" ] } ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.1" + "nextflow": "25.04.6" }, - "timestamp": "2024-11-20T17:32:28.117654855" + "timestamp": "2025-09-10T13:10:03.04872" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml index 62054fc97..89e12a645 100644 --- a/modules/nf-core/samtools/index/environment.yml +++ b/modules/nf-core/samtools/index/environment.yml @@ -4,5 +4,7 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::htslib=1.21 - - bioconda::samtools=1.21 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.22.1 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.22.1 diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index 7019a72e4..a77ad8214 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_INDEX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : - 'biocontainers/samtools:1.21--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' : + 'biocontainers/samtools:1.22.1--h96c455f_0' }" input: tuple val(meta), path(input) diff --git a/modules/nf-core/samtools/index/tests/main.nf.test.snap b/modules/nf-core/samtools/index/tests/main.nf.test.snap index 72d65e81a..3836c6bfe 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/index/tests/main.nf.test.snap @@ -18,7 +18,7 @@ ], "3": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" ], "bai": [ @@ -36,15 +36,15 @@ ] ], "versions": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-09-16T08:21:25.261127166" + "timestamp": "2025-09-10T14:13:38.25787" }, "crai - stub": { "content": [ @@ -65,7 +65,7 @@ ] ], "3": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" ], "bai": [ @@ -83,15 +83,15 @@ ], "versions": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-09-16T08:21:12.653194876" + "timestamp": "2025-09-10T14:13:34.496412" }, "bai - stub": { "content": [ @@ -112,7 +112,7 @@ ], "3": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" ], "bai": [ [ @@ -130,28 +130,28 @@ ], "versions": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-09-16T08:21:01.854932651" + "timestamp": "2025-09-10T14:13:25.934431" }, "csi": { "content": [ "test.paired_end.sorted.bam.csi", [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-09-16T08:20:51.485364222" + "timestamp": "2025-09-10T14:13:22.262088" }, "crai": { "content": [ @@ -172,7 +172,7 @@ ] ], "3": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" ], "bai": [ @@ -190,15 +190,15 @@ ], "versions": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-09-16T08:20:40.518873972" + "timestamp": "2025-09-10T14:13:18.191664" }, "bai": { "content": [ @@ -219,7 +219,7 @@ ], "3": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" ], "bai": [ [ @@ -237,14 +237,14 @@ ], "versions": [ - "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + "versions.yml:md5,b8717818c91b07de87c2a5590bad02e6" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-09-16T08:20:21.184050361" + "timestamp": "2025-09-10T14:13:08.51539" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/stats/environment.yml b/modules/nf-core/samtools/stats/environment.yml index 62054fc97..89e12a645 100644 --- a/modules/nf-core/samtools/stats/environment.yml +++ b/modules/nf-core/samtools/stats/environment.yml @@ -4,5 +4,7 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::htslib=1.21 - - bioconda::samtools=1.21 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.22.1 + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.22.1 diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf index 4443948b7..c06ad3bf6 100644 --- a/modules/nf-core/samtools/stats/main.nf +++ b/modules/nf-core/samtools/stats/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_STATS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : - 'biocontainers/samtools:1.21--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' : + 'biocontainers/samtools:1.22.1--h96c455f_0' }" input: tuple val(meta), path(input), path(input_index) diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test.snap b/modules/nf-core/samtools/stats/tests/main.nf.test.snap index df507be7a..a451c04e6 100644 --- a/modules/nf-core/samtools/stats/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/stats/tests/main.nf.test.snap @@ -8,11 +8,11 @@ "id": "test", "single_end": false }, - "test.stats:md5,a27fe55e49a341f92379bb20a65c6a06" + "test.stats:md5,f4aec6c41b73d34ac2fc6b3253aa39ba" ] ], "1": [ - "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + "versions.yml:md5,7668882f411d0f6356f14a1b8b56fa3c" ], "stats": [ [ @@ -20,19 +20,19 @@ "id": "test", "single_end": false }, - "test.stats:md5,a27fe55e49a341f92379bb20a65c6a06" + "test.stats:md5,f4aec6c41b73d34ac2fc6b3253aa39ba" ] ], "versions": [ - "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + "versions.yml:md5,7668882f411d0f6356f14a1b8b56fa3c" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-09-16T09:29:16.767396182" + "timestamp": "2025-09-10T15:05:52.878044" }, "bam - stub": { "content": [ @@ -47,7 +47,7 @@ ] ], "1": [ - "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + "versions.yml:md5,7668882f411d0f6356f14a1b8b56fa3c" ], "stats": [ [ @@ -59,15 +59,15 @@ ] ], "versions": [ - "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + "versions.yml:md5,7668882f411d0f6356f14a1b8b56fa3c" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-09-16T09:29:29.721580274" + "timestamp": "2025-09-10T15:05:56.722672" }, "cram - stub": { "content": [ @@ -82,7 +82,7 @@ ] ], "1": [ - "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + "versions.yml:md5,7668882f411d0f6356f14a1b8b56fa3c" ], "stats": [ [ @@ -94,15 +94,15 @@ ] ], "versions": [ - "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + "versions.yml:md5,7668882f411d0f6356f14a1b8b56fa3c" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-09-16T09:29:53.567964304" + "timestamp": "2025-09-10T15:06:13.766719" }, "bam": { "content": [ @@ -113,11 +113,11 @@ "id": "test", "single_end": false }, - "test.stats:md5,d53a2584376d78942839e9933a34d11b" + "test.stats:md5,41ba8ad30ddb598dadb177a54c222ab9" ] ], "1": [ - "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + "versions.yml:md5,7668882f411d0f6356f14a1b8b56fa3c" ], "stats": [ [ @@ -125,18 +125,18 @@ "id": "test", "single_end": false }, - "test.stats:md5,d53a2584376d78942839e9933a34d11b" + "test.stats:md5,41ba8ad30ddb598dadb177a54c222ab9" ] ], "versions": [ - "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + "versions.yml:md5,7668882f411d0f6356f14a1b8b56fa3c" ] } ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "25.04.6" }, - "timestamp": "2024-09-16T09:28:50.73610604" + "timestamp": "2025-09-10T15:05:30.301153" } } \ No newline at end of file diff --git a/modules/nf-core/semibin/singleeasybin/environment.yml b/modules/nf-core/semibin/singleeasybin/environment.yml new file mode 100644 index 000000000..ae3654fbb --- /dev/null +++ b/modules/nf-core/semibin/singleeasybin/environment.yml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - bioconda::semibin=2.2.0 + # This pins solves an issue of SemiBin getting stuck. + # See https://github.com/BigDataBiology/SemiBin/issues/208 + - conda-forge::igraph=0.10.17 diff --git a/modules/nf-core/semibin/singleeasybin/main.nf b/modules/nf-core/semibin/singleeasybin/main.nf new file mode 100644 index 000000000..22b5fae6c --- /dev/null +++ b/modules/nf-core/semibin/singleeasybin/main.nf @@ -0,0 +1,65 @@ +process SEMIBIN_SINGLEEASYBIN { + tag "$meta.id" + label 'process_medium' + + 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/0d/0d205dadfeb5d37829b4fbde39319b07e2971884670ff7e84df4cc4d809ff8a5/data': + 'community.wave.seqera.io/library/semibin_igraph:fcb667d6c87bf3fd' }" + + input: + tuple val(meta), path(fasta), path(bam) + + output: + tuple val(meta), path("${prefix}/*.csv") , emit: csv + tuple val(meta), path("${prefix}/*.h5") , emit: model, optional: true + tuple val(meta), path("${prefix}/*.tsv") , emit: tsv + tuple val(meta), path("*.log") , emit: log + tuple val(meta), path("bins/${prefix}*.fa.gz") , emit: output_fasta, optional: true + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: "" + prefix = task.ext.prefix ?: "${meta.id}" + """ + + SemiBin2 \\ + $args \\ + single_easy_bin \\ + --input-fasta ${fasta} \\ + --input-bam ${bam} \\ + --tag-output ${prefix} \\ + --output ${prefix} \\ + -t $task.cpus \\ + $args2 + + # move final bins to "bins" folder + mv ./${prefix}/output_bins/ bins/ + # rename log with prefix + mv ./${prefix}/SemiBinRun.log ${prefix}.SemiBinRun.log + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + SemiBin: \$( SemiBin2 --version ) + END_VERSIONS + """ + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir ${prefix} + touch ${prefix}/{contig_bins,recluster_bins_info}.tsv + touch ${prefix}/{data,data_split}.csv + mkdir bins + touch bins/${prefix}_SemiBin_{0,1,2,3}.fa + gzip bins/${prefix}_SemiBin* + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + SemiBin: \$( SemiBin2 --version ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/semibin/singleeasybin/meta.yml b/modules/nf-core/semibin/singleeasybin/meta.yml new file mode 100644 index 000000000..0e1f56a47 --- /dev/null +++ b/modules/nf-core/semibin/singleeasybin/meta.yml @@ -0,0 +1,89 @@ +name: semibin_singleeasybin +description: metagenomic binning with self-supervised learning +keywords: + - binning + - assembly-binning + - metagenomics +tools: + - "semibin": + description: "Metagenomic binning with semi-supervised siamese neural network" + homepage: "https://github.com/BigDataBiology/SemiBin" + documentation: "https://semibin.readthedocs.io/en/latest/" + tool_dev_url: "https://github.com/BigDataBiology/SemiBin" + doi: "10.1038/s41467-022-29843-y" + licence: ["MIT"] + identifier: biotools:semibin +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - fasta: + type: file + description: Fasta file of the assembled contigs + pattern: "*.{fa,fasta,fna,fa.gz,fasta.gz,fna.gz}" + ontologies: [] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram}" + ontologies: [] +output: + csv: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - ${prefix}/*.csv: + type: file + description: generated files + pattern: "*.csv" + ontologies: + - edam: http://edamontology.org/format_3752 # CSV + model: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - ${prefix}/*.h5: + type: file + description: model file + pattern: "*.h5" + ontologies: [] + tsv: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - ${prefix}/*.tsv: + type: file + description: information of bins + pattern: "*.tsv" + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + output_fasta: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - ${prefix}/output_bins/*.fa.gz: + type: file + description: precluster fasta files + pattern: "*.fa" + ontologies: [] + versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML +authors: + - "@BigDataBiology" +maintainers: + - "@BigDataBiology" diff --git a/modules/nf-core/semibin/singleeasybin/semibin-singleeasybin.diff b/modules/nf-core/semibin/singleeasybin/semibin-singleeasybin.diff new file mode 100644 index 000000000..7d91430d6 --- /dev/null +++ b/modules/nf-core/semibin/singleeasybin/semibin-singleeasybin.diff @@ -0,0 +1,50 @@ +Changes in component 'nf-core/semibin/singleeasybin' +'modules/nf-core/semibin/singleeasybin/meta.yml' is unchanged +'modules/nf-core/semibin/singleeasybin/environment.yml' is unchanged +Changes in 'semibin/singleeasybin/main.nf': +--- modules/nf-core/semibin/singleeasybin/main.nf ++++ modules/nf-core/semibin/singleeasybin/main.nf +@@ -14,7 +14,8 @@ + tuple val(meta), path("${prefix}/*.csv") , emit: csv + tuple val(meta), path("${prefix}/*.h5") , emit: model, optional: true + tuple val(meta), path("${prefix}/*.tsv") , emit: tsv +- tuple val(meta), path("${prefix}/output_bins/*.fa.gz"), emit: output_fasta ++ tuple val(meta), path("*.log") , emit: log ++ tuple val(meta), path("bins/${prefix}*.fa.gz") , emit: output_fasta, optional: true + path "versions.yml", emit: versions + + when: +@@ -31,9 +32,15 @@ + single_easy_bin \\ + --input-fasta ${fasta} \\ + --input-bam ${bam} \\ ++ --tag-output ${prefix} \\ + --output ${prefix} \\ + -t $task.cpus \\ + $args2 ++ ++ # move final bins to "bins" folder ++ mv ./${prefix}/output_bins/ bins/ ++ # rename log with prefix ++ mv ./${prefix}/SemiBinRun.log ${prefix}.SemiBinRun.log + + cat <<-END_VERSIONS > versions.yml + "${task.process}": +@@ -46,9 +53,9 @@ + mkdir ${prefix} + touch ${prefix}/{contig_bins,recluster_bins_info}.tsv + touch ${prefix}/{data,data_split}.csv +- mkdir ${prefix}/output_bins +- touch ${prefix}/output_bins/SemiBin_{0,1,2,3}.fa +- gzip ${prefix}/output_bins/SemiBin* ++ mkdir bins ++ touch bins/${prefix}_SemiBin_{0,1,2,3}.fa ++ gzip bins/${prefix}_SemiBin* + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + +'modules/nf-core/semibin/singleeasybin/tests/nextflow.config' is unchanged +'modules/nf-core/semibin/singleeasybin/tests/main.nf.test' is unchanged +'modules/nf-core/semibin/singleeasybin/tests/main.nf.test.snap' is unchanged +************************************************************ diff --git a/modules/nf-core/semibin/singleeasybin/tests/main.nf.test b/modules/nf-core/semibin/singleeasybin/tests/main.nf.test new file mode 100644 index 000000000..142e13fa5 --- /dev/null +++ b/modules/nf-core/semibin/singleeasybin/tests/main.nf.test @@ -0,0 +1,70 @@ +nextflow_process { + + name "Test Process SEMIBIN_SINGLEEASYBIN" + + script "../main.nf" + process "SEMIBIN_SINGLEEASYBIN" + + tag "modules" + tag "modules_nfcore" + tag "semibin" + tag "semibin/singleeasybin" + config './nextflow.config' + + test("bacteroides_fragilis") { + + when { + params { + module_args = '' + module_args2 = '--ml-threshold 0 --minfasta-kbs 0 --min-len 0 --environment global' + } + process { + """ + input[0] = [ + [id:'test'], + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/illumina/fasta/test1.contigs.fa.gz', checkIfExists:true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/illumina/bam/test1_contigs.sorted.bam', checkIfExists:true) + ] + """ + } + } + then { + assert process.success + assertAll( + { assert snapshot( + process.out, + path(process.out.versions[0]).yaml + ).match() } + ) + } + } + + test("bacteroides_fragilis - stub") { + options '-stub' + when { + params { + module_args = '' + module_args2 = '--ml-threshold 0 --minfasta-kbs 0 --min-len 0 --environment global' + } + process { + """ + input[0] = [ + [id:'test'], + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/illumina/fasta/test1.contigs.fa.gz', checkIfExists:true), + file(params.modules_testdata_base_path + 'genomics/prokaryotes/bacteroides_fragilis/illumina/bam/test1_contigs.sorted.bam', checkIfExists:true) + ] + """ + } + } + then { + assert process.success + assertAll( + { assert snapshot( + process.out, + path(process.out.versions[0]).yaml + ).match() } + ) + } + } + +} diff --git a/modules/nf-core/semibin/singleeasybin/tests/main.nf.test.snap b/modules/nf-core/semibin/singleeasybin/tests/main.nf.test.snap new file mode 100644 index 000000000..affadd0ef --- /dev/null +++ b/modules/nf-core/semibin/singleeasybin/tests/main.nf.test.snap @@ -0,0 +1,248 @@ +{ + "bacteroides_fragilis": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + [ + "data.csv:md5,eff24dad52ab76b8a030335c938a64f6", + "data_split.csv:md5,6f05c805f4e696315d104de6cc0c8f23", + "test1_contigs.sorted.bam_0_data_cov.csv:md5,fd0978a81966ee7c817dfeff79d082ae" + ] + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + [ + "contig_bins.tsv:md5,916794264bed0eefb53ec751c19862f0", + "recluster_bins_info.tsv:md5,271b128eac7a71a1fc95efddf07e1e3d" + ] + ] + ], + "3": [ + [ + { + "id": "test" + }, + [ + "SemiBin_0.fa.gz:md5,87086957c6c48e2c7c8487e8f46153d3", + "SemiBin_1.fa.gz:md5,fbeaa0f639121a85115bc3c901be3cfe", + "SemiBin_10.fa.gz:md5,26d8fb83db377abef7d62d291d6dedc4", + "SemiBin_11.fa.gz:md5,caaec1412eabe5bc7099f7fe883e7998", + "SemiBin_12.fa.gz:md5,55b5482682aec7baa33c0646569f82b1", + "SemiBin_13.fa.gz:md5,846f8abe86d0c61f4a081f000f210608", + "SemiBin_14.fa.gz:md5,d37c5fa58bd3cffe82e5f3300fb26c27", + "SemiBin_15.fa.gz:md5,01989981cb1babaced4e6fd7cb2eb865", + "SemiBin_16.fa.gz:md5,e71afaed93b6ebb242ca52b9e19fcd70", + "SemiBin_17.fa.gz:md5,4a4057a5a4f44eb05153bfa5f26a360d", + "SemiBin_18.fa.gz:md5,860cbaad1593e63d7f5650770048be66", + "SemiBin_19.fa.gz:md5,92856be26acf7185e2c99fe461a7b5e4", + "SemiBin_2.fa.gz:md5,f6bc31606e2000ac30e637089f922bcd", + "SemiBin_20.fa.gz:md5,8c56b7b493a22f55b96c73a7ad62a617", + "SemiBin_21.fa.gz:md5,36b479ebec9e88e7ace3ae6cad4f4e7c", + "SemiBin_22.fa.gz:md5,c98a8752771d62d966a88fec80edc4c2", + "SemiBin_23.fa.gz:md5,c9ab00537eee994d2ad326998ddd559d", + "SemiBin_24.fa.gz:md5,039495af6b66f05d415e7de7fe0a20fb", + "SemiBin_25.fa.gz:md5,9a204ce83ea1fa70934cd0dc78953a02", + "SemiBin_26.fa.gz:md5,63750434b3295487ea7c3f747347ea18", + "SemiBin_27.fa.gz:md5,00e61d0c6a894debb626d97a7a468163", + "SemiBin_3.fa.gz:md5,4730f1e32e5323283fe885884f10699e", + "SemiBin_4.fa.gz:md5,d94e4065dfb334eb34f04f4f06af648e", + "SemiBin_5.fa.gz:md5,27ad83d85184527847a2cc13b1c990b0", + "SemiBin_6.fa.gz:md5,1741f7cac38fb8c5b03600ec2fe027c0", + "SemiBin_7.fa.gz:md5,406697b0e472cf577b6b265466ab73af", + "SemiBin_8.fa.gz:md5,b9ce47f44ef95492c7cb1a578ad48b7d", + "SemiBin_9.fa.gz:md5,f1c9b082977bf100918591b489fd03e2" + ] + ] + ], + "4": [ + "versions.yml:md5,cbc3652f97526cada170758d03959d6f" + ], + "csv": [ + [ + { + "id": "test" + }, + [ + "data.csv:md5,eff24dad52ab76b8a030335c938a64f6", + "data_split.csv:md5,6f05c805f4e696315d104de6cc0c8f23", + "test1_contigs.sorted.bam_0_data_cov.csv:md5,fd0978a81966ee7c817dfeff79d082ae" + ] + ] + ], + "model": [ + + ], + "output_fasta": [ + [ + { + "id": "test" + }, + [ + "SemiBin_0.fa.gz:md5,87086957c6c48e2c7c8487e8f46153d3", + "SemiBin_1.fa.gz:md5,fbeaa0f639121a85115bc3c901be3cfe", + "SemiBin_10.fa.gz:md5,26d8fb83db377abef7d62d291d6dedc4", + "SemiBin_11.fa.gz:md5,caaec1412eabe5bc7099f7fe883e7998", + "SemiBin_12.fa.gz:md5,55b5482682aec7baa33c0646569f82b1", + "SemiBin_13.fa.gz:md5,846f8abe86d0c61f4a081f000f210608", + "SemiBin_14.fa.gz:md5,d37c5fa58bd3cffe82e5f3300fb26c27", + "SemiBin_15.fa.gz:md5,01989981cb1babaced4e6fd7cb2eb865", + "SemiBin_16.fa.gz:md5,e71afaed93b6ebb242ca52b9e19fcd70", + "SemiBin_17.fa.gz:md5,4a4057a5a4f44eb05153bfa5f26a360d", + "SemiBin_18.fa.gz:md5,860cbaad1593e63d7f5650770048be66", + "SemiBin_19.fa.gz:md5,92856be26acf7185e2c99fe461a7b5e4", + "SemiBin_2.fa.gz:md5,f6bc31606e2000ac30e637089f922bcd", + "SemiBin_20.fa.gz:md5,8c56b7b493a22f55b96c73a7ad62a617", + "SemiBin_21.fa.gz:md5,36b479ebec9e88e7ace3ae6cad4f4e7c", + "SemiBin_22.fa.gz:md5,c98a8752771d62d966a88fec80edc4c2", + "SemiBin_23.fa.gz:md5,c9ab00537eee994d2ad326998ddd559d", + "SemiBin_24.fa.gz:md5,039495af6b66f05d415e7de7fe0a20fb", + "SemiBin_25.fa.gz:md5,9a204ce83ea1fa70934cd0dc78953a02", + "SemiBin_26.fa.gz:md5,63750434b3295487ea7c3f747347ea18", + "SemiBin_27.fa.gz:md5,00e61d0c6a894debb626d97a7a468163", + "SemiBin_3.fa.gz:md5,4730f1e32e5323283fe885884f10699e", + "SemiBin_4.fa.gz:md5,d94e4065dfb334eb34f04f4f06af648e", + "SemiBin_5.fa.gz:md5,27ad83d85184527847a2cc13b1c990b0", + "SemiBin_6.fa.gz:md5,1741f7cac38fb8c5b03600ec2fe027c0", + "SemiBin_7.fa.gz:md5,406697b0e472cf577b6b265466ab73af", + "SemiBin_8.fa.gz:md5,b9ce47f44ef95492c7cb1a578ad48b7d", + "SemiBin_9.fa.gz:md5,f1c9b082977bf100918591b489fd03e2" + ] + ] + ], + "tsv": [ + [ + { + "id": "test" + }, + [ + "contig_bins.tsv:md5,916794264bed0eefb53ec751c19862f0", + "recluster_bins_info.tsv:md5,271b128eac7a71a1fc95efddf07e1e3d" + ] + ] + ], + "versions": [ + "versions.yml:md5,cbc3652f97526cada170758d03959d6f" + ] + }, + { + "SEMIBIN_SINGLEEASYBIN": { + "SemiBin": "2.2.0" + } + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-02T13:19:13.461592294" + }, + "bacteroides_fragilis - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + [ + "data.csv:md5,d41d8cd98f00b204e9800998ecf8427e", + "data_split.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + [ + "contig_bins.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "recluster_bins_info.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "3": [ + [ + { + "id": "test" + }, + [ + "SemiBin_0.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "SemiBin_1.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "SemiBin_2.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "SemiBin_3.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "4": [ + "versions.yml:md5,cbc3652f97526cada170758d03959d6f" + ], + "csv": [ + [ + { + "id": "test" + }, + [ + "data.csv:md5,d41d8cd98f00b204e9800998ecf8427e", + "data_split.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "model": [ + + ], + "output_fasta": [ + [ + { + "id": "test" + }, + [ + "SemiBin_0.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "SemiBin_1.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "SemiBin_2.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "SemiBin_3.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "tsv": [ + [ + { + "id": "test" + }, + [ + "contig_bins.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "recluster_bins_info.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,cbc3652f97526cada170758d03959d6f" + ] + }, + { + "SEMIBIN_SINGLEEASYBIN": { + "SemiBin": "2.2.0" + } + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.6" + }, + "timestamp": "2025-05-09T08:28:29.291321203" + } +} \ No newline at end of file diff --git a/modules/nf-core/semibin/singleeasybin/tests/nextflow.config b/modules/nf-core/semibin/singleeasybin/tests/nextflow.config new file mode 100644 index 000000000..75c983c8d --- /dev/null +++ b/modules/nf-core/semibin/singleeasybin/tests/nextflow.config @@ -0,0 +1,7 @@ +process { + withName: 'SEMIBIN_SINGLEEASYBIN' { + ext.args = params.module_args + ext.args2 = params.module_args2 + } + +} diff --git a/modules/nf-core/trimmomatic/tests/main.nf.test b/modules/nf-core/trimmomatic/tests/main.nf.test index e3598c52c..fee08848c 100644 --- a/modules/nf-core/trimmomatic/tests/main.nf.test +++ b/modules/nf-core/trimmomatic/tests/main.nf.test @@ -115,4 +115,4 @@ nextflow_process { } } -} \ No newline at end of file +} diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml index 1b6bf491e..1603e3829 100644 --- a/modules/nf-core/untar/meta.yml +++ b/modules/nf-core/untar/meta.yml @@ -1,5 +1,5 @@ name: untar -description: Extract files. +description: Extract files from tar, tar.gz, tar.bz2, tar.xz archives keywords: - untar - uncompress @@ -7,7 +7,7 @@ keywords: tools: - untar: description: | - Extract tar.gz files. + Extract tar, tar.gz, tar.bz2, tar.xz files. documentation: https://www.gnu.org/software/tar/manual/ licence: ["GPL-3.0-or-later"] identifier: "" @@ -19,8 +19,8 @@ input: e.g. [ id:'test', single_end:false ] - archive: type: file - description: File to be untar - pattern: "*.{tar}.{gz}" + description: File to be untarred + pattern: "*.{tar,tar.gz,tar.bz2,tar.xz}" ontologies: - edam: http://edamontology.org/format_3981 # TAR format - edam: http://edamontology.org/format_3989 # GZIP format diff --git a/nextflow.config b/nextflow.config index 1d5c0ae15..ce1ca1232 100644 --- a/nextflow.config +++ b/nextflow.config @@ -131,6 +131,9 @@ params { bin_metabinner_scale = "large" skip_concoct = false skip_comebin = false + skip_semibin = false + semibin_rng_seed = 1 + semibin_environment = "global" bin_concoct_chunksize = 10000 bin_concoct_overlap = 0 bin_concoct_donotconcatlast = false @@ -164,6 +167,7 @@ params { gunc_database_type = 'progenomes' gunc_db = null gunc_save_db = false + generate_bigmag_file = false // Reproducibility options megahit_fix_cpu_1 = false @@ -511,7 +515,7 @@ manifest { mainScript = 'main.nf' defaultBranch = 'main' nextflowVersion = '!>=25.04.2' - version = '5.2.0' + version = '5.3.0' doi = '10.1093/nargab/lqac007' } diff --git a/nextflow_schema.json b/nextflow_schema.json index c14cf3743..57eea32be 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -788,6 +788,36 @@ "description": "Dataset scale for MetaBinner", "help_text": "Dataset scale; eg. small,large,huge (default:large); Users can choose `huge` to run MetaBinner on huge datasets with lower memory requirements." }, + "skip_semibin": { + "type": "boolean", + "description": "Skip SemiBin2 Binning" + }, + "semibin_rng_seed": { + "type": "integer", + "default": 1, + "description": "RNG seed for SemiBin2.", + "help_text": "SemiBin2 is run by default with a fixed seed within this pipeline, thus producing reproducible results. You can set it also to any other positive integer to ensure reproducibility. Set the parameter to 0 to use a random seed." + }, + "semibin_environment": { + "type": "string", + "default": "global", + "enum": [ + "human_gut", + "dog_gut", + "ocean", + "soil", + "cat_gut", + "human_oral", + "mouse_gut", + "pig_gut", + "built_environment", + "wastewater", + "chicken_caecum", + "global" + ], + "description": "Pre-trained model for SemiBin2 for single sample assemblies", + "help_text": "SemiBin2 can use a pre-trained model when working with an assembly of a single sample (i.e. without `--coassemble_group` and with `--binning_map_mode own`). The model will be ignored when several samples are used for one assembly. Choose a model that fits your environment best. Default is `global`, a generic model." + }, "min_contig_size": { "type": "integer", "default": 1500, @@ -997,6 +1027,11 @@ "type": "boolean", "description": "Save the used GUNC reference files downloaded when not using --gunc_db parameter.", "help_text": "If specified, the corresponding DIAMOND file downloaded from the GUNC server will be stored in your output directory alongside your GUNC results." + }, + "generate_bigmag_file": { + "type": "boolean", + "description": "Make a BIgMAG input file including GUNC results.", + "help_text": "It requires --run_gunc and --run_checkm2 to be executed. BINQC, GTDB-TK, QUAST nor BUSCO can't be skipped." } } }, diff --git a/nf-test.config b/nf-test.config index 338739a88..0bd0919ad 100644 --- a/nf-test.config +++ b/nf-test.config @@ -15,11 +15,12 @@ config { profile "test" // list of filenames or patterns that should be trigger a full test run - triggers 'nextflow.config', 'nf-test.config', 'conf/test.config', 'tests/nextflow.config', 'tests/.nftignore' + triggers 'nextflow.config', 'nf-test.config', 'conf/test.config', 'tests/nextflow.config', 'tests/.nftignore', 'bin/*' // load the necessary plugins plugins { - load "nft-utils@0.0.3" + load "nft-csv@0.1.0" load "nft-fasta@1.0.0" + load "nft-utils@0.0.7" } } diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 89a477d78..257679201 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,8 +22,8 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "Stable", - "datePublished": "2025-11-04T19:04:00+00:00", - "description": "

\n \n \n \"nf-core/mag\"\n \n

\n\n[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new/nf-core/mag)\n[![GitHub Actions CI Status](https://github.com/nf-core/mag/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/mag/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/mag/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/mag/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/mag/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.3589527-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.3589527)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n[![Cite Publication](https://img.shields.io/badge/Cite%20Us!-Cite%20Publication-orange)](https://doi.org/10.1093/nargab/lqac007)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.04.2-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.4.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.4.1)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/mag)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23mag-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/mag)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![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![HiRSE Code Promo Badge](https://img.shields.io/badge/Promo-8db427?label=HiRSE&labelColor=005aa0&link=https%3A%2F%2Fgo.fzj.de%2FCodePromo)\n\n## Introduction\n\n**nf-core/mag** is a bioinformatics best-practise analysis pipeline for assembly, binning and annotation of metagenomes.\n\n

\n \n \n \"nf-core/mag\n \n

\n\n## Pipeline summary\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\nBy default, the pipeline currently performs the following: it supports both short and long reads, quality trims the reads and adapters with [fastp](https://github.com/OpenGene/fastp), [AdapterRemoval](https://github.com/MikkelSchubert/adapterremoval), or [trimmomatic](https://github.com/usadellab/Trimmomatic) and [Porechop](https://github.com/rrwick/Porechop), and performs basic QC with [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/), and merges multiple sequencing runs.\n\nThe pipeline then:\n\n- 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)\n- (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)\n- 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)\n- performs metagenome binning using [MetaBAT2](https://bitbucket.org/berkeleylab/metabat/src/master/), [MaxBin2](https://sourceforge.net/projects/maxbin2/), [CONCOCT](https://github.com/BinPro/CONCOCT), [COMEBin](https://github.com/ziyewang/COMEBin), and/or [MetaBinner](https://github.com/ziyewang/MetaBinner)\n- 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/)\n- Performs ancient DNA validation and repair with [pyDamage](https://github.com/maxibor/pydamage) and [freebayes](https://github.com/freebayes/freebayes)\n- optionally refines bins with [DAS Tool](https://github.com/cmks/DAS_Tool)\n- 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)\n\nFurthermore, the pipeline creates various reports in the results directory specified, including a [MultiQC](https://multiqc.info/) report summarizing some of the findings and software versions.\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```bash\nnextflow run nf-core/mag -profile --input samplesheet.csv --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/mag/usage) and the [parameter documentation](https://nf-co.re/mag/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/mag/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/mag/output).\n\n### Group-wise co-assembly and co-abundance computation\n\nEach sample has an associated group ID (see [input specifications](https://nf-co.re/mag/usage#input_specifications)). This group information can be used for group-wise co-assembly with `MEGAHIT` or `SPAdes` and/or to compute co-abundances for the binning step with `MetaBAT2`. By default, group-wise co-assembly is disabled, while the computation of group-wise co-abundances is enabled. For more information about how this group information can be used see the documentation for the parameters [`--coassemble_group`](https://nf-co.re/mag/parameters#coassemble_group) and [`--binning_map_mode`](https://nf-co.re/mag/parameters#binning_map_mode).\n\nWhen group-wise co-assembly is enabled, `SPAdes` is run on accordingly pooled read files, since `metaSPAdes` does not yet allow the input of multiple samples or libraries. In contrast, `MEGAHIT` is run for each group while supplying lists of the individual readfiles.\n\n## Credits\n\nnf-core/mag was written by [Hadrien Gourl\u00e9](https://hadriengourle.com) at [SLU](https://slu.se), [Daniel Straub](https://github.com/d4straub) and [Sabrina Krakau](https://github.com/skrakau) at the [Quantitative Biology Center (QBiC)](http://qbic.life). [James A. Fellows Yates](https://github.com/jfy133) and [Maxime Borry](https://github.com/maxibor) at the [Max Planck Institute for Evolutionary Anthropology](https://www.eva.mpg.de) joined in version 2.2.0.\n\nOther code contributors include:\n\n- [Antonia Schuster](https://github.com/AntoniaSchuster)\n- [Alexander Ramos](https://github.com/alxndrdiaz)\n- [Carson Miller](https://github.com/CarsonJM)\n- [Daniel Lundin](https://github.com/erikrikarddaniel)\n- [Danielle Callan](https://github.com/d-callan)\n- [Gregory Sprenger](https://github.com/gregorysprenger)\n- [Jim Downie](https://github.com/prototaxites)\n- [Phil Palmer](https://github.com/PhilPalmer)\n- [William Rosenbaum](https://github.com/willros)\n- [Adam Rosenbaum](https://github.com/muabnezor)\n- [Diego Alvarez](https://github.com/dialvarezs)\n- [Nikolaos Vergoulidis](https://github.com/IceGreb)\n- [Greg Fedewa](https://github.com/harper357)\n- [Vini Salazar](https://github.com/vinisalazar)\n- [Alex Caswell](https://github.com/AlexHoratio)\n\nLong read processing was inspired by [caspargross/HybridAssembly](https://github.com/caspargross/HybridAssembly) written by Caspar Gross [@caspargross](https://github.com/caspargross)\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n- [Alexander Peltzer](https://github.com/apeltzer)\n- [Phil Ewels](https://github.com/ewels)\n- [Gisela Gabernet](https://github.com/ggabernet)\n- [Harshil Patel](https://github.com/drpatelh)\n- [Johannes Alneberg](https://github.com/alneberg)\n- [Maxime Garcia](https://github.com/MaxUlysse)\n- [Michael L Heuer](https://github.com/heuermh)\n- [Alex H\u00fcbner](https://github.com/alexhbnr)\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 `#mag` channel](https://nfcore.slack.com/channels/mag) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/mag for your analysis, please cite the preprint as follows:\n\n> **nf-core/mag: a best-practice pipeline for metagenome hybrid assembly and binning**\n>\n> Sabrina Krakau, Daniel Straub, Hadrien Gourl\u00e9, Gisela Gabernet, Sven Nahnsen.\n>\n> NAR Genom Bioinform. 2022 Feb 2;4(1):lqac007. doi: [10.1093/nargab/lqac007](https://doi.org/10.1093/nargab/lqac007).\n\nAdditionally you can cite the pipeline directly with the following doi: [10.5281/zenodo.3589527](https://doi.org/10.5281/zenodo.3589527)\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-12-01T12:18:37+00:00", + "description": "

\n \n \n \"nf-core/mag\"\n \n

\n\n[![Open in GitHub Codespaces](https://img.shields.io/badge/Open_In_GitHub_Codespaces-black?labelColor=grey&logo=github)](https://github.com/codespaces/new/nf-core/mag)\n[![GitHub Actions CI Status](https://github.com/nf-core/mag/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/mag/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/mag/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/mag/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/mag/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.3589527-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.3589527)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n[![Cite Publication](https://img.shields.io/badge/Cite%20Us!-Cite%20Publication-orange)](https://doi.org/10.1093/nargab/lqac007)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.04.2-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.5.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.5.1)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n\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/mag)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23mag-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/mag)[![Follow on Bluesky](https://img.shields.io/badge/bluesky-%40nf__core-1185fe?labelColor=000000&logo=bluesky)](https://bsky.app/profile/nf-co.re)[![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![HiRSE Code Promo Badge](https://img.shields.io/badge/Promo-8db427?label=HiRSE&labelColor=005aa0&link=https%3A%2F%2Fgo.fzj.de%2FCodePromo)\n\n[![Static Badge](https://img.shields.io/badge/%F0%9F%8D%94%20%20BIgMAG-compatible-%2324B064)](https://github.com/jeffe107/BIgMAG)\n\n## Introduction\n\n**nf-core/mag** is a bioinformatics best-practise analysis pipeline for assembly, binning and annotation of metagenomes.\n\n

\n \n \n \"nf-core/mag\n \n

\n\n## Pipeline summary\n\nBy default, the pipeline currently performs the following: it supports both short and long reads, quality trims the reads and adapters with [fastp](https://github.com/OpenGene/fastp), [AdapterRemoval](https://github.com/MikkelSchubert/adapterremoval), or [trimmomatic](https://github.com/usadellab/Trimmomatic) and [Porechop](https://github.com/rrwick/Porechop), and performs basic QC with [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/), and merges multiple sequencing runs.\n\nThe pipeline then:\n\n- 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)\n- (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)\n- 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)\n- performs metagenome binning using [MetaBAT2](https://bitbucket.org/berkeleylab/metabat/src/master/), [MaxBin2](https://sourceforge.net/projects/maxbin2/), [CONCOCT](https://github.com/BinPro/CONCOCT), [COMEBin](https://github.com/ziyewang/COMEBin), [MetaBinner](https://github.com/ziyewang/MetaBinner), and/or [SemiBin2](https://github.com/BigDataBiology/SemiBin)\n- 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/)\n- Performs ancient DNA validation and repair with [pyDamage](https://github.com/maxibor/pydamage) and [freebayes](https://github.com/freebayes/freebayes)\n- optionally refines bins with [DAS Tool](https://github.com/cmks/DAS_Tool)\n- 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)\n\nFurthermore, the pipeline creates various reports in the results directory specified, including a [MultiQC](https://multiqc.info/) report summarizing some of the findings and software versions.\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```bash\nnextflow run nf-core/mag -profile --input samplesheet.csv --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/mag/usage) and the [parameter documentation](https://nf-co.re/mag/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/mag/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/mag/output).\n\n### Group-wise co-assembly and co-abundance computation\n\nEach sample has an associated group ID (see [input specifications](https://nf-co.re/mag/usage#input_specifications)). This group information can be used for group-wise co-assembly with `MEGAHIT` or `SPAdes` and/or to compute co-abundances for the binning step with `MetaBAT2`. By default, group-wise co-assembly is disabled, while the computation of group-wise co-abundances is enabled. For more information about how this group information can be used see the documentation for the parameters [`--coassemble_group`](https://nf-co.re/mag/parameters#coassemble_group) and [`--binning_map_mode`](https://nf-co.re/mag/parameters#binning_map_mode).\n\nWhen group-wise co-assembly is enabled, `SPAdes` is run on accordingly pooled read files, since `metaSPAdes` does not yet allow the input of multiple samples or libraries. In contrast, `MEGAHIT` is run for each group while supplying lists of the individual readfiles.\n\n## Credits\n\nnf-core/mag was written by [Hadrien Gourl\u00e9](https://hadriengourle.com) at [SLU](https://slu.se), [Daniel Straub](https://github.com/d4straub) and [Sabrina Krakau](https://github.com/skrakau) at the [Quantitative Biology Center (QBiC)](http://qbic.life). [James A. Fellows Yates](https://github.com/jfy133) and [Maxime Borry](https://github.com/maxibor) at the [Max Planck Institute for Evolutionary Anthropology](https://www.eva.mpg.de) joined in version 2.2.0.\n\nOther code contributors include:\n\n- [Antonia Schuster](https://github.com/AntoniaSchuster)\n- [Alexander Ramos](https://github.com/alxndrdiaz)\n- [Carson Miller](https://github.com/CarsonJM)\n- [Daniel Lundin](https://github.com/erikrikarddaniel)\n- [Danielle Callan](https://github.com/d-callan)\n- [Gregory Sprenger](https://github.com/gregorysprenger)\n- [Jim Downie](https://github.com/prototaxites)\n- [Phil Palmer](https://github.com/PhilPalmer)\n- [William Rosenbaum](https://github.com/willros)\n- [Adam Rosenbaum](https://github.com/muabnezor)\n- [Diego Alvarez](https://github.com/dialvarezs)\n- [Nikolaos Vergoulidis](https://github.com/IceGreb)\n- [Greg Fedewa](https://github.com/harper357)\n- [Vini Salazar](https://github.com/vinisalazar)\n- [Alex Caswell](https://github.com/AlexHoratio)\n- [Jeferyd Yepes](https://github.com/jeffe107)\n\nLong read processing was inspired by [caspargross/HybridAssembly](https://github.com/caspargross/HybridAssembly) written by Caspar Gross [@caspargross](https://github.com/caspargross)\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n- [Alexander Peltzer](https://github.com/apeltzer)\n- [Phil Ewels](https://github.com/ewels)\n- [Gisela Gabernet](https://github.com/ggabernet)\n- [Harshil Patel](https://github.com/drpatelh)\n- [Johannes Alneberg](https://github.com/alneberg)\n- [Maxime Garcia](https://github.com/MaxUlysse)\n- [Michael L Heuer](https://github.com/heuermh)\n- [Alex H\u00fcbner](https://github.com/alexhbnr)\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 `#mag` channel](https://nfcore.slack.com/channels/mag) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\nIf you use nf-core/mag for your analysis, please cite the preprint as follows:\n\n> **nf-core/mag: a best-practice pipeline for metagenome hybrid assembly and binning**\n>\n> Sabrina Krakau, Daniel Straub, Hadrien Gourl\u00e9, Gisela Gabernet, Sven Nahnsen.\n>\n> NAR Genom Bioinform. 2022 Feb 2;4(1):lqac007. doi: [10.1093/nargab/lqac007](https://doi.org/10.1093/nargab/lqac007).\n\nAdditionally you can cite the pipeline directly with the following doi: [10.5281/zenodo.3589527](https://doi.org/10.5281/zenodo.3589527)\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" @@ -105,7 +105,7 @@ }, "mentions": [ { - "@id": "#dd3f9445-3b91-4534-972a-07de3d0e1cc2" + "@id": "#1fc09b94-4021-49d2-b42d-21ed0adb2d3f" } ], "name": "nf-core/mag" @@ -134,26 +134,26 @@ ], "creator": [ { - "@id": "https://orcid.org/0000-0001-9807-1082" + "@id": "#42973691+d4straub@users.noreply.github.com" }, { - "@id": "https://orcid.org/0000-0003-0603-7907" + "@id": "#68351153+CarsonJM@users.noreply.github.com" }, { - "@id": "#42973691+d4straub@users.noreply.github.com" + "@id": "https://orcid.org/0000-0001-9807-1082" }, { - "@id": "#68351153+CarsonJM@users.noreply.github.com" + "@id": "#jfy133@gmail.com" }, { "@id": "#jfy133@gmail.com" }, { - "@id": "#jfy133@gmail.com" + "@id": "https://orcid.org/0000-0003-0603-7907" } ], "dateCreated": "", - "dateModified": "2025-11-04T16:04:00Z", + "dateModified": "2025-12-01T09:18:37Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -172,16 +172,16 @@ ], "maintainer": [ { - "@id": "https://orcid.org/0000-0001-9807-1082" + "@id": "#42973691+d4straub@users.noreply.github.com" }, { - "@id": "https://orcid.org/0000-0003-0603-7907" + "@id": "https://orcid.org/0000-0001-9807-1082" }, { - "@id": "#42973691+d4straub@users.noreply.github.com" + "@id": "#jfy133@gmail.com" }, { - "@id": "#jfy133@gmail.com" + "@id": "https://orcid.org/0000-0003-0603-7907" } ], "name": [ @@ -195,10 +195,10 @@ }, "url": [ "https://github.com/nf-core/mag", - "https://nf-co.re/mag/5.2.0/" + "https://nf-co.re/mag/5.3.0/" ], "version": [ - "5.2.0" + "5.3.0" ] }, { @@ -214,11 +214,11 @@ "version": "!>=25.04.2" }, { - "@id": "#dd3f9445-3b91-4534-972a-07de3d0e1cc2", + "@id": "#1fc09b94-4021-49d2-b42d-21ed0adb2d3f", "@type": "TestSuite", "instance": [ { - "@id": "#0ba4ffe5-1ce6-458a-920c-3677832ae115" + "@id": "#46b10c99-653a-4806-a978-d8426906e571" } ], "mainEntity": { @@ -227,7 +227,7 @@ "name": "Test suite for nf-core/mag" }, { - "@id": "#0ba4ffe5-1ce6-458a-920c-3677832ae115", + "@id": "#46b10c99-653a-4806-a978-d8426906e571", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-core/mag", "resource": "repos/nf-core/mag/actions/workflows/nf-test.yml", @@ -365,18 +365,6 @@ "name": "nf-core", "url": "https://nf-co.re/" }, - { - "@id": "https://orcid.org/0000-0001-9807-1082", - "@type": "Person", - "email": "gourlehadrien@gmail.com", - "name": "Hadrien Gourl\u00e9" - }, - { - "@id": "https://orcid.org/0000-0003-0603-7907", - "@type": "Person", - "email": "sabrina.krakau.qbic@gmail.com", - "name": "Sabrina Krakau" - }, { "@id": "#42973691+d4straub@users.noreply.github.com", "@type": "Person", @@ -389,11 +377,23 @@ "email": "68351153+CarsonJM@users.noreply.github.com", "name": "Carson J Miller" }, + { + "@id": "https://orcid.org/0000-0001-9807-1082", + "@type": "Person", + "email": "gourlehadrien@gmail.com", + "name": "Hadrien Gourl\u00e9" + }, { "@id": "#jfy133@gmail.com", "@type": "Person", "email": "jfy133@gmail.com", - "name": "James A. Fellows Yates" + "name": "James Fellows Yates" + }, + { + "@id": "https://orcid.org/0000-0003-0603-7907", + "@type": "Person", + "email": "sabrina.krakau.qbic@gmail.com", + "name": "Sabrina Krakau" } ] } \ No newline at end of file diff --git a/subworkflows/local/ancient_dna/main.nf b/subworkflows/local/ancient_dna/main.nf index c9996f5e7..d399e56ae 100644 --- a/subworkflows/local/ancient_dna/main.nf +++ b/subworkflows/local/ancient_dna/main.nf @@ -8,10 +8,10 @@ include { SAMTOOLS_FAIDX as FAIDX } from '../../../modules/nf-core workflow ANCIENT_DNA_ASSEMBLY_VALIDATION { take: - ch_input //channel: [val(meta), path(contigs), path(bam), path(bam_index)] + ch_input // [val(meta), path(contigs), path(bam), path(bam_index)] main: - ch_versions = Channel.empty() + ch_versions = channel.empty() PYDAMAGE_ANALYZE( ch_input.map { meta, _contigs, bam, bai -> @@ -28,7 +28,7 @@ workflow ANCIENT_DNA_ASSEMBLY_VALIDATION { ch_versions = ch_versions.mix(PYDAMAGE_FILTER.out.versions) if (params.skip_ancient_damagecorrection) { - ch_corrected_contigs = Channel.empty() + ch_corrected_contigs = channel.empty() } if (!params.skip_ancient_damagecorrection) { diff --git a/subworkflows/local/ancient_dna/meta.yml b/subworkflows/local/ancient_dna/meta.yml index bf42d6f5e..37c7aff78 100644 --- a/subworkflows/local/ancient_dna/meta.yml +++ b/subworkflows/local/ancient_dna/meta.yml @@ -9,6 +9,7 @@ keywords: - damage patterns components: - bcftools/consensus + - bcftools/index - bcftools/view - freebayes - pydamage/analyze diff --git a/subworkflows/local/assembly/main.nf b/subworkflows/local/assembly/main.nf index 46d24a92b..fdf051d78 100644 --- a/subworkflows/local/assembly/main.nf +++ b/subworkflows/local/assembly/main.nf @@ -11,12 +11,12 @@ include { GUNZIP as GUNZIP_LONGREAD_ASSEMBLIES } from '../../../modules/nf-core workflow ASSEMBLY { take: - ch_short_reads // [ [meta] , fastq1, fastq2] (mandatory) - ch_long_reads // [ [meta] , fastq] (mandatory) + ch_short_reads // [val(meta), path(fastq1), path(fastq2)] (mandatory) + ch_long_reads // [val(meta), path(fastq)] (mandatory) main: - ch_versions = Channel.empty() + ch_versions = channel.empty() /* ================================================================================ @@ -32,18 +32,27 @@ workflow ASSEMBLY { .groupTuple(by: 0) .map { group, metas, reads -> def assemble_as_single = params.single_end || (params.bbnorm && params.coassemble_group) - def meta = [:] - meta.id = "group-${group}" - meta.group = group - meta.single_end = assemble_as_single - meta.sr_platform = metas.sr_platform[0] + def meta = [ + id: "group-${group}", + group: group, + single_end: assemble_as_single, + sr_platform: metas.sr_platform[0] + ] if (assemble_as_single) { - [meta, reads.collect { it }, []] + [meta, reads.sort { files -> files[0].getName() }, []] } else { - [meta, reads.collect { it[0] }, reads.collect { it[1] }] + [meta] + reads.sort { files -> files[0].getName() }.transpose() } } + + // We have to merge reads together to match tuple structure of POOL_SHORT_READS/ + // This MUST be in a interleaved structure (s1_r1, s1_r2, s2_r1, s2_r2, ...) + // So we zip the lists of R1s and R2s, consistent order is ensured by the existing structure + ch_short_reads_grouped_for_pooling = ch_short_reads_grouped.map { meta, reads1, reads2 -> + [meta, [reads1, reads2].transpose().flatten()] + } + // long reads // group and set group as new id ch_long_reads_grouped = ch_long_reads @@ -54,26 +63,31 @@ workflow ASSEMBLY { meta.id = "group-${group}" meta.group = group meta.lr_platform = metas.lr_platform[0] - [meta, reads.collect { it }] + [meta, reads] } } else { - ch_short_reads_grouped = ch_short_reads - .filter { it[0].single_end } - .map { meta, reads -> [meta, [reads], []] } - .mix( - ch_short_reads.filter { !it[0].single_end }.map { meta, reads -> [meta, [reads[0]], [reads[1]]] } - ) + ch_short_reads_grouped = ch_short_reads.map { meta, reads -> + if (meta.single_end) { + [meta, [reads], []] + } + else { + [meta, [reads[0]], [reads[1]]] + } + } + ch_long_reads_grouped = ch_long_reads } if (!params.skip_spades || !params.skip_spadeshybrid) { if (params.coassemble_group) { if (params.bbnorm) { - ch_short_reads_spades = ch_short_reads_grouped.map { [it[0], it[1]] } + // When doing co-assembly and using bbnorm, all sample reads get pooled in a single file + // That's why we can drop R2 here (it's empty) + ch_short_reads_spades = ch_short_reads_grouped.map { meta, r1, _r2 -> [meta, r1] } } else { - POOL_SHORT_READS(ch_short_reads_grouped) + POOL_SHORT_READS(ch_short_reads_grouped_for_pooling) ch_versions = ch_versions.mix(POOL_SHORT_READS.out.versions) ch_short_reads_spades = POOL_SHORT_READS.out.reads } @@ -86,8 +100,8 @@ workflow ASSEMBLY { ch_long_reads_grouped_for_pool = ch_long_reads_grouped .map { meta, reads -> [meta.id, meta, reads] } - .combine(ch_short_reads_grouped.map { meta, _reads1, _reads2 -> [meta.id, meta] }, by: 0) - .map { [it[1], it[2]] } + .combine(ch_short_reads_grouped.map { meta, _reads1, _reads2 -> [meta.id] }, by: 0) + .map { _id, lr_meta, lr_reads -> [lr_meta, lr_reads] } //make sure no long reads are pooled for spades if there are no short reads POOL_LONG_READS(ch_long_reads_grouped_for_pool) @@ -95,12 +109,12 @@ workflow ASSEMBLY { ch_long_reads_spades = POOL_LONG_READS.out.reads } else { - ch_long_reads_spades = Channel.empty() + ch_long_reads_spades = channel.empty() } } else { - ch_short_reads_spades = Channel.empty() - ch_long_reads_spades = Channel.empty() + ch_short_reads_spades = channel.empty() + ch_long_reads_spades = channel.empty() } /* @@ -109,8 +123,8 @@ workflow ASSEMBLY { ================================================================================ */ - ch_shortread_assembled_contigs = Channel.empty() - ch_longread_assembled_contigs = Channel.empty() + ch_shortread_assembled_contigs = channel.empty() + ch_longread_assembled_contigs = channel.empty() // SHORTREAD ASSEMBLY SHORTREAD_ASSEMBLY( diff --git a/subworkflows/local/assembly_hybrid/main.nf b/subworkflows/local/assembly_hybrid/main.nf index 8fa0f90fe..b2f551d06 100644 --- a/subworkflows/local/assembly_hybrid/main.nf +++ b/subworkflows/local/assembly_hybrid/main.nf @@ -3,13 +3,13 @@ include { SPADES as METASPADESHYBRID } from '../../../modules/nf-core/spades/mai workflow HYBRID_ASSEMBLY { take: - ch_short_reads_spades // [ [meta] , fastq1, fastq2] (mandatory) - ch_long_reads_spades // [ [meta] , fastq] (mandatory) + ch_short_reads_spades // [val(meta), path(fastq1), path(fastq2)] (mandatory) + ch_long_reads_spades // [val(meta), path(fastq)] (mandatory) main: - ch_versions = Channel.empty() - ch_assembled_contigs = Channel.empty() + ch_versions = channel.empty() + ch_assembled_contigs = channel.empty() if (!params.single_end && !params.skip_spadeshybrid) { ch_short_reads_spades_tmp = ch_short_reads_spades.map { meta, reads -> [meta.id, meta, reads] } diff --git a/subworkflows/local/assembly_longread/main.nf b/subworkflows/local/assembly_longread/main.nf index 2b3cab32c..dac82f7c8 100644 --- a/subworkflows/local/assembly_longread/main.nf +++ b/subworkflows/local/assembly_longread/main.nf @@ -7,11 +7,11 @@ include { METAMDBG_ASM } from '../../../modules/nf-core/metamdbg/asm/main' workflow LONGREAD_ASSEMBLY { take: - ch_long_reads // [ [meta] , fastq] (mandatory) + ch_long_reads // [val(meta), path(fastq)] (mandatory) main: - ch_assembled_contigs = Channel.empty() - ch_versions = Channel.empty() + ch_assembled_contigs = channel.empty() + ch_versions = channel.empty() if (!params.skip_flye) { diff --git a/subworkflows/local/assembly_shortread/main.nf b/subworkflows/local/assembly_shortread/main.nf index 91e22978a..3268fc649 100644 --- a/subworkflows/local/assembly_shortread/main.nf +++ b/subworkflows/local/assembly_shortread/main.nf @@ -4,12 +4,12 @@ include { SPADES as METASPADES } from '../../../modules/nf-core/spades/main' workflow SHORTREAD_ASSEMBLY { take: - ch_short_reads_grouped // [ [meta] , fastq1, fastq2] (mandatory) - ch_short_reads_spades + ch_short_reads_grouped // [val(meta), path(fastq1), path(fastq2)] (mandatory) + ch_short_reads_spades // [val(meta), path(fastq1)] (mandatory) main: - ch_versions = Channel.empty() - ch_assembled_contigs = Channel.empty() + ch_versions = channel.empty() + ch_assembled_contigs = channel.empty() if (!params.single_end && !params.skip_spades) { METASPADES(ch_short_reads_spades.map { meta, reads -> [meta, reads, [], []] }, [], []) diff --git a/subworkflows/local/bin_qc/main.nf b/subworkflows/local/bin_qc/main.nf index 71456274b..926fd51fe 100644 --- a/subworkflows/local/bin_qc/main.nf +++ b/subworkflows/local/bin_qc/main.nf @@ -2,34 +2,34 @@ * BUSCO/CheckM/CheckM2/GUNC: Quantitative measures for the assessment of genome assembly */ -include { BUSCO_BUSCO } from '../../../modules/nf-core/busco/busco/main' -include { CHECKM2_DATABASEDOWNLOAD } from '../../../modules/nf-core/checkm2/databasedownload/main' -include { CHECKM_QA } from '../../../modules/nf-core/checkm/qa/main' -include { CHECKM_LINEAGEWF } from '../../../modules/nf-core/checkm/lineagewf/main' -include { CHECKM2_PREDICT } from '../../../modules/nf-core/checkm2/predict/main' -include { CSVTK_CONCAT as CONCAT_BUSCO_TSV } from '../../../modules/nf-core/csvtk/concat/main' -include { CSVTK_CONCAT as CONCAT_CHECKM_TSV } from '../../../modules/nf-core/csvtk/concat/main' -include { CSVTK_CONCAT as CONCAT_CHECKM2_TSV } from '../../../modules/nf-core/csvtk/concat/main' -include { GUNC_DOWNLOADDB } from '../../../modules/nf-core/gunc/downloaddb/main' -include { GUNC_RUN } from '../../../modules/nf-core/gunc/run/main' -include { GUNC_MERGECHECKM } from '../../../modules/nf-core/gunc/mergecheckm/main' -include { UNTAR as BUSCO_UNTAR } from '../../../modules/nf-core/untar/main' -include { UNTAR as CHECKM_UNTAR } from '../../../modules/nf-core/untar/main' +include { BUSCO_BUSCO } from '../../../modules/nf-core/busco/busco/main' +include { CHECKM2_DATABASEDOWNLOAD } from '../../../modules/nf-core/checkm2/databasedownload/main' +include { CHECKM_QA } from '../../../modules/nf-core/checkm/qa/main' +include { CHECKM_LINEAGEWF } from '../../../modules/nf-core/checkm/lineagewf/main' +include { CHECKM2_PREDICT } from '../../../modules/nf-core/checkm2/predict/main' +include { QSV_CAT as CONCAT_BUSCO_TSV } from '../../../modules/nf-core/qsv/cat/main' +include { QSV_CAT as CONCAT_CHECKM_TSV } from '../../../modules/nf-core/qsv/cat/main' +include { QSV_CAT as CONCAT_CHECKM2_TSV } from '../../../modules/nf-core/qsv/cat/main' +include { GUNC_DOWNLOADDB } from '../../../modules/nf-core/gunc/downloaddb/main' +include { GUNC_RUN } from '../../../modules/nf-core/gunc/run/main' +include { GUNC_MERGECHECKM } from '../../../modules/nf-core/gunc/mergecheckm/main' +include { UNTAR as BUSCO_UNTAR } from '../../../modules/nf-core/untar/main' +include { UNTAR as CHECKM_UNTAR } from '../../../modules/nf-core/untar/main' workflow BIN_QC { take: - ch_bins // [ [ meta] , fasta ], input bins (mandatory) + ch_bins // [val(meta), path(fasta)], input bins (mandatory) main: - ch_qc_summaries = Channel.empty() + ch_qc_summaries = channel.empty() ch_input_bins_for_qc = ch_bins.transpose() - ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() - ch_busco_final_summaries = Channel.empty() - ch_checkm_final_summaries = Channel.empty() - ch_checkm2_final_summaries = Channel.empty() - + ch_versions = channel.empty() + ch_multiqc_files = channel.empty() + ch_busco_final_summaries = channel.empty() + ch_checkm_final_summaries = channel.empty() + ch_checkm2_final_summaries = channel.empty() + ch_gunc_summary = channel.empty() /* ================================ @@ -53,7 +53,7 @@ workflow BIN_QC { CHECKM_UNTAR(ch_checkm_db) ch_versions = ch_versions.mix(CHECKM_UNTAR.out.versions) - ch_checkm_db = CHECKM_UNTAR.out.untar.map { it[1] } + ch_checkm_db = CHECKM_UNTAR.out.untar.map { _meta, db -> db } } else { ch_checkm_db = [] @@ -75,7 +75,7 @@ workflow BIN_QC { ch_gunc_db = file(params.gunc_db, checkIfExists: true) } else { - ch_gunc_db = Channel.empty() + ch_gunc_db = channel.empty() } /* @@ -93,7 +93,7 @@ workflow BIN_QC { if (ch_busco_db && ch_busco_db.extension in ['gz', 'tgz']) { BUSCO_UNTAR([[id: ch_busco_db.getSimpleName()], ch_busco_db]) ch_versions = ch_versions.mix(BUSCO_UNTAR.out.versions) - ch_busco_db = BUSCO_UNTAR.out.untar.map { it[1] } + ch_busco_db = BUSCO_UNTAR.out.untar.map { _meta, db -> db } } else if (ch_busco_db && ch_busco_db.isDirectory()) { ch_busco_db = ch_busco_db @@ -109,13 +109,16 @@ workflow BIN_QC { .map { _meta, summary -> [[id: 'busco'], summary] } .groupTuple() ch_multiqc_files = ch_multiqc_files.mix( - BUSCO_BUSCO.out.short_summaries_txt.map { it[1] }.flatten() + BUSCO_BUSCO.out.short_summaries_txt.map { _meta, summary -> summary }.flatten() ) - CONCAT_BUSCO_TSV(ch_busco_summaries, 'tsv', 'tsv') - ch_versions = ch_versions.mix(CONCAT_BUSCO_TSV.out.versions) - ch_busco_final_summaries = ch_busco_final_summaries.mix(CONCAT_BUSCO_TSV.out.csv.map { it[1] }) - ch_qc_summaries = ch_qc_summaries.mix(CONCAT_BUSCO_TSV.out.csv.splitCsv(header: true, sep: '\t').map { _meta, summary -> [bin_qc_tool: 'busco'] + summary }) + CONCAT_BUSCO_TSV(ch_busco_summaries, 'rowskey', 'tsv', true) + ch_busco_final_summaries = ch_busco_final_summaries.mix( + CONCAT_BUSCO_TSV.out.csv.map { _meta, csv -> csv } + ) + ch_qc_summaries = ch_qc_summaries.mix( + CONCAT_BUSCO_TSV.out.csv.splitCsv(header: true, sep: '\t').map { _meta, summary -> [bin_qc_tool: 'busco'] + summary } + ) } if (params.run_checkm) { /* @@ -147,13 +150,16 @@ workflow BIN_QC { .map { _meta, summary -> [[id: 'checkm'], summary] } .groupTuple() ch_multiqc_files = ch_multiqc_files.mix( - CHECKM_QA.out.output.map { it[1] }.flatten() + CHECKM_QA.out.output.map { _meta, summary -> summary }.flatten() ) - CONCAT_CHECKM_TSV(ch_checkm_summaries, 'tsv', 'tsv') - ch_versions = ch_versions.mix(CONCAT_CHECKM_TSV.out.versions) - ch_checkm_final_summaries = ch_checkm_final_summaries.mix(CONCAT_CHECKM_TSV.out.csv.map { it[1] }) - ch_qc_summaries = ch_qc_summaries.mix(CONCAT_CHECKM_TSV.out.csv.splitCsv(header: true, sep: '\t').map { _meta, summary -> [bin_qc_tool: 'checkm'] + summary }) + CONCAT_CHECKM_TSV(ch_checkm_summaries, 'rowskey', 'tsv', true) + ch_checkm_final_summaries = ch_checkm_final_summaries.mix( + CONCAT_CHECKM_TSV.out.csv.map { _meta, csv -> csv } + ) + ch_qc_summaries = ch_qc_summaries.mix( + CONCAT_CHECKM_TSV.out.csv.splitCsv(header: true, sep: '\t').map { _meta, summary -> [bin_qc_tool: 'checkm'] + summary } + ) } if (params.run_checkm2) { /* @@ -166,13 +172,16 @@ workflow BIN_QC { .map { _meta, summary -> [[id: 'checkm2'], summary] } .groupTuple() ch_multiqc_files = ch_multiqc_files.mix( - CHECKM2_PREDICT.out.checkm2_tsv.map { it[1] }.flatten() + CHECKM2_PREDICT.out.checkm2_tsv.map { _meta, summary -> summary }.flatten() ) - CONCAT_CHECKM2_TSV(ch_checkm2_summaries, 'tsv', 'tsv') - ch_versions = ch_versions.mix(CONCAT_CHECKM2_TSV.out.versions) - ch_checkm2_final_summaries = ch_checkm2_final_summaries.mix(CONCAT_CHECKM2_TSV.out.csv.map { it[1] }) - ch_qc_summaries = ch_qc_summaries.mix(CONCAT_CHECKM2_TSV.out.csv.splitCsv(header: true, sep: '\t').map { _meta, summary -> [bin_qc_tool: 'checkm2'] + summary }) + CONCAT_CHECKM2_TSV(ch_checkm2_summaries, 'rowskey', 'tsv', false) + ch_checkm2_final_summaries = ch_checkm2_final_summaries.mix( + CONCAT_CHECKM2_TSV.out.csv.map { _meta, csv -> csv } + ) + ch_qc_summaries = ch_qc_summaries.mix( + CONCAT_CHECKM2_TSV.out.csv.splitCsv(header: true, sep: '\t').map { _meta, summary -> [bin_qc_tool: 'checkm2'] + summary } + ) } if (params.run_gunc) { @@ -195,7 +204,7 @@ workflow BIN_QC { ch_versions.mix(GUNC_RUN.out.versions) // Make sure to keep directory in sync with modules.conf - GUNC_RUN.out.maxcss_level_tsv + ch_gunc_summary = GUNC_RUN.out.maxcss_level_tsv .map { _meta, gunc_summary -> gunc_summary } .collectFile( name: "gunc_summary.tsv", @@ -224,6 +233,7 @@ workflow BIN_QC { busco_summary = ch_busco_final_summaries checkm_summary = ch_checkm_final_summaries checkm2_summary = ch_checkm2_final_summaries + gunc_summary = ch_gunc_summary multiqc_files = ch_multiqc_files versions = ch_versions } diff --git a/subworkflows/local/bin_qc/meta.yml b/subworkflows/local/bin_qc/meta.yml index 784aad8f4..da92d06b4 100644 --- a/subworkflows/local/bin_qc/meta.yml +++ b/subworkflows/local/bin_qc/meta.yml @@ -15,10 +15,10 @@ components: - checkm/qa - checkm/lineagewf - checkm2/predict - - csvtk/concat - gunc/downloaddb - gunc/run - gunc/mergecheckm + - qsv/cat - untar input: - ch_bins: diff --git a/subworkflows/local/binning/main.nf b/subworkflows/local/binning/main.nf index f6c77de17..6cdaebf3e 100644 --- a/subworkflows/local/binning/main.nf +++ b/subworkflows/local/binning/main.nf @@ -9,6 +9,7 @@ include { METABAT2_JGISUMMARIZEBAMCONTIGDEPTHS as METABAT2_JGISUMMARIZEBAMCONTIG include { METABAT2_JGISUMMARIZEBAMCONTIGDEPTHS as METABAT2_JGISUMMARIZEBAMCONTIGDEPTHS_LONGREAD } from '../../../modules/nf-core/metabat2/jgisummarizebamcontigdepths/main' include { MAXBIN2 } from '../../../modules/nf-core/maxbin2/main' include { COMEBIN_RUNCOMEBIN } from '../../../modules/nf-core/comebin/runcomebin/main' +include { SEMIBIN_SINGLEEASYBIN } from '../../../modules/nf-core/semibin/singleeasybin/main' include { GUNZIP as GUNZIP_BINS } from '../../../modules/nf-core/gunzip/main' include { GUNZIP as GUNZIP_UNBINS } from '../../../modules/nf-core/gunzip/main' @@ -20,22 +21,22 @@ include { SPLIT_FASTA workflow BINNING { take: - ch_assemblies // channel: [ val(meta), path(assembly), path(bams), path(bais) ] - val_bin_min_size - val_bin_max_size + ch_assemblies // [val(meta), path(assembly), path(bams), path(bais)] + val_bin_min_size // val(int) + val_bin_max_size // val(int) main: - ch_versions = Channel.empty() - ch_input_splitfasta = Channel.empty() + ch_versions = channel.empty() + ch_input_splitfasta = channel.empty() // generate coverage depths for each contig and branch by assembler type ch_summarizedepth_input = ch_assemblies .map { meta, _assembly, bams, bais -> [meta, bams, bais] } - .branch { - longread: it[0].assembler in ['FLYE', 'METAMDBG'] + .branch { meta, _bams, _bais -> + longread: meta.assembler in ['FLYE', 'METAMDBG'] shortread: true } @@ -47,7 +48,9 @@ workflow BINNING { ch_versions = ch_versions.mix(METABAT2_JGISUMMARIZEBAMCONTIGDEPTHS_SHORTREAD.out.versions) // Merge the outputs - ch_combined_depths = METABAT2_JGISUMMARIZEBAMCONTIGDEPTHS_LONGREAD.out.depth.mix(METABAT2_JGISUMMARIZEBAMCONTIGDEPTHS_SHORTREAD.out.depth) + ch_combined_depths = METABAT2_JGISUMMARIZEBAMCONTIGDEPTHS_LONGREAD.out.depth.mix( + METABAT2_JGISUMMARIZEBAMCONTIGDEPTHS_SHORTREAD.out.depth + ) ch_metabat_depths = ch_combined_depths.map { meta, depths -> def meta_new = meta + [binner: 'MetaBAT2'] [meta_new, depths] @@ -76,10 +79,10 @@ workflow BINNING { } // main bins for decompressing for MAG_DEPTHS - ch_bins_for_seqkit = Channel.empty() + ch_bins_for_seqkit = channel.empty() // final gzipped bins - ch_binning_results_gzipped_final = Channel.empty() + ch_binning_results_gzipped_final = channel.empty() // MetaBAT2 if (!params.skip_metabat2) { @@ -128,7 +131,7 @@ workflow BINNING { // COMEBin if (!params.skip_comebin) { ch_comebin_input = ch_assemblies - .map { meta, assembly, bams, bais -> + .map { meta, assembly, bams, _bais -> def meta_new = meta + [binner: 'COMEBin'] [meta_new, assembly, bams] } @@ -156,6 +159,30 @@ workflow BINNING { ch_input_splitfasta = ch_input_splitfasta.mix(BINNING_METABINNER.out.unbinned) } + // SemiBin2 + if (!params.skip_semibin) { + ch_semibin_input = ch_assemblies + .map { meta, assembly, bams, _bais -> + def meta_new = meta + [binner: 'SemiBin2'] + [sample_count: bams.size()] + [meta_new, assembly, bams] + } + + SEMIBIN_SINGLEEASYBIN( + ch_semibin_input + ) + ch_versions = ch_versions.mix(SEMIBIN_SINGLEEASYBIN.out.versions) + + // must remove the additional metadata because "workflow DEPTHS" channel combination is sensitive to any additional fields! + ch_semibin_bins = SEMIBIN_SINGLEEASYBIN.out.output_fasta + .map { meta, bins -> + def meta_new = meta - meta.subMap('sample_count') + [meta_new, bins] + } + + ch_bins_for_seqkit = ch_bins_for_seqkit.mix( ch_semibin_bins.transpose() ) + ch_binning_results_gzipped_final = ch_binning_results_gzipped_final.mix( ch_semibin_bins ) + } + // group bins into per-sample process and not flood clusters with thousands of seqkit jobs ch_bins_for_seqkitstats = ch_bins_for_seqkit .map { meta, bin -> @@ -179,12 +206,12 @@ workflow BINNING { // filtering is 0. Error if so, but only if we had bins to begin with. // ch_seqkitstats_results - .map { meta, stats -> stats.bin_total_length } + .map { _meta, stats -> stats.bin_total_length } .collect().ifEmpty([]) .subscribe { stats -> def n_bins = stats.size() - def n_filtered_bins = stats.findAll { - it >= val_bin_min_size && (val_bin_max_size ? it <= val_bin_max_size : true) + def n_filtered_bins = stats.findAll { bin_size -> + bin_size >= val_bin_min_size && (val_bin_max_size ? bin_size <= val_bin_max_size : true) }.size() if (n_bins > 0 && n_filtered_bins == 0) { error( diff --git a/subworkflows/local/binning/meta.yml b/subworkflows/local/binning/meta.yml index 1ec6897cf..dec392fb2 100644 --- a/subworkflows/local/binning/meta.yml +++ b/subworkflows/local/binning/meta.yml @@ -9,12 +9,14 @@ keywords: - concoct - COMEBin components: + - binning/metabinner - fasta/binning/concoct - metabat2/metabat2 - metabat2/jgisummarizebamcontigdepths - maxbin2 - comebin/runcomebin - gunzip + - semibin/singleeasybin - seqkit/stats - convert/depths - adjust/maxbin2/ext diff --git a/subworkflows/local/binning_metabinner/main.nf b/subworkflows/local/binning_metabinner/main.nf index 319555c52..2adbdd888 100644 --- a/subworkflows/local/binning_metabinner/main.nf +++ b/subworkflows/local/binning_metabinner/main.nf @@ -6,7 +6,7 @@ include { METABINNER_BINS } from '../../../modules/local/metabinner_bi workflow BINNING_METABINNER { take: - ch_input // channel (mandatory): [ val(meta), path(fasta), path(depth) ] (fasta: raw contigs from assembly) + ch_input // [val(meta), path(fasta), path(depth)] (mandatory) main: ch_versions = channel.empty() @@ -14,7 +14,7 @@ workflow BINNING_METABINNER { // produce k-mer composition table METABINNER_KMER( ch_input - .map { meta, assembly, depths -> + .map { meta, assembly, _depths -> [meta, assembly] }, params.min_contig_size @@ -24,7 +24,7 @@ workflow BINNING_METABINNER { // extract contigs over length threshold METABINNER_TOOSHORT( ch_input - .map { meta, assembly, depths -> + .map { meta, assembly, _depths -> [meta, assembly] }, params.min_contig_size @@ -35,13 +35,13 @@ workflow BINNING_METABINNER { ch_metabinner_input = METABINNER_TOOSHORT.out.sizefiltered .join(METABINNER_KMER.out.composition_profile) - .join(ch_input.map { meta, assembly, depths -> [meta, depths] } ) + .join(ch_input.map { meta, _assembly, depths -> [meta, depths] } ) METABINNER_METABINNER(ch_metabinner_input, params.min_contig_size) ch_versions = ch_versions.mix(METABINNER_METABINNER.out.versions) // extract bin sequences METABINNER_BINS( - ch_input.map { meta, assembly, depths -> [meta, assembly] } + ch_input.map { meta, assembly, _depths -> [meta, assembly] } .join(METABINNER_METABINNER.out.membership), params.min_contig_size ) diff --git a/subworkflows/local/binning_metabinner/meta.yml b/subworkflows/local/binning_metabinner/meta.yml new file mode 100644 index 000000000..746d7b851 --- /dev/null +++ b/subworkflows/local/binning_metabinner/meta.yml @@ -0,0 +1,70 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "binning_metabinner" +description: Performs metagenomic binning using MetaBinner +keywords: + - binning + - metagenomics + - metabinner +components: + - metabinner/kmer + - metabinner/tooshort + - metabinner/metabinner + - metabinner/bins +input: + - ch_input: + description: Assembled contigs with corresponding depth information + structure: + - meta: + type: map + description: Metadata map + - fasta: + type: file + description: Assembled contigs in FASTA format + pattern: "*.{fasta,fa}" + - depth: + type: file + description: Contig depth/coverage information + pattern: "*.txt" +output: + - tooshort: + description: Contigs below the minimum size threshold + structure: + - meta: + type: map + description: Metadata map + - fasta: + type: file + description: Short contigs in FASTA format + pattern: "*.{fasta,fa}" + - unbinned: + description: Unbinned sequences + structure: + - meta: + type: map + description: Metadata map + - fasta: + type: file + description: Unbinned sequences in FASTA format + pattern: "*.{fasta,fa}" + - bins: + description: Binned sequences + structure: + - meta: + type: map + description: Metadata map + - fasta: + type: file + description: Binned sequences in FASTA format + pattern: "*.{fasta,fa}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@d4straub" +maintainers: + - "@jfy133" + - "@prototaxites" + - "@dialvarezs" + - "@d4straub" + - "@muabnezor" diff --git a/subworkflows/local/binning_preparation/main.nf b/subworkflows/local/binning_preparation/main.nf index c706e0b34..c51997b76 100644 --- a/subworkflows/local/binning_preparation/main.nf +++ b/subworkflows/local/binning_preparation/main.nf @@ -3,21 +3,23 @@ include { LONGREAD_BINNING_PREPARATION } from '../binning_preparation_longread/ workflow BINNING_PREPARATION { take: - ch_shortread_assemblies // channel: [ val(meta), path(assembly) ] - ch_shortreads // channel: [ val(meta), [ reads ] ] - ch_longread_assemblies // channel: [ val(meta), path(assembly) ] - ch_longreads // channel: [ val(meta), [ reads ] ] + ch_shortread_assemblies // [val(meta), path(assembly)] + ch_shortreads // [val(meta), path(reads)] + ch_longread_assemblies // [val(meta), path(assembly)] + ch_longreads // [val(meta), path(reads)] main: - ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() + ch_versions = channel.empty() + ch_multiqc_files = channel.empty() SHORTREAD_BINNING_PREPARATION(ch_shortread_assemblies, ch_shortreads) ch_versions = ch_versions.mix(SHORTREAD_BINNING_PREPARATION.out.versions) LONGREAD_BINNING_PREPARATION(ch_longread_assemblies, ch_longreads) ch_versions = ch_versions.mix(LONGREAD_BINNING_PREPARATION.out.versions) - ch_grouped_mappings = SHORTREAD_BINNING_PREPARATION.out.grouped_mappings.mix(LONGREAD_BINNING_PREPARATION.out.grouped_mappings) + ch_grouped_mappings = SHORTREAD_BINNING_PREPARATION.out.grouped_mappings.mix( + LONGREAD_BINNING_PREPARATION.out.grouped_mappings + ) ch_multiqc_files = ch_multiqc_files.mix(SHORTREAD_BINNING_PREPARATION.out.bowtie2_assembly_multiqc) diff --git a/subworkflows/local/binning_preparation_longread/main.nf b/subworkflows/local/binning_preparation_longread/main.nf index 546b72e7a..624e59a8d 100644 --- a/subworkflows/local/binning_preparation_longread/main.nf +++ b/subworkflows/local/binning_preparation_longread/main.nf @@ -3,11 +3,11 @@ include { MINIMAP2_ALIGN as MINIMAP2_ASSEMBLY_ALIGN } from '../../../modules/nf- workflow LONGREAD_BINNING_PREPARATION { take: - ch_assemblies // channel: [ val(meta), path(assembly) ] - ch_reads // channel: [ val(meta), [ reads ] ] + ch_assemblies // [val(meta), path(assembly)] + ch_reads // [val(meta), path(reads)] main: - ch_versions = Channel.empty() + ch_versions = channel.empty() MINIMAP2_ASSEMBLY_INDEX(ch_assemblies) ch_versions = ch_versions.mix(MINIMAP2_ASSEMBLY_INDEX.out.versions) diff --git a/subworkflows/local/binning_preparation_shortread/main.nf b/subworkflows/local/binning_preparation_shortread/main.nf index e24e92e2f..299b63c6f 100644 --- a/subworkflows/local/binning_preparation_shortread/main.nf +++ b/subworkflows/local/binning_preparation_shortread/main.nf @@ -7,12 +7,12 @@ include { BOWTIE2_ASSEMBLY_ALIGN } from '../../../modules/local/bowtie2_assembly workflow SHORTREAD_BINNING_PREPARATION { take: - ch_assemblies // channel: [ val(meta), path(assembly) ] - ch_reads // channel: [ val(meta), [ reads ] ] + ch_assemblies // [val(meta), path(assembly)] + ch_reads // [val(meta), path(reads)] main: - ch_versions = Channel.empty() + ch_versions = channel.empty() // build bowtie2 index for all assemblies BOWTIE2_ASSEMBLY_BUILD(ch_assemblies) ch_versions = ch_versions.mix(BOWTIE2_ASSEMBLY_BUILD.out.versions) diff --git a/subworkflows/local/binning_refinement/main.nf b/subworkflows/local/binning_refinement/main.nf index 1a1472c9e..bad83ae81 100644 --- a/subworkflows/local/binning_refinement/main.nf +++ b/subworkflows/local/binning_refinement/main.nf @@ -17,11 +17,11 @@ include { RENAME_POSTDASTOOL } from workflow BINNING_REFINEMENT { take: - ch_contigs_for_dastool // channel: [ val(meta), path(contigs) ] - ch_in_bins // channel: [ val(meta), path(bins) ] + ch_contigs_for_dastool // [val(meta), path(contigs)] + ch_in_bins // [val(meta), path(bins)] main: - ch_versions = Channel.empty() + ch_versions = channel.empty() // remove domain information, will add it back later // everything here is either unclassified or a prokaryote @@ -36,11 +36,11 @@ workflow BINNING_REFINEMENT { } // prepare bins - ch_bins_for_fastatocontig2bin = RENAME_PREDASTOOL(ch_bins).renamed_bins.branch { - metabat2: it[0]['binner'] == 'MetaBAT2' - maxbin2: it[0]['binner'] == 'MaxBin2' - concoct: it[0]['binner'] == 'CONCOCT' - comebin: it[0]['binner'] == 'COMEBin' + ch_bins_for_fastatocontig2bin = RENAME_PREDASTOOL(ch_bins).renamed_bins.branch { meta, _bin -> + metabat2: meta.binner == 'MetaBAT2' + maxbin2: meta.binner == 'MaxBin2' + concoct: meta.binner == 'CONCOCT' + comebin: meta.binner == 'COMEBin' } ch_versions = ch_versions.mix(RENAME_PREDASTOOL.out.versions) @@ -60,7 +60,7 @@ workflow BINNING_REFINEMENT { ch_versions = ch_versions.mix(DASTOOL_FASTATOCONTIG2BIN_COMEBIN.out.versions) // Run DASTOOL - ch_fastatocontig2bin_for_dastool = Channel.empty() + ch_fastatocontig2bin_for_dastool = channel.empty() ch_fastatocontig2bin_for_dastool = ch_fastatocontig2bin_for_dastool .mix(DASTOOL_FASTATOCONTIG2BIN_METABAT2.out.fastatocontig2bin) .mix(DASTOOL_FASTATOCONTIG2BIN_MAXBIN2.out.fastatocontig2bin) diff --git a/subworkflows/local/catpack/main.nf b/subworkflows/local/catpack/main.nf index 443fadddf..5bb680498 100644 --- a/subworkflows/local/catpack/main.nf +++ b/subworkflows/local/catpack/main.nf @@ -14,11 +14,11 @@ include { UNTAR as CAT_DB_UNTAR } from '../../../modules workflow CATPACK { take: - ch_bins // channel: [ val(meta), [bins] ] - ch_unbins // channel: [ val(meta), [unbins] ] + ch_bins // [val(meta), path(fasta)] + ch_unbins // [val(meta), path(fasta)] main: - ch_versions = Channel.empty() + ch_versions = channel.empty() /* ======================================== @@ -34,7 +34,7 @@ workflow CATPACK { ch_cat_db_dir = CAT_DB_UNTAR.out.untar } else { - ch_cat_db_dir = Channel.fromPath(params.cat_db, checkIfExists: true, type: 'dir') + ch_cat_db_dir = channel.fromPath(params.cat_db, checkIfExists: true, type: 'dir') .map { dir -> [[id: 'cat_db'], dir] } .first() } diff --git a/subworkflows/local/depths/main.nf b/subworkflows/local/depths/main.nf index 608150170..d775ce664 100644 --- a/subworkflows/local/depths/main.nf +++ b/subworkflows/local/depths/main.nf @@ -20,12 +20,12 @@ def getRowNo(filename) { workflow DEPTHS { take: - ch_bins_unbins // channel: val(meta), [ path(bins) ] - ch_depths // channel: val(meta), path(depths) - ch_reads // channel: val(meta), path(reads) + ch_bins_unbins // [val(meta), path(fasta)] + ch_depths // [val(meta), path(depth)] + ch_reads // [val(meta), path(fastq)] main: - ch_versions = Channel.empty() + ch_versions = channel.empty() // Compute bin depths for different samples (according to `binning_map_mode`) // Create a new meta combine key first, but copy meta so that @@ -52,7 +52,9 @@ workflow DEPTHS { // Plot bin depths heatmap for each assembly and mapped samples (according to `binning_map_mode`) // create file containing group information for all samples - ch_sample_groups = ch_reads.collectFile(name: 'sample_groups.tsv') { meta, _sample_reads -> meta.id + '\t' + meta.group + '\n' } + ch_sample_groups = ch_reads.collectFile(name: 'sample_groups.tsv') { meta, _sample_reads -> + meta.id + '\t' + meta.group + '\n' + } // Filter MAG depth files: use only those for plotting that contain depths for > 2 samples // as well as > 2 bins diff --git a/subworkflows/local/domain_classification/main.nf b/subworkflows/local/domain_classification/main.nf index b7d39c2ba..433f022d8 100644 --- a/subworkflows/local/domain_classification/main.nf +++ b/subworkflows/local/domain_classification/main.nf @@ -6,12 +6,12 @@ include { TIARA } from '../../../subworkflows/local/tiara' workflow DOMAIN_CLASSIFICATION { take: - ch_assemblies // tuple val(meta), path(assembly) - ch_bins // tuple val(meta), path( [ bins ] ) - ch_unbins // tuple val(meta), path( [ unbins ] ) + ch_assemblies // [val(meta), path(assembly)] + ch_bins // [val(meta), path(fasta)] + ch_unbins // [val(meta), path(fasta)] main: - ch_versions = Channel.empty() + ch_versions = channel.empty() if (params.bin_domain_classification_tool == "tiara") { TIARA(ch_assemblies, ch_bins, ch_unbins) diff --git a/subworkflows/local/gtdbtk/main.nf b/subworkflows/local/gtdbtk/main.nf index 855ff309a..c12483a28 100644 --- a/subworkflows/local/gtdbtk/main.nf +++ b/subworkflows/local/gtdbtk/main.nf @@ -9,12 +9,12 @@ include { GTDBTK_SUMMARY } from '../../../modules/local/gtdbtk_summary/ma workflow GTDBTK { take: - ch_bins // channel: [ val(meta), [bins] ] - ch_bin_qc_summary // channel: path - val_gtdb // value: path + ch_bins // [val(meta), path(fasta)] + ch_bin_qc_summary // path + val_gtdb // path main: - ch_versions = Channel.empty() + ch_versions = channel.empty() // Collect bin quality metrics qc_columns = [ @@ -52,13 +52,20 @@ workflow GTDBTK { .transpose() .map { meta, bin -> [bin.getName(), bin, meta] } .join(ch_bin_metrics) - .map { bin_name, bin, meta, _bin_qc_tool, completeness, contamination -> [bin_name, meta, bin, completeness, contamination] } + .map { bin_name, bin, meta, _bin_qc_tool, completeness, contamination -> + [bin_name, meta, bin, completeness, contamination] + } .groupTuple(by: 0) .branch { _bin_name, meta, bin, completeness, contamination -> - passed: (completeness.any { it != -1 } && completeness.any { it >= params.gtdbtk_min_completeness } && contamination.any { it != -1 } && contamination.any { it <= params.gtdbtk_max_contamination }) - return [meta[0], bin[0]] + passed: ( + completeness.any { bin_completeness -> bin_completeness != -1 } && + completeness.any { bin_completeness -> bin_completeness >= params.gtdbtk_min_completeness } && + contamination.any { bin_contamination -> bin_contamination != -1 } && + contamination.any { bin_contamination -> bin_contamination <= params.gtdbtk_max_contamination } + ) + return [meta[0], bin[0]] discarded: true - return [meta[0], bin[0]] + return [meta[0], bin[0]] } // Note we have to call `meta[0], bin[0]` because of the groupTuple above @@ -92,8 +99,8 @@ workflow GTDBTK { } GTDBTK_SUMMARY( - ch_filtered_bins.discarded.map { it[1] }.collect().ifEmpty([]), - GTDBTK_CLASSIFYWF.out.summary.map { it[1] }.collect().ifEmpty { ([]) }, + ch_filtered_bins.discarded.map { _meta, bin -> bin }.collect().ifEmpty([]), + GTDBTK_CLASSIFYWF.out.summary.map { _meta, summary -> summary }.collect().ifEmpty { ([]) }, [], [], ) diff --git a/subworkflows/local/hostremoval_longread/main.nf b/subworkflows/local/hostremoval_longread/main.nf index a5f5aef97..75e160eca 100644 --- a/subworkflows/local/hostremoval_longread/main.nf +++ b/subworkflows/local/hostremoval_longread/main.nf @@ -12,14 +12,14 @@ include { SAMTOOLS_UNMAPPED as SAMTOOLS_HOSTREMOVED_UNMAPPED } from '../../../mo workflow LONGREAD_HOSTREMOVAL { take: - ch_reads // [ [ meta ], [ reads ] ] + ch_reads // [val(meta), path(fastq)] val_reference // path main: - ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() + ch_versions = channel.empty() + ch_multiqc_files = channel.empty() - ch_host_reference = val_reference.map { [[:], it] } + ch_host_reference = val_reference.map { ref -> [[:], ref] } ch_host_fasta_for_build = ch_host_reference .combine(ch_reads) .map { host_meta, host_fasta, _meta, _reads -> diff --git a/subworkflows/local/preprocessing_longread/main.nf b/subworkflows/local/preprocessing_longread/main.nf index d794ae9c3..5094bd736 100644 --- a/subworkflows/local/preprocessing_longread/main.nf +++ b/subworkflows/local/preprocessing_longread/main.nf @@ -17,15 +17,15 @@ include { LONGREAD_HOSTREMOVAL } from '../hostremoval_longread/main' workflow LONGREAD_PREPROCESSING { take: - ch_raw_long_reads // [ [meta] , fastq] (mandatory) - ch_short_reads // [ [meta] , fastq1, fastq2] - ch_lambda_db // [fasta] - ch_host_fasta // [fasta] - val_skip_qc // [boolean] + ch_raw_long_reads // [val(meta), path(fastq)] (mandatory) + ch_short_reads // [val(meta), path(fastq1), path(fastq2)] + ch_lambda_db // [val(meta), path(fasta)] + ch_host_fasta // [val(meta), path(fasta)] + val_skip_qc // val(boolean) main: - ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() + ch_versions = channel.empty() + ch_multiqc_files = channel.empty() NANOPLOT_RAW( ch_raw_long_reads @@ -72,7 +72,7 @@ workflow LONGREAD_PREPROCESSING { ch_short_and_long_reads = ch_long_reads .map { meta, lr -> [meta.id, meta, lr] } .join(ch_short_reads_tmp, by: 0, remainder: true) - .filter { it[1] != null } + .filter { row -> row[1] != null } // filter out samples with no long reads .map { _id, meta_lr, lr, sr -> [meta_lr, sr ? sr : [], lr] } // should not occur for single-end, since SPAdes (hybrid) does not support single-end @@ -120,9 +120,7 @@ workflow LONGREAD_PREPROCESSING { */ if (!(val_skip_qc && !(params.host_fasta || params.host_genome))) { if (!(params.skip_adapter_trimming && params.skip_longread_filtering && params.keep_lambda && !(params.host_fasta || params.host_genome))) { - NANOPLOT_FILTERED( - ch_long_reads - ) + NANOPLOT_FILTERED(ch_long_reads) ch_versions = ch_versions.mix(NANOPLOT_FILTERED.out.versions) } } diff --git a/subworkflows/local/preprocessing_shortread/main.nf b/subworkflows/local/preprocessing_shortread/main.nf index cb3095a11..092c7107f 100644 --- a/subworkflows/local/preprocessing_shortread/main.nf +++ b/subworkflows/local/preprocessing_shortread/main.nf @@ -19,27 +19,24 @@ include { BOWTIE2_REMOVAL_ALIGN as BOWTIE2_PHIX_REMOVAL_ALIGN } from '../../../m workflow SHORTREAD_PREPROCESSING { take: - ch_raw_short_reads // [ [meta] , fastq1, fastq2] (mandatory) - ch_host_fasta // [fasta] (optional) - ch_host_genome_index // fasta (optional) - ch_phix_db_file // [fasta] (optional) - val_skip_qc // [boolean] + ch_raw_short_reads // [val(meta), [path(fastq1), path(fastq2)]] (mandatory) + ch_host_fasta // [val(meta), path(fasta)] (optional) + ch_host_genome_index // path(fasta) (optional) + ch_phix_db_file // [val(meta), path(fasta)] (optional) + val_skip_qc // val(boolean) main: - ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() + ch_versions = channel.empty() + ch_multiqc_files = channel.empty() - FASTQC_RAW( - ch_raw_short_reads - ) + FASTQC_RAW(ch_raw_short_reads) ch_versions = ch_versions.mix(FASTQC_RAW.out.versions) ch_multiqc_files = ch_multiqc_files.mix(FASTQC_RAW.out.zip) if (!params.skip_clipping && !val_skip_qc) { if (params.clip_tool == 'fastp') { FASTP( - ch_raw_short_reads, - [], + ch_raw_short_reads.map { meta, reads -> [meta, reads, []] }, false, params.fastp_save_trimmed_fail, false, @@ -52,9 +49,9 @@ workflow SHORTREAD_PREPROCESSING { // due to strange output file scheme in AR2, have to manually separate // SE/PE to allow correct pulling of reads after. - ch_adapterremoval_in = ch_raw_short_reads.branch { - single: it[0]['single_end'] - paired: !it[0]['single_end'] + ch_adapterremoval_in = ch_raw_short_reads.branch { meta, _reads -> + single: meta.single_end + paired: !meta.single_end } ADAPTERREMOVAL_PE(ch_adapterremoval_in.paired, []) @@ -62,8 +59,11 @@ workflow SHORTREAD_PREPROCESSING { ADAPTERREMOVAL_SE(ch_adapterremoval_in.single, []) ch_versions = ch_versions.mix(ADAPTERREMOVAL_SE.out.versions) - ch_short_reads_prepped = Channel.empty() - ch_short_reads_prepped = ch_short_reads_prepped.mix(ADAPTERREMOVAL_SE.out.singles_truncated, ADAPTERREMOVAL_PE.out.paired_truncated) + ch_short_reads_prepped = channel.empty() + ch_short_reads_prepped = ch_short_reads_prepped.mix( + ADAPTERREMOVAL_SE.out.singles_truncated, + ADAPTERREMOVAL_PE.out.paired_truncated, + ) ch_multiqc_files = ch_multiqc_files.mix(ADAPTERREMOVAL_PE.out.settings) ch_multiqc_files = ch_multiqc_files.mix(ADAPTERREMOVAL_SE.out.settings) @@ -73,7 +73,7 @@ workflow SHORTREAD_PREPROCESSING { TRIMMOMATIC(ch_raw_short_reads) ch_versions = ch_versions.mix(TRIMMOMATIC.out.versions) - ch_short_reads_prepped = Channel.empty() + ch_short_reads_prepped = channel.empty() ch_short_reads_prepped = TRIMMOMATIC.out.trimmed_reads ch_multiqc_files = ch_multiqc_files.mix(TRIMMOMATIC.out.out_log) @@ -185,7 +185,7 @@ workflow SHORTREAD_PREPROCESSING { } // Combine single run and multi-run-merged data - ch_short_reads = Channel.empty() + ch_short_reads = channel.empty() ch_short_reads = CAT_FASTQ.out.reads.mix(ch_short_reads_catskipped) if (params.bbnorm) { @@ -194,13 +194,15 @@ workflow SHORTREAD_PREPROCESSING { // for dropping the single_end parameter, but keeps assembly modules as they are, i.e. not // accepting a mix of single end and pairs. SEQTK_MERGEPE( - ch_short_reads.filter { !it[0].single_end } + ch_short_reads.filter { meta, _reads -> !meta.single_end } ) ch_versions = ch_versions.mix(SEQTK_MERGEPE.out.versions) // Combine the interleaved pairs with any single end libraries. Set the meta.single_end to true (used by the bbnorm module). ch_bbnorm = SEQTK_MERGEPE.out.reads - .mix(ch_short_reads.filter { it[0].single_end }) - .map { [[id: "group${it[0].group}", group: it[0].group, single_end: true], it[1]] } + .mix(ch_short_reads.filter { meta, _reads -> meta.single_end }) + .map { meta, reads -> + [[id: "group${meta.group}", group: meta.group, single_end: true], reads] + } .groupTuple() } else { diff --git a/subworkflows/local/tiara/main.nf b/subworkflows/local/tiara/main.nf index 9eac84e33..0e1428374 100644 --- a/subworkflows/local/tiara/main.nf +++ b/subworkflows/local/tiara/main.nf @@ -1,17 +1,17 @@ include { TIARA_TIARA } from '../../../modules/nf-core/tiara/tiara/main' include { DASTOOL_FASTATOCONTIG2BIN as DASTOOL_FASTATOCONTIG2BIN_TIARA } from '../../../modules/nf-core/dastool/fastatocontig2bin/main' -include { CSVTK_CONCAT as TIARA_SUMMARY } from '../../../modules/nf-core/csvtk/concat/main' +include { QSV_CAT as CONCAT_TIARA_TSV } from '../../../modules/nf-core/qsv/cat/main' include { TIARA_CLASSIFY } from '../../../modules/local/tiara_classify/main' workflow TIARA { take: - ch_assemblies // tuple val(meta), path(assembly) - ch_in_bins // tuple val(meta), path( [ bins ] ) - ch_in_unbins // tuple val(meta), path( [ unbins ] ) + ch_assemblies // [val(meta), path(fasta)] + ch_in_bins // [val(meta), path(fasta)] + ch_in_unbins // [val(meta), path(fasta)] main: - ch_versions = Channel.empty() + ch_versions = channel.empty() ch_bins = ch_in_bins.map { meta, bin_list -> def meta_new = meta + [bin: 'bins'] @@ -107,15 +107,14 @@ workflow TIARA { } ch_bin_classifications = TIARA_CLASSIFY.out.bin_classifications - .map { _meta, classification -> - [classification] + .collect { _meta, classification -> + classification } - .collect { classifications -> - [[:], classifications] + .map { bin_classifications -> + [[id: 'tiara'], bin_classifications] } - TIARA_SUMMARY(ch_bin_classifications, 'tsv', 'tsv') - ch_versions = ch_versions.mix(TIARA_SUMMARY.out.versions) + CONCAT_TIARA_TSV(ch_bin_classifications, 'rowskey', 'tsv', false) emit: classified_bins = ch_classified_bins diff --git a/subworkflows/local/tiara/meta.yml b/subworkflows/local/tiara/meta.yml index 7fda1aad7..97e40a297 100644 --- a/subworkflows/local/tiara/meta.yml +++ b/subworkflows/local/tiara/meta.yml @@ -9,10 +9,10 @@ keywords: - eukaryote - organelle components: - - csvtk/concat - dastool/fastatocontig2bin - tiara/tiara - tiara/classify + - qsv/cat input: - ch_assemblies: description: Assembled contigs diff --git a/subworkflows/local/utils_nfcore_mag_pipeline/main.nf b/subworkflows/local/utils_nfcore_mag_pipeline/main.nf index 85bb90410..4fede0cb0 100644 --- a/subworkflows/local/utils_nfcore_mag_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_mag_pipeline/main.nf @@ -37,7 +37,7 @@ workflow PIPELINE_INITIALISATION { main: - ch_versions = Channel.empty() + ch_versions = channel.empty() // // Print version and exit if required and dump pipeline parameters to JSON file @@ -62,7 +62,7 @@ workflow PIPELINE_INITIALISATION { \033[0;35m nf-core/mag ${workflow.manifest.version}\033[0m -\033[2m----------------------------------------------------\033[0m- """ - after_text = """${workflow.manifest.doi ? "\n* The pipeline\n" : ""}${workflow.manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/', '')}" }.join("\n")}${workflow.manifest.doi ? "\n" : ""} + after_text = """${workflow.manifest.doi ? "\n* The pipeline\n" : ""}${workflow.manifest.doi.tokenize(",").collect { doi -> " https://doi.org/${doi.trim().replace('https://doi.org/', '')}" }.join("\n")}${workflow.manifest.doi ? "\n" : ""} * The nf-core framework https://doi.org/10.1038/s41587-020-0439-x @@ -99,9 +99,9 @@ workflow PIPELINE_INITIALISATION { // // Validate FASTQ input - ch_samplesheet = Channel.fromList(samplesheetToList(input, "${projectDir}/assets/schema_input.json")) - .map { - validateInputSamplesheet(it[0], it[1], it[2], it[3]) + ch_samplesheet = channel.fromList(samplesheetToList(input, "${projectDir}/assets/schema_input.json")) + .map { meta, sr1, sr2, lr -> + validateInputSamplesheet(meta, sr1, sr2, lr) } // if coassemble_group or binning_map_mode is set to not 'own', check if all samples in a group have the same platform @@ -182,7 +182,9 @@ workflow PIPELINE_INITIALISATION { // Validate PRE-ASSEMBLED CONTIG input when supplied if (params.assembly_input) { - ch_input_assemblies = Channel.fromList(samplesheetToList(params.assembly_input, "${projectDir}/assets/schema_assembly_input.json")) + ch_input_assemblies = channel.fromList( + samplesheetToList(params.assembly_input, "${projectDir}/assets/schema_assembly_input.json") + ) } // Prepare ASSEMBLY input channel @@ -192,7 +194,7 @@ workflow PIPELINE_INITIALISATION { } } else { - ch_input_assemblies = Channel.empty() + ch_input_assemblies = channel.empty() } // Cross validation of input assembly and read IDs: ensure groups are all represented between reads and assemblies @@ -359,19 +361,28 @@ def validateInputParameters(hybrid) { if (params.skip_binqc && (params.run_busco || params.run_checkm || params.run_checkm2)) { error("[nf-core/mag] ERROR: Both --skip_binqc and --run_ are specified! Invalid combination, please specify either --skip_binqc or --run_.") } + if (!params.skip_binqc && !params.run_busco && !params.run_checkm && !params.run_checkm2) { + log.warn('[nf-core/mag]: --skip_binqc is not specified, but no bin quality assessment tool is set to run! Bin QC will be skipped.') + } if (!params.skip_binqc && params.run_busco) { if (params.busco_db && !params.busco_db_lineage) { log.warn('[nf-core/mag]: WARNING: You have supplied a database to --busco_db - BUSCO will run in offline mode. Please note that BUSCO may fail if you have an incomplete database and are running with --busco_db_lineage auto!') } - if (params.busco_db && file(params.busco_db).isDirectory() && !file(params.busco_db).listFiles().any { it.toString().contains('lineages') }) { + if (params.busco_db && file(params.busco_db).isDirectory() && !file(params.busco_db).listFiles().any { file -> file.toString().contains('lineages') }) { error("[nf-core/mag] ERROR: Directory supplied to `--busco_db` must contain a `lineages/` subdirectory that itself contains one or more BUSCO lineage files! Check: --busco_db ${params.busco_db}") } } - if (params.skip_binqc && !params.skip_gtdbtk) { - log.warn('[nf-core/mag]: --skip_binqc is specified, but --skip_gtdbtk is explictly set to run! GTDB-tk will be omitted because GTDB-tk bin classification requires bin filtering based on BUSCO or CheckM QC results to avoid GTDB-tk errors.') + if (!params.skip_gtdbtk) { + if (params.skip_binqc) { + log.warn('[nf-core/mag]: --skip_binqc is specified, but --skip_gtdbtk is explictly set to run! GTDB-tk will be omitted because GTDB-tk bin classification requires bin filtering based on BUSCO or CheckM QC results to avoid GTDB-tk errors.') + } + + if (!params.run_busco && !params.run_checkm && !params.run_checkm2) { + log.warn('[nf-core/mag]: GTDB-tk requires bin quality information from BUSCO, CheckM or CheckM2. Please enable at least one of these tools, otherwise GTDB-tk will be skipped.') + } } // Check if CAT parameters are valid @@ -394,6 +405,11 @@ def validateInputParameters(hybrid) { if (params.prokka_with_compliance && !params.prokka_compliance_centre) { error('[nf-core/mag] ERROR: Invalid parameter combination: running PROKKA with compliance mode requires a centre name specified with `--prokka_compliance_centre `!') } + + // Check BIgMAG parameters + if (params.generate_bigmag_file && (!params.run_gunc || !params.run_checkm2 || !params.run_busco || params.skip_gtdbtk || params.skip_quast || params.skip_binqc)) { + error('[nf-core/mag] ERROR: To generate the BIgMAG file you need to include the parameters `--run_checkm2` and `--run_gunc`, and you cannot skip BINQC, GTDB-TK, QUAST nor BUSCO.') + } } // diff --git a/subworkflows/local/virus_identification/main.nf b/subworkflows/local/virus_identification/main.nf index bbdcc876d..ab3ff8026 100644 --- a/subworkflows/local/virus_identification/main.nf +++ b/subworkflows/local/virus_identification/main.nf @@ -8,11 +8,11 @@ include { UNTAR as GENOMAD_UNTAR } from '../../../modules/nf-core/untar/main' workflow VIRUS_IDENTIFICATION { take: - ch_assemblies // [ [ meta] , fasta ], input scaffolds (mandatory) - ch_genomad_db // [ db ], presupplied geNomad database (optional) + ch_assemblies // [val(meta), path(fasta)] input scaffolds (mandatory) + ch_genomad_db // [path(db)] presupplied geNomad database (optional) main: - ch_versions = Channel.empty() + ch_versions = channel.empty() if (params.genomad_db && ch_genomad_db.extension == 'gz') { GENOMAD_UNTAR([[id: 'db'], ch_genomad_db]) diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index bfd258760..2f30e9a46 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -98,7 +98,7 @@ def workflowVersionToYAML() { // Get channel of software versions used in pipeline in YAML format // def softwareVersionsToYAML(ch_versions) { - return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(Channel.of(workflowVersionToYAML())) + return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(channel.of(workflowVersionToYAML())) } // diff --git a/subworkflows/nf-core/utils_nfschema_plugin/main.nf b/subworkflows/nf-core/utils_nfschema_plugin/main.nf index ee4738c8d..acb397241 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/main.nf +++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf @@ -71,4 +71,3 @@ workflow UTILS_NFSCHEMA_PLUGIN { emit: dummy_emit = true } - diff --git a/tests/.nftignore b/tests/.nftignore index a353e8204..7e1cc6cc7 100644 --- a/tests/.nftignore +++ b/tests/.nftignore @@ -1,27 +1,35 @@ .DS_Store -multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt -multiqc/multiqc_data/multiqc.parquet -multiqc/multiqc_data/multiqc.log -multiqc/multiqc_data/multiqc_data.json -multiqc/multiqc_data/multiqc_sources.txt -multiqc/multiqc_data/multiqc_sources.yaml -multiqc/multiqc_data/multiqc_software_versions.txt -multiqc/multiqc_data/multiqc_software_versions.yaml -multiqc/multiqc_data/llms-full.txt -multiqc/multiqc_plots/{svg,pdf,png}/*.{svg,pdf,png} -multiqc/multiqc_report.html -pipeline_info/*.{html,json,txt,yml} Assembly/MEGAHIT/*.log Assembly/MEGAHIT/QC/*/*.bowtie2.log +GenomeBinning/CONCOCT/stats/*_{original,PCA_components,PCA_transformed}_data_gt1000.csv +GenomeBinning/CONCOCT/stats/*_log.txt +GenomeBinning/CONCOCT/stats/*.tsv +GenomeBinning/SemiBin2/log/*.log +GenomeBinning/DASTool/*.log GenomeBinning/depths/**/*-depth.txt.gz GenomeBinning/depths/bins/*.png GenomeBinning/MetaBAT2/unbinned/discarded/*.unbinned.pooled.fa.gz -GenomeBinning/QC/CheckM2/**/DIAMOND_RESULTS.tsv -GenomeBinning/QC/CheckM2/*/checkm2.log GenomeBinning/QC/busco_summary.tsv -GenomeBinning/QC/BUSCO/**/*.log GenomeBinning/QC/BUSCO/**/.checkpoint +GenomeBinning/QC/BUSCO/**/{logs,prodigal_output,busco_sequences}/** GenomeBinning/QC/BUSCO/**/*.json +GenomeBinning/QC/BUSCO/**/*.log GenomeBinning/QC/BUSCO/**/*.txt +GenomeBinning/QC/BUSCO/**/short_summary*.{txt,json} +GenomeBinning/QC/BUSCO/*/*{-busco.log,-busco.batch_summary.txt} +GenomeBinning/QC/CheckM2/**/DIAMOND_RESULTS.tsv +GenomeBinning/QC/CheckM2/*/checkm2.log +multiqc/multiqc_data/fastqc_top_overrepresented_sequences_table.txt +multiqc/multiqc_data/llms-full.txt +multiqc/multiqc_data/multiqc_data.json +multiqc/multiqc_data/multiqc_software_versions.txt +multiqc/multiqc_data/multiqc_software_versions.yaml +multiqc/multiqc_data/multiqc_sources.txt +multiqc/multiqc_data/multiqc_sources.yaml +multiqc/multiqc_data/multiqc.log +multiqc/multiqc_data/multiqc.parquet +multiqc/multiqc_plots/{svg,pdf,png}/*.{svg,pdf,png} +multiqc/multiqc_report.html +pipeline_info/*.{html,json,txt,yml} QC_shortreads/fastqc/*_fastqc.{html,zip} QC_shortreads/remove_phix/*.log diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index 9e314be85..75faf4c2c 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -6,13 +6,13 @@ "coreutils": 9.5 }, "BIN_SUMMARY": { - "python": "3.10.6", - "pandas": "1.4.3" + "pandas": "1.4.3", + "python": "3.10.6" }, "BOWTIE2_ASSEMBLY_ALIGN": { "bowtie2": "2.4.2", - "samtools": 1.11, - "pigz": "2.3.4" + "pigz": "2.3.4", + "samtools": 1.11 }, "BOWTIE2_ASSEMBLY_BUILD": { "bowtie2": "2.4.2" @@ -45,13 +45,13 @@ "cat": 9.5 }, "CONCAT_BUSCO_TSV": { - "csvtk": "0.31.0" + "qsv": "5.1.0" }, "CONVERT_DEPTHS": { "bioawk": 20110810 }, "FASTP": { - "fastp": "0.24.0" + "fastp": "1.0.1" }, "FASTQC_RAW": { "fastqc": "0.12.1" @@ -60,15 +60,15 @@ "fastqc": "0.12.1" }, "GTDBTK_CLASSIFYWF": { - "gtdbtk": "2.5.2", - "gtdb_db": "r226" + "gtdb_db": "r226", + "gtdbtk": "2.5.2" }, "GTDBTK_DB_PREPARATION": { "tar": 1.34 }, "GTDBTK_SUMMARY": { - "python": "3.10.6", - "pandas": "1.4.3" + "pandas": "1.4.3", + "python": "3.10.6" }, "GUNZIP_BINS": { "gunzip": 1.13 @@ -80,17 +80,17 @@ "gunzip": 1.13 }, "MAG_DEPTHS": { - "python": "3.6.7", - "pandas": "1.1.5" + "pandas": "1.1.5", + "python": "3.6.7" }, "MAG_DEPTHS_PLOT": { - "python": "3.9.6", "pandas": "1.3.0", + "python": "3.9.6", "seaborn": "0.11.0" }, "MAG_DEPTHS_SUMMARY": { - "python": "3.10.6", - "pandas": "1.4.3" + "pandas": "1.4.3", + "python": "3.10.6" }, "MAXBIN2": { "maxbin2": "2.2.7" @@ -108,33 +108,36 @@ "spades": "4.1.0" }, "PRODIGAL": { - "prodigal": "2.6.3", - "pigz": 2.6 + "pigz": 2.6, + "prodigal": "2.6.3" }, "PROKKA": { "prokka": "1.14.6" }, "QUAST": { - "python": "3.7.6", - "metaquast": "5.0.2" + "metaquast": "5.0.2", + "python": "3.7.6" }, "QUAST_BINS": { - "python": "3.7.6", - "metaquast": "5.0.2" + "metaquast": "5.0.2", + "python": "3.7.6" }, "QUAST_BINS_SUMMARY": { "cp": 9.5 }, + "SEMIBIN_SINGLEEASYBIN": { + "SemiBin": "2.2.0" + }, "SEQKIT_STATS": { "seqkit": "2.9.0" }, "SPLIT_FASTA": { - "python": "3.6.7", "biopython": "1.7.4", - "pandas": "1.1.5" + "pandas": "1.1.5", + "python": "3.6.7" }, "Workflow": { - "nf-core/mag": "v5.2.0" + "nf-core/mag": "v5.3.0" } } ], @@ -142,7 +145,7 @@ "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-11-04T07:53:29.134212676" + "timestamp": "2025-11-27T11:33:08.036474035" }, "multiqc": { "content": [ @@ -338,7 +341,7 @@ ], [ "bowtie2_pe_plot.yaml:md5,114c4e63e4189a0169641a7d960ae952", - "busco_plot_bacteria_odb10.yaml:md5,43b59baae27770570256c2a31e74d254", + "busco_plot_bacteria_odb10.yaml:md5,8ff1b7a8628dbdfb9d176058c07c4263", "fastp-insert-size-plot.yaml:md5,000f3d43ff24066e3be550f80acff89f", "fastp-seq-content-gc-plot_Read_1_After_filtering.yaml:md5,5d99f530e0e1c93e5d54c0eb9b86cd60", "fastp-seq-content-gc-plot_Read_1_Before_filtering.yaml:md5,09b51f06f5bdc798443c674f68f53949", @@ -370,28 +373,28 @@ "fastqc_sequence_counts_plot.yaml:md5,914b960f91309a956e21c178901982bc", "fastqc_sequence_duplication_levels_plot.yaml:md5,f5e10bf8d1fef04701a2f3d111248b73", "fastqc_sequence_length_distribution_plot.yaml:md5,765a15b429f92f428bb8cd7e01ca6f3f", - "gtdbtk-first-table.yaml:md5,03b4c0fe32b63adccbf37fc0ed8de065", + "gtdbtk-first-table.yaml:md5,08b7e4d446732aa6282caff9f8cfc314", "multiqc_bowtie2.yaml:md5,dbe34bb5e06f65c3cf7af116f1d54a10", "multiqc_bowtie2_bowtie2-2.yaml:md5,b60f4adf7e78bec1bf16046ce5ea3b7d", - "multiqc_busco.yaml:md5,1af79f05dd67bd79225666ceac0261a8", + "multiqc_busco.yaml:md5,8dfe2fb699e8c4aad16a65a30ce42aad", "multiqc_citations.yaml:md5,f943df75040e829a06eee01614853a68", - "multiqc_fastp.yaml:md5,c2ef27841c4a27e4e2f199d8b6894dca", + "multiqc_fastp.yaml:md5,51ec2abfc64be1bc93c4c3f7298da1e1", "multiqc_fastqc.yaml:md5,c856302b60a6c3c3fd5f273ed1a7c967", "multiqc_fastqc_fastqc-1.yaml:md5,b090818c369a65b9218bae720078035c", - "multiqc_general_stats.yaml:md5,e3cb7bf83b19b574f309f65e8576ba01", - "multiqc_gtdbtk.yaml:md5,dd5a04cfa5a10ab8d664b47c6e5c9ada", - "multiqc_prokka.yaml:md5,4ae2daa70fd98063a0a694807d3c764d", + "multiqc_general_stats.yaml:md5,eb0e0141f528d72ac61cfc98dd86f538", + "multiqc_gtdbtk.yaml:md5,3bbdb38502ded227673a4e25c6d7219a", + "multiqc_prokka.yaml:md5,7a103b0d4385c2de011fc286cb4c5cc3", "multiqc_quast.yaml:md5,1be7cc2def0a960cbc3c19bdc4504c78", - "multiqc_quast_quast-1.yaml:md5,194210784bf73ef2c6fb4d4d3b33bfb8", - "prokka_plot.yaml:md5,4e443dce700548d79038106ee1a6145d", - "quast_num_contigs.yaml:md5,94c080a4ee09a5416f1d61ca36590fb8", - "quast_table.yaml:md5,6212b3494037c1d35c0fcf889668a0a5" + "multiqc_quast_quast-1.yaml:md5,2ef7e71adce9f4e864e27565057a6632", + "prokka_plot.yaml:md5,f11bcc9f1fd6b19754ada6eb14a1df94", + "quast_num_contigs.yaml:md5,d9af764d7d1eeb81aeb91ee8c0fc5144", + "quast_table.yaml:md5,2d53029b92bc2e3940ee2ae932fa2c9d" ] ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.04.8" + "nextflow": "25.10.0" }, - "timestamp": "2025-10-17T09:46:35.893973817" + "timestamp": "2025-12-01T14:44:58.067666089" } } \ No newline at end of file diff --git a/tests/test_alternatives.nf.test b/tests/test_alternatives.nf.test index 76935a6c8..61a9dfe22 100644 --- a/tests/test_alternatives.nf.test +++ b/tests/test_alternatives.nf.test @@ -10,7 +10,7 @@ nextflow_pipeline { when { params { - outdir = "$outputDir" + outdir = "${outputDir}" } } @@ -61,7 +61,7 @@ nextflow_pipeline { params.outdir, include: ['GenomeBinning/MetaBAT2/bins/*.fa.gz'] ) def metabat2_unbins = getAllFilesFromDir( - params.outdir, include: ['GenomeBinning/MetaBAT2/{discarded,unbinned}/*.fa.gz'] + params.outdir, include: ['GenomeBinning/MetaBAT2/{discarded,unbinned/*}/*.fa.gz'] ) // Output dir: multiqc @@ -72,13 +72,12 @@ nextflow_pipeline { params.outdir, include: ['multiqc/**'], ignoreFile: 'tests/.nftignore' ) + assert workflow.success assertAll( - { assert workflow.success }, { assert snapshot( - workflow.trace.succeeded().size(), - removeNextflowVersion("${outputDir}/pipeline_info/nf_core_mag_software_mqc_versions.yml"), - ).match() - }, + workflow.trace.succeeded().size(), + removeNextflowVersion("${outputDir}/pipeline_info/nf_core_mag_software_mqc_versions.yml"), + ).match() }, { assert snapshot(stable_name_qc, stable_path_qc ).match('qc') }, { assert snapshot(stable_name_assembly, stable_path_assembly).match('assembly') }, { assert snapshot(stable_name_binning, stable_path_binning ).match('binning') }, @@ -87,10 +86,12 @@ nextflow_pipeline { checkm2_diamond_results.collect { results -> results.text.readLines().size() }, ).match('checkm2_diamond_results') }, + // FASTA checks { assert megahit_contigs.collect { contigs -> path("${contigs}").fasta.size() > 0 }.every() }, { assert metabat2_bins.collect { contigs -> path("${contigs}").fasta.size() > 0 }.every() }, { assert metabat2_unbins.collect { contigs -> path("${contigs}").fasta.size() >= 0 }.every() }, + // Log checks { assert remove_phix_logs.collect { log -> log.readLines().last() ==~ /[0-9.]+% overall alignment rate/ diff --git a/tests/test_alternatives.nf.test.snap b/tests/test_alternatives.nf.test.snap index 5e51e2b79..82824d581 100644 --- a/tests/test_alternatives.nf.test.snap +++ b/tests/test_alternatives.nf.test.snap @@ -2,7 +2,7 @@ "checkm2_diamond_results": { "content": [ [ - 806 + 803 ] ], "meta": { @@ -13,16 +13,16 @@ }, "-profile test_alternatives": { "content": [ - 43, + 35, { "BIN_SUMMARY": { - "python": "3.10.6", - "pandas": "1.4.3" + "pandas": "1.4.3", + "python": "3.10.6" }, "BOWTIE2_ASSEMBLY_ALIGN": { "bowtie2": "2.4.2", - "samtools": 1.11, - "pigz": "2.3.4" + "pigz": "2.3.4", + "samtools": 1.11 }, "BOWTIE2_ASSEMBLY_BUILD": { "bowtie2": "2.4.2" @@ -43,10 +43,13 @@ "checkm2": "1.1.0" }, "CONCAT_BUSCO_TSV": { - "csvtk": "0.31.0" + "qsv": "5.1.0" }, "CONCAT_CHECKM2_TSV": { - "csvtk": "0.31.0" + "qsv": "5.1.0" + }, + "CONCAT_TIARA_TSV": { + "qsv": "5.1.0" }, "DASTOOL_FASTATOCONTIG2BIN_TIARA": { "dastool": "1.1.7" @@ -64,17 +67,17 @@ "gunzip": 1.13 }, "MAG_DEPTHS": { - "python": "3.6.7", - "pandas": "1.1.5" + "pandas": "1.1.5", + "python": "3.6.7" }, "MAG_DEPTHS_PLOT": { - "python": "3.9.6", "pandas": "1.3.0", + "python": "3.9.6", "seaborn": "0.11.0" }, "MAG_DEPTHS_SUMMARY": { - "python": "3.10.6", - "pandas": "1.4.3" + "pandas": "1.4.3", + "python": "3.10.6" }, "MEGAHIT": { "megahit": "1.2.9" @@ -85,16 +88,20 @@ "METABAT2_METABAT2": { "metabat2": 2.17 }, + "POOL_SHORT_READS": { + "cat": 9.5 + }, "SEQKIT_STATS": { "seqkit": "2.9.0" }, "SPLIT_FASTA": { - "python": "3.6.7", "biopython": "1.7.4", - "pandas": "1.1.5" + "pandas": "1.1.5", + "python": "3.6.7" }, - "TIARA_SUMMARY": { - "csvtk": "0.31.0" + "TIARA_CLASSIFY": { + "r-base": "4.1.3", + "r-tidyverse": "1.3.1" }, "TIARA_TIARA": { "tiara": "1.0.3" @@ -103,17 +110,15 @@ "trimmomatic": 0.39 }, "Workflow": { - "nf-core/mag": "v5.2.0" - }, - "r-base": "4.1.3", - "r-tidyverse": "1.3.1" + "nf-core/mag": "v5.3.0" + } } ], "meta": { "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-11-06T10:43:54.408735552" + "timestamp": "2025-11-27T11:32:28.488502608" }, "qc": { "content": [ @@ -145,18 +150,13 @@ "assembly": { "content": [ [ - "Assembly/MEGAHIT/MEGAHIT-test_minigut.contigs.fa.gz", - "Assembly/MEGAHIT/MEGAHIT-test_minigut.log", - "Assembly/MEGAHIT/MEGAHIT-test_minigut_sample2.contigs.fa.gz", - "Assembly/MEGAHIT/MEGAHIT-test_minigut_sample2.log", - "Assembly/MEGAHIT/QC/test_minigut/MEGAHIT-test_minigut-test_minigut_sample2.bowtie2.log", - "Assembly/MEGAHIT/QC/test_minigut/MEGAHIT-test_minigut.bowtie2.log", - "Assembly/MEGAHIT/QC/test_minigut_sample2/MEGAHIT-test_minigut_sample2-test_minigut.bowtie2.log", - "Assembly/MEGAHIT/QC/test_minigut_sample2/MEGAHIT-test_minigut_sample2.bowtie2.log" + "Assembly/MEGAHIT/MEGAHIT-group-0.contigs.fa.gz", + "Assembly/MEGAHIT/MEGAHIT-group-0.log", + "Assembly/MEGAHIT/QC/group-0/MEGAHIT-group-0-test_minigut.bowtie2.log", + "Assembly/MEGAHIT/QC/group-0/MEGAHIT-group-0-test_minigut_sample2.bowtie2.log" ], [ - "MEGAHIT-test_minigut.contigs.fa.gz:md5,281287b2e105d82cc9d2900c7f624769", - "MEGAHIT-test_minigut_sample2.contigs.fa.gz:md5,e88019689caed5802fe5596d94a38df8" + "MEGAHIT-group-0.contigs.fa.gz:md5,4b1c9360be95e596b87194b12a5db645" ] ], "meta": { @@ -168,99 +168,87 @@ "binning": { "content": [ [ - "GenomeBinning/MetaBAT2/bins/MEGAHIT-MetaBAT2-test_minigut.1.fa.gz", - "GenomeBinning/MetaBAT2/bins/MEGAHIT-MetaBAT2-test_minigut.2.fa.gz", - "GenomeBinning/MetaBAT2/discarded/MEGAHIT-MetaBAT2-test_minigut.lowDepth.fa.gz", - "GenomeBinning/MetaBAT2/discarded/MEGAHIT-MetaBAT2-test_minigut.tooShort.fa.gz", - "GenomeBinning/MetaBAT2/discarded/MEGAHIT-MetaBAT2-test_minigut_sample2.lowDepth.fa.gz", - "GenomeBinning/MetaBAT2/discarded/MEGAHIT-MetaBAT2-test_minigut_sample2.tooShort.fa.gz", - "GenomeBinning/MetaBAT2/unbinned/discarded/MEGAHIT-MetaBAT2-test_minigut.unbinned.pooled.fa.gz", - "GenomeBinning/MetaBAT2/unbinned/discarded/MEGAHIT-MetaBAT2-test_minigut.unbinned.remaining.fa.gz", - "GenomeBinning/MetaBAT2/unbinned/discarded/MEGAHIT-MetaBAT2-test_minigut_sample2.unbinned.pooled.fa.gz", - "GenomeBinning/MetaBAT2/unbinned/discarded/MEGAHIT-MetaBAT2-test_minigut_sample2.unbinned.remaining.fa.gz", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/short_summary.specific.bacteria_odb12.MEGAHIT-MetaBAT2-test_minigut.1.fa.json", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/short_summary.specific.bacteria_odb12.MEGAHIT-MetaBAT2-test_minigut.1.fa.txt", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/short_summary.specific.bacteria_odb12.MEGAHIT-MetaBAT2-test_minigut.2.fa.json", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/short_summary.specific.bacteria_odb12.MEGAHIT-MetaBAT2-test_minigut.2.fa.txt", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco.batch_summary.txt", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.1.fa/logs/bbtools_err.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.1.fa/logs/bbtools_out.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.1.fa/logs/hmmsearch_err.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.1.fa/logs/hmmsearch_out.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.1.fa/logs/miniprot_align_eukaryota_odb12_err.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.1.fa/logs/miniprot_align_eukaryota_odb12_out.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.1.fa/logs/miniprot_index_err.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.1.fa/logs/miniprot_index_out.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.1.fa/logs/prodigal_err.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.1.fa/logs/prodigal_out.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.1.fa/logs/sepp_err.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.1.fa/logs/sepp_out.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.1.fa/prodigal_output/.checkpoint", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.1.fa/prodigal_output/predicted_genes/predicted.faa", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.1.fa/prodigal_output/predicted_genes/predicted.fna", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.1.fa/tmp/refseq_db.faa", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.2.fa/logs/bbtools_err.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.2.fa/logs/bbtools_out.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.2.fa/logs/hmmsearch_err.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.2.fa/logs/hmmsearch_out.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.2.fa/logs/miniprot_align_eukaryota_odb12_err.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.2.fa/logs/miniprot_align_eukaryota_odb12_out.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.2.fa/logs/miniprot_index_err.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.2.fa/logs/miniprot_index_out.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.2.fa/logs/prodigal_err.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.2.fa/logs/prodigal_out.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.2.fa/logs/sepp_err.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.2.fa/logs/sepp_out.log", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.2.fa/prodigal_output/.checkpoint", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.2.fa/prodigal_output/predicted_genes/predicted.faa", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.2.fa/prodigal_output/predicted_genes/predicted.fna", - "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-test_minigut/test_minigut-auto-busco/MEGAHIT-MetaBAT2-test_minigut.2.fa/tmp/refseq_db.faa", - "GenomeBinning/QC/CheckM2/MEGAHIT-MetaBAT2-prokarya-unrefined-test_minigut/checkm2.log", - "GenomeBinning/QC/CheckM2/MEGAHIT-MetaBAT2-prokarya-unrefined-test_minigut/diamond_output/DIAMOND_RESULTS.tsv", - "GenomeBinning/QC/CheckM2/MEGAHIT-MetaBAT2-prokarya-unrefined-test_minigut/protein_files/MEGAHIT-MetaBAT2-test_minigut.1.faa", - "GenomeBinning/QC/CheckM2/MEGAHIT-MetaBAT2-prokarya-unrefined-test_minigut/protein_files/MEGAHIT-MetaBAT2-test_minigut.2.faa", - "GenomeBinning/QC/CheckM2/MEGAHIT-MetaBAT2-prokarya-unrefined-test_minigut/quality_report.tsv", - "GenomeBinning/QC/CheckM2/MEGAHIT-MetaBAT2-prokarya-unrefined-test_minigut_checkm2_report.tsv", + "GenomeBinning/MetaBAT2/bins/MEGAHIT-MetaBAT2-group-0.1.fa.gz", + "GenomeBinning/MetaBAT2/bins/MEGAHIT-MetaBAT2-group-0.2.fa.gz", + "GenomeBinning/MetaBAT2/discarded/MEGAHIT-MetaBAT2-group-0.lowDepth.fa.gz", + "GenomeBinning/MetaBAT2/discarded/MEGAHIT-MetaBAT2-group-0.tooShort.fa.gz", + "GenomeBinning/MetaBAT2/unbinned/discarded/MEGAHIT-MetaBAT2-group-0.unbinned.pooled.fa.gz", + "GenomeBinning/MetaBAT2/unbinned/discarded/MEGAHIT-MetaBAT2-group-0.unbinned.remaining.fa.gz", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco.batch_summary.txt", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.1.fa/logs/bbtools_err.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.1.fa/logs/bbtools_out.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.1.fa/logs/hmmsearch_err.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.1.fa/logs/hmmsearch_out.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.1.fa/logs/miniprot_align_eukaryota_odb12_err.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.1.fa/logs/miniprot_align_eukaryota_odb12_out.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.1.fa/logs/miniprot_index_err.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.1.fa/logs/miniprot_index_out.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.1.fa/logs/prodigal_err.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.1.fa/logs/prodigal_out.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.1.fa/logs/sepp_err.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.1.fa/logs/sepp_out.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.1.fa/prodigal_output/.checkpoint", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.1.fa/prodigal_output/predicted_genes/predicted.faa", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.1.fa/prodigal_output/predicted_genes/predicted.fna", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.1.fa/tmp/refseq_db.faa", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.2.fa/logs/bbtools_err.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.2.fa/logs/bbtools_out.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.2.fa/logs/hmmsearch_err.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.2.fa/logs/hmmsearch_out.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.2.fa/logs/miniprot_align_eukaryota_odb12_err.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.2.fa/logs/miniprot_align_eukaryota_odb12_out.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.2.fa/logs/miniprot_index_err.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.2.fa/logs/miniprot_index_out.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.2.fa/logs/prodigal_err.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.2.fa/logs/prodigal_out.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.2.fa/logs/sepp_err.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.2.fa/logs/sepp_out.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.2.fa/prodigal_output/.checkpoint", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.2.fa/prodigal_output/predicted_genes/predicted.faa", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.2.fa/prodigal_output/predicted_genes/predicted.fna", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/group-0-auto-busco/MEGAHIT-MetaBAT2-group-0.2.fa/tmp/refseq_db.faa", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/short_summary.specific.bacteria_odb12.MEGAHIT-MetaBAT2-group-0.1.fa.json", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/short_summary.specific.bacteria_odb12.MEGAHIT-MetaBAT2-group-0.1.fa.txt", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/short_summary.specific.bacteria_odb12.MEGAHIT-MetaBAT2-group-0.2.fa.json", + "GenomeBinning/QC/BUSCO/MEGAHIT-MetaBAT2-group-0/short_summary.specific.bacteria_odb12.MEGAHIT-MetaBAT2-group-0.2.fa.txt", + "GenomeBinning/QC/CheckM2/MEGAHIT-MetaBAT2-prokarya-unrefined-group-0/checkm2.log", + "GenomeBinning/QC/CheckM2/MEGAHIT-MetaBAT2-prokarya-unrefined-group-0/diamond_output/DIAMOND_RESULTS.tsv", + "GenomeBinning/QC/CheckM2/MEGAHIT-MetaBAT2-prokarya-unrefined-group-0/protein_files/MEGAHIT-MetaBAT2-group-0.1.faa", + "GenomeBinning/QC/CheckM2/MEGAHIT-MetaBAT2-prokarya-unrefined-group-0/protein_files/MEGAHIT-MetaBAT2-group-0.2.faa", + "GenomeBinning/QC/CheckM2/MEGAHIT-MetaBAT2-prokarya-unrefined-group-0/quality_report.tsv", + "GenomeBinning/QC/CheckM2/MEGAHIT-MetaBAT2-prokarya-unrefined-group-0_checkm2_report.tsv", "GenomeBinning/QC/busco_summary.tsv", "GenomeBinning/QC/checkm2_summary.tsv", "GenomeBinning/Tiara/tiara_summary.tsv", "GenomeBinning/bin_summary.tsv", - "GenomeBinning/depths/bins/MEGAHIT-MetaBAT2-test_minigut-binDepths.heatmap.png", + "GenomeBinning/depths/bins/MEGAHIT-MetaBAT2-group-0-binDepths.heatmap.png", "GenomeBinning/depths/bins/bin_depths_summary.tsv", - "GenomeBinning/depths/contigs/MEGAHIT-test_minigut-depth.txt.gz", - "GenomeBinning/depths/contigs/MEGAHIT-test_minigut_sample2-depth.txt.gz" + "GenomeBinning/depths/contigs/MEGAHIT-group-0-depth.txt.gz" ], [ - "MEGAHIT-MetaBAT2-test_minigut.1.fa.gz:md5,44b77f8e1a059011e45896cb80dbf361", - "MEGAHIT-MetaBAT2-test_minigut.2.fa.gz:md5,10fb6fc82494beda78e6b1c6c2d4d8d2", - "MEGAHIT-MetaBAT2-test_minigut.lowDepth.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e", - "MEGAHIT-MetaBAT2-test_minigut.tooShort.fa.gz:md5,4b65a9dd07c9b4bcdc828c104a7df36d", - "MEGAHIT-MetaBAT2-test_minigut_sample2.lowDepth.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e", - "MEGAHIT-MetaBAT2-test_minigut_sample2.tooShort.fa.gz:md5,f9479e7fb34586a2892cd7bc323d414a", - "MEGAHIT-MetaBAT2-test_minigut.unbinned.remaining.fa.gz:md5,7ac001a38113812061f8ef5c94e3f579", - "MEGAHIT-MetaBAT2-test_minigut_sample2.unbinned.remaining.fa.gz:md5,e1a969d6e292e10a81ef4236907984a9", - "predicted.faa:md5,8e0d0014fb0a1e56fa8b8f47e20f2bcf", - "predicted.fna:md5,e4dc769d029b05cfe724cfa5ef214f10", + "MEGAHIT-MetaBAT2-group-0.1.fa.gz:md5,03980cd3f96ecbd947bec62aee97d507", + "MEGAHIT-MetaBAT2-group-0.2.fa.gz:md5,a5479825817e5ebe4735bbcd428345eb", + "MEGAHIT-MetaBAT2-group-0.lowDepth.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "MEGAHIT-MetaBAT2-group-0.tooShort.fa.gz:md5,90667cb1a77c0bc39e7e8441bfdf2305", + "MEGAHIT-MetaBAT2-group-0.unbinned.remaining.fa.gz:md5,e694b456ad5d1b3bc1b7af499090d0e6", "refseq_db.faa:md5,0d53f0a1964cc202e99f4851839273a3", - "predicted.faa:md5,5e5160a0e0af28ccccd6459e887269ee", - "predicted.fna:md5,df236064ad2e0c699c029a89a6267bcf", "refseq_db.faa:md5,0d53f0a1964cc202e99f4851839273a3", - "MEGAHIT-MetaBAT2-test_minigut.1.faa:md5,ba436cbba64ce111f228da1e2daac642", - "MEGAHIT-MetaBAT2-test_minigut.2.faa:md5,577adc1aa1ebd51fed46f726ad90d9b3", - "quality_report.tsv:md5,9365828b072487af69333ecb35353255", - "MEGAHIT-MetaBAT2-prokarya-unrefined-test_minigut_checkm2_report.tsv:md5,9365828b072487af69333ecb35353255", - "checkm2_summary.tsv:md5,9365828b072487af69333ecb35353255", - "tiara_summary.tsv:md5,6f97d6016921205c7913e54850b52dad", - "bin_summary.tsv:md5,654c1d572f0709145cf87b5480007555", - "bin_depths_summary.tsv:md5,ef8b1a8aad59ad4f56515d0fb7045a6d" + "MEGAHIT-MetaBAT2-group-0.1.faa:md5,70451fa3e39837f5d25b8116e5d03500", + "MEGAHIT-MetaBAT2-group-0.2.faa:md5,903b0e2ed9a0ff98c1c9af09b16ae527", + "quality_report.tsv:md5,ec01903b7f8a7203856a35a7bd2d4c34", + "MEGAHIT-MetaBAT2-prokarya-unrefined-group-0_checkm2_report.tsv:md5,ec01903b7f8a7203856a35a7bd2d4c34", + "checkm2_summary.tsv:md5,ec01903b7f8a7203856a35a7bd2d4c34", + "tiara_summary.tsv:md5,4cbfb0fd90ba48dc33d75d10c1eddb17", + "bin_summary.tsv:md5,cf879345b96d29b5b8584795504b81cf", + "bin_depths_summary.tsv:md5,a73f2fc180a2c52038c88fbbfa6a95c3" ] ], "meta": { "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-11-06T10:43:54.81496257" + "timestamp": "2025-11-28T14:15:43.756748108" }, "multiqc": { "content": [ @@ -382,9 +370,9 @@ "multiqc/multiqc_report.html" ], [ - "bowtie2_pe_plot.yaml:md5,17542811418a01c5c4497e77626bad91", - "busco_plot_bacteria_odb12.yaml:md5,ced22c5419b162fcdf74fd7d1c24957c", - "checkm2-first-table.yaml:md5,d138b272a46411d66b643a7cdabf4511", + "bowtie2_pe_plot.yaml:md5,9fa09c02794c68558cc04fb9568cc8c4", + "busco_plot_bacteria_odb12.yaml:md5,fe957f6a2657f22027eab7c93a4db021", + "checkm2-first-table.yaml:md5,0efa2d81e6b4dea3218aa0fbc12d853e", "fastqc-1-status-check-heatmap.yaml:md5,30f0c0bbefd3e9c549116c8b7cc2ac25", "fastqc-1_per_base_n_content_plot.yaml:md5,f43001053b544ba5585040c18859a098", "fastqc-1_per_base_sequence_quality_plot.yaml:md5,48276488936fd9c2e52b53a58dae0ffb", @@ -403,13 +391,13 @@ "fastqc_sequence_duplication_levels_plot.yaml:md5,73719c3f3fa610204a42cd7155d73db1", "fastqc_sequence_length_distribution_plot.yaml:md5,78c762e20322ee4d63f869961186c15c", "multiqc_bowtie2.yaml:md5,6607915ea98168dbcad83cda2ec464dc", - "multiqc_bowtie2_bowtie2-2.yaml:md5,294c48fecbf1bdc5030550552a32497d", - "multiqc_busco.yaml:md5,d5cf765007a8a9398763d24d90abc12a", - "multiqc_checkm2.yaml:md5,9b48d1b569bae456409527610b56a2a0", + "multiqc_bowtie2_bowtie2-2.yaml:md5,2a389e80ea3e2afb772fe4cd2779d0b2", + "multiqc_busco.yaml:md5,c8778357e4d7c966e6360ba024bea55b", + "multiqc_checkm2.yaml:md5,8f23880e10a57ad0df6434e2f479c85b", "multiqc_citations.yaml:md5,50440bb766620557f852bbd53357a098", "multiqc_fastqc.yaml:md5,f50da8bfd062b9399911ba19b34831db", "multiqc_fastqc_fastqc-1.yaml:md5,4c2c5a5e7b370b0668c1360b7927d0a8", - "multiqc_general_stats.yaml:md5,c9c7241f81748994f004b6f8b4a0b733", + "multiqc_general_stats.yaml:md5,423576890bb5fb21e92e83ac43da79d3", "multiqc_trimmomatic.yaml:md5,d4aaff3725c28801ae0577d97c2f9b30", "trimmomatic_plot.yaml:md5,9557cd587ace0a93912179cb0deafe3b" ] @@ -418,6 +406,6 @@ "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-11-06T10:43:55.256175449" + "timestamp": "2025-12-01T14:43:08.256707892" } } \ No newline at end of file diff --git a/tests/test_assembly_input.nf.test b/tests/test_assembly_input.nf.test index bc150de73..7cda5b3d2 100644 --- a/tests/test_assembly_input.nf.test +++ b/tests/test_assembly_input.nf.test @@ -10,11 +10,70 @@ nextflow_pipeline { when { params { - outdir = "$outputDir" + outdir = "${outputDir}" } } then { + // Output dir: Assembly + def stable_name_assembly = getAllFilesFromDir( + params.outdir, include: ['Assembly/**'], relative: true, includeDir: false + ) + def bowtie2_logs = getAllFilesFromDir( + params.outdir, include: ['Assembly/{SPAdes,MEGAHIT}/QC/*/*.bowtie2.log'] + ) + + // Output dir: Annotation + def stable_name_annotation = getAllFilesFromDir( + params.outdir, include: ['Annotation/**'], relative: true, includeDir: false + ) + def stable_path_annotation = getAllFilesFromDir( + params.outdir, include: ['Annotation/**'], ignoreFile: 'tests/.nftignore' + ) + + // Output directory: GenomeBinning + def stable_name_binning = getAllFilesFromDir( + params.outdir, + include: ['GenomeBinning/**'], + ignore: ['GenomeBinning/QC/BUSCO/**/{logs,prodigal_output,busco_sequences}/**'], + relative: true, + includeDir: false + ) + def stable_path_binning = getAllFilesFromDir( + params.outdir, include: ['GenomeBinning/**'], ignoreFile: 'tests/.nftignore' + ) + def concoct_logs = getAllFilesFromDir( + params.outdir, include: ['GenomeBinning/CONCOCT/stats/*_log.txt'] + ) + def busco_logs = getAllFilesFromDir( + params.outdir, include: ['GenomeBinning/QC/BUSCO/*/*-busco.log'] + ) + def dastool_logs = getAllFilesFromDir( + params.outdir, include: ['GenomeBinning/DASTool/*.log'] + ) + def concoct_bins = getAllFilesFromDir( + params.outdir, include: ['GenomeBinning/CONCOCT/bins/*.fa.gz'] + ) + def maxbin2_bins = getAllFilesFromDir( + params.outdir, include: ['GenomeBinning/MaxBin2/bins/*.fa.gz'] + ) + def maxbin2_unbins = getAllFilesFromDir( + params.outdir, include: ['GenomeBinning/MaxBin2/{discarded,unbinned/*}/*.fa.gz'] + ) + def metabat2_bins = getAllFilesFromDir( + params.outdir, include: ['GenomeBinning/MetaBAT2/bins/*.fa.gz'] + ) + def metabat2_unbins = getAllFilesFromDir( + params.outdir, include: ['GenomeBinning/MetaBAT2/{discarded,unbinned/*}/*.fa.gz'] + ) + def dastool_bins = getAllFilesFromDir( + params.outdir, include: ['GenomeBinning/DASTool/bins/*.fa'] + ) + def dastool_unbins = getAllFilesFromDir( + params.outdir, include: ['GenomeBinning/DASTool/unbinned/*.fa'] + ) + def busco_summary = "${params.outdir}/GenomeBinning/QC/busco_summary.tsv" + def bin_summary = "${params.outdir}/GenomeBinning/bin_summary.tsv" // Output directory: multiqc def stable_name_multiqc = getAllFilesFromDir( @@ -27,12 +86,49 @@ nextflow_pipeline { assert workflow.success assertAll( { assert snapshot( - // Number of successful tasks workflow.trace.succeeded().size(), - // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions - removeNextflowVersion("$outputDir/pipeline_info/nf_core_mag_software_mqc_versions.yml"), + removeNextflowVersion("${outputDir}/pipeline_info/nf_core_mag_software_mqc_versions.yml"), ).match() }, + { assert snapshot(stable_name_assembly).match('assembly') }, + { assert snapshot(stable_name_annotation, stable_path_annotation).match('annotation') }, + { assert snapshot(stable_name_binning, stable_path_binning ).match('binning') }, { assert snapshot(stable_name_multiqc, stable_path_multiqc).match('multiqc') }, + + // FASTA checks + { assert concoct_bins.collect { file -> path("${file}").fasta.size() > 0 }.every() }, + { assert maxbin2_bins.collect { file -> path("${file}").fasta.size() > 0 }.every() }, + { assert maxbin2_unbins.collect { file -> path("${file}").fasta.size() >= 0 }.every() }, + { assert metabat2_bins.collect { file -> path("${file}").fasta.size() > 0 }.every() }, + { assert metabat2_unbins.collect { file -> path("${file}").fasta.size() >= 0 }.every() }, + { assert dastool_bins.collect { file -> path("${file}").fasta.size() > 0 }.every() }, + { assert dastool_unbins.collect { file -> path("${file}").fasta.size() >= 0 }.every() }, + + // CSV checks + { assert path(bin_summary).csv(sep: "\t").rowCount > 0 }, + { assert path(bin_summary).csv(sep: "\t").rowCount == dastool_bins.size() }, + { assert path(busco_summary).csv(sep: "\t").rowCount > 0 }, + { assert snapshot( + path(bin_summary).csv(sep: "\t").rowCount, + path(busco_summary).csv(sep: "\t").rowCount, + ).match("csv-rows") }, + + // Log checks + { assert bowtie2_logs.collect { + log -> log.readLines().last() ==~ /[0-9.]+% overall alignment rate/ + }.every() + }, + { assert concoct_logs.collect { + log -> log.readLines().last().contains('CONCOCT Finished') + }.every() + }, + { assert busco_logs.collect { + log -> log.readLines().any { it.contains('BUSCO analysis done.') } + }.every() + }, + { assert dastool_logs.collect { + log -> log.readLines().last().contains("Writing bins") + }.every() + }, ) } } diff --git a/tests/test_assembly_input.nf.test.snap b/tests/test_assembly_input.nf.test.snap index 013b7cd60..d0d5399ff 100644 --- a/tests/test_assembly_input.nf.test.snap +++ b/tests/test_assembly_input.nf.test.snap @@ -1,19 +1,83 @@ { + "annotation": { + "content": [ + [ + "Annotation/MetaEuk/MEGAHIT/MEGAHIT-MetaBAT2Refined-test_minigut.1/MEGAHIT-MetaBAT2Refined-test_minigut.1.codon.fas", + "Annotation/MetaEuk/MEGAHIT/MEGAHIT-MetaBAT2Refined-test_minigut.1/MEGAHIT-MetaBAT2Refined-test_minigut.1.fas", + "Annotation/MetaEuk/MEGAHIT/MEGAHIT-MetaBAT2Refined-test_minigut.1/MEGAHIT-MetaBAT2Refined-test_minigut.1.gff", + "Annotation/MetaEuk/MEGAHIT/MEGAHIT-MetaBAT2Refined-test_minigut.1/MEGAHIT-MetaBAT2Refined-test_minigut.1.headersMap.tsv", + "Annotation/MetaEuk/MEGAHIT/MEGAHIT-MetaBAT2Refined-test_minigut.2/MEGAHIT-MetaBAT2Refined-test_minigut.2.codon.fas", + "Annotation/MetaEuk/MEGAHIT/MEGAHIT-MetaBAT2Refined-test_minigut.2/MEGAHIT-MetaBAT2Refined-test_minigut.2.fas", + "Annotation/MetaEuk/MEGAHIT/MEGAHIT-MetaBAT2Refined-test_minigut.2/MEGAHIT-MetaBAT2Refined-test_minigut.2.gff", + "Annotation/MetaEuk/MEGAHIT/MEGAHIT-MetaBAT2Refined-test_minigut.2/MEGAHIT-MetaBAT2Refined-test_minigut.2.headersMap.tsv", + "Annotation/MetaEuk/SPAdes/SPAdes-CONCOCTRefined-test_minigut.7/SPAdes-CONCOCTRefined-test_minigut.7.codon.fas", + "Annotation/MetaEuk/SPAdes/SPAdes-CONCOCTRefined-test_minigut.7/SPAdes-CONCOCTRefined-test_minigut.7.fas", + "Annotation/MetaEuk/SPAdes/SPAdes-CONCOCTRefined-test_minigut.7/SPAdes-CONCOCTRefined-test_minigut.7.gff", + "Annotation/MetaEuk/SPAdes/SPAdes-CONCOCTRefined-test_minigut.7/SPAdes-CONCOCTRefined-test_minigut.7.headersMap.tsv", + "Annotation/MetaEuk/SPAdes/SPAdes-MaxBin2Refined-test_minigut.001_sub/SPAdes-MaxBin2Refined-test_minigut.001_sub.codon.fas", + "Annotation/MetaEuk/SPAdes/SPAdes-MaxBin2Refined-test_minigut.001_sub/SPAdes-MaxBin2Refined-test_minigut.001_sub.fas", + "Annotation/MetaEuk/SPAdes/SPAdes-MaxBin2Refined-test_minigut.001_sub/SPAdes-MaxBin2Refined-test_minigut.001_sub.gff", + "Annotation/MetaEuk/SPAdes/SPAdes-MaxBin2Refined-test_minigut.001_sub/SPAdes-MaxBin2Refined-test_minigut.001_sub.headersMap.tsv" + ], + [ + "MEGAHIT-MetaBAT2Refined-test_minigut.1.codon.fas:md5,d41d8cd98f00b204e9800998ecf8427e", + "MEGAHIT-MetaBAT2Refined-test_minigut.1.fas:md5,d41d8cd98f00b204e9800998ecf8427e", + "MEGAHIT-MetaBAT2Refined-test_minigut.1.gff:md5,d41d8cd98f00b204e9800998ecf8427e", + "MEGAHIT-MetaBAT2Refined-test_minigut.1.headersMap.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "MEGAHIT-MetaBAT2Refined-test_minigut.2.codon.fas:md5,d41d8cd98f00b204e9800998ecf8427e", + "MEGAHIT-MetaBAT2Refined-test_minigut.2.fas:md5,d41d8cd98f00b204e9800998ecf8427e", + "MEGAHIT-MetaBAT2Refined-test_minigut.2.gff:md5,d41d8cd98f00b204e9800998ecf8427e", + "MEGAHIT-MetaBAT2Refined-test_minigut.2.headersMap.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "SPAdes-CONCOCTRefined-test_minigut.7.codon.fas:md5,d41d8cd98f00b204e9800998ecf8427e", + "SPAdes-CONCOCTRefined-test_minigut.7.fas:md5,d41d8cd98f00b204e9800998ecf8427e", + "SPAdes-CONCOCTRefined-test_minigut.7.gff:md5,d41d8cd98f00b204e9800998ecf8427e", + "SPAdes-CONCOCTRefined-test_minigut.7.headersMap.tsv:md5,d41d8cd98f00b204e9800998ecf8427e", + "SPAdes-MaxBin2Refined-test_minigut.001_sub.codon.fas:md5,d41d8cd98f00b204e9800998ecf8427e", + "SPAdes-MaxBin2Refined-test_minigut.001_sub.fas:md5,d41d8cd98f00b204e9800998ecf8427e", + "SPAdes-MaxBin2Refined-test_minigut.001_sub.gff:md5,d41d8cd98f00b204e9800998ecf8427e", + "SPAdes-MaxBin2Refined-test_minigut.001_sub.headersMap.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2025-11-20T10:08:12.587500203" + }, + "assembly": { + "content": [ + [ + "Assembly/MEGAHIT/QC/test_minigut/MEGAHIT-test_minigut-test_minigut_sample2.bowtie2.log", + "Assembly/MEGAHIT/QC/test_minigut/MEGAHIT-test_minigut.bowtie2.log", + "Assembly/MEGAHIT/QC/test_minigut_sample2/MEGAHIT-test_minigut_sample2-test_minigut.bowtie2.log", + "Assembly/MEGAHIT/QC/test_minigut_sample2/MEGAHIT-test_minigut_sample2.bowtie2.log", + "Assembly/SPAdes/QC/test_minigut/SPAdes-test_minigut-test_minigut_sample2.bowtie2.log", + "Assembly/SPAdes/QC/test_minigut/SPAdes-test_minigut.bowtie2.log", + "Assembly/SPAdes/QC/test_minigut_sample2/SPAdes-test_minigut_sample2-test_minigut.bowtie2.log", + "Assembly/SPAdes/QC/test_minigut_sample2/SPAdes-test_minigut_sample2.bowtie2.log" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.10.0" + }, + "timestamp": "2025-11-03T13:09:25.820313196" + }, "-profile assembly_input": { "content": [ - 193, + 203, { "ADJUST_MAXBIN2_EXT": { "coreutils": 9.5 }, "BIN_SUMMARY": { - "python": "3.10.6", - "pandas": "1.4.3" + "pandas": "1.4.3", + "python": "3.10.6" }, "BOWTIE2_ASSEMBLY_ALIGN": { "bowtie2": "2.4.2", - "samtools": 1.11, - "pigz": "2.3.4" + "pigz": "2.3.4", + "samtools": 1.11 }, "BOWTIE2_ASSEMBLY_BUILD": { "bowtie2": "2.4.2" @@ -25,7 +89,7 @@ "untar": 1.34 }, "CONCAT_BUSCO_TSV": { - "csvtk": "0.31.0" + "qsv": "5.1.0" }, "CONCOCT_CONCOCT": { "concoct": "1.1.0" @@ -64,17 +128,17 @@ "gunzip": 1.13 }, "MAG_DEPTHS": { - "python": "3.6.7", - "pandas": "1.1.5" + "pandas": "1.1.5", + "python": "3.6.7" }, "MAG_DEPTHS_PLOT": { - "python": "3.9.6", "pandas": "1.3.0", + "python": "3.9.6", "seaborn": "0.11.0" }, "MAG_DEPTHS_SUMMARY": { - "python": "3.10.6", - "pandas": "1.4.3" + "pandas": "1.4.3", + "python": "3.10.6" }, "MAXBIN2": { "maxbin2": "2.2.7" @@ -89,7 +153,7 @@ "metaeuk": "6.a5d39d9" }, "MMSEQS_DATABASES": { - "mmseqs": "17.b804f" + "mmseqs": "18.8cc5c" }, "RENAME_POSTDASTOOL": { "coreutils": 9.5 @@ -97,16 +161,19 @@ "RENAME_PREDASTOOL": { "coreutils": 9.5 }, + "SEMIBIN_SINGLEEASYBIN": { + "SemiBin": "2.2.0" + }, "SEQKIT_STATS": { "seqkit": "2.9.0" }, "SPLIT_FASTA": { - "python": "3.6.7", "biopython": "1.7.4", - "pandas": "1.1.5" + "pandas": "1.1.5", + "python": "3.6.7" }, "Workflow": { - "nf-core/mag": "v5.2.0" + "nf-core/mag": "v5.3.0" } } ], @@ -114,7 +181,406 @@ "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-11-04T08:38:41.85178164" + "timestamp": "2025-11-27T11:31:36.634994563" + }, + "binning": { + "content": [ + [ + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_0.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_1.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_10.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_11.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_12.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_13.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_14.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_15.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_16.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_17.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_18.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_19.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_2.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_20.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_21.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_22.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_23.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_24.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_25.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_26.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_27.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_28.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_29.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_3.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_30.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_31.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_32.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_33.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_34.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_35.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_36.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_37.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_38.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_39.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_4.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_5.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_6.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_7.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_8.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_9.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_sample2_0.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_sample2_1.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_sample2_2.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_sample2_3.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_sample2_4.fa.gz", + "GenomeBinning/CONCOCT/bins/MEGAHIT-CONCOCT-test_minigut_sample2_5.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_0.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_1.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_10.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_11.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_12.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_13.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_14.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_15.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_16.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_18.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_19.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_2.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_20.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_21.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_22.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_23.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_24.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_25.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_26.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_27.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_28.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_29.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_3.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_30.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_32.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_4.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_5.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_6.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_7.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_8.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_9.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_sample2_0.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_sample2_1.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_sample2_10.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_sample2_11.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_sample2_2.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_sample2_3.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_sample2_4.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_sample2_5.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_sample2_6.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_sample2_7.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_sample2_8.fa.gz", + "GenomeBinning/CONCOCT/bins/SPAdes-CONCOCT-test_minigut_sample2_9.fa.gz", + "GenomeBinning/CONCOCT/stats/MEGAHIT-CONCOCT-test_minigut.csv", + "GenomeBinning/CONCOCT/stats/MEGAHIT-CONCOCT-test_minigut.tsv", + "GenomeBinning/CONCOCT/stats/MEGAHIT-CONCOCT-test_minigut_PCA_components_data_gt1000.csv", + "GenomeBinning/CONCOCT/stats/MEGAHIT-CONCOCT-test_minigut_PCA_transformed_data_gt1000.csv", + "GenomeBinning/CONCOCT/stats/MEGAHIT-CONCOCT-test_minigut_args.txt", + "GenomeBinning/CONCOCT/stats/MEGAHIT-CONCOCT-test_minigut_clustering_gt1000.csv", + "GenomeBinning/CONCOCT/stats/MEGAHIT-CONCOCT-test_minigut_log.txt", + "GenomeBinning/CONCOCT/stats/MEGAHIT-CONCOCT-test_minigut_original_data_gt1000.csv", + "GenomeBinning/CONCOCT/stats/MEGAHIT-CONCOCT-test_minigut_sample2.csv", + "GenomeBinning/CONCOCT/stats/MEGAHIT-CONCOCT-test_minigut_sample2.tsv", + "GenomeBinning/CONCOCT/stats/MEGAHIT-CONCOCT-test_minigut_sample2_PCA_components_data_gt1000.csv", + "GenomeBinning/CONCOCT/stats/MEGAHIT-CONCOCT-test_minigut_sample2_PCA_transformed_data_gt1000.csv", + "GenomeBinning/CONCOCT/stats/MEGAHIT-CONCOCT-test_minigut_sample2_args.txt", + "GenomeBinning/CONCOCT/stats/MEGAHIT-CONCOCT-test_minigut_sample2_clustering_gt1000.csv", + "GenomeBinning/CONCOCT/stats/MEGAHIT-CONCOCT-test_minigut_sample2_log.txt", + "GenomeBinning/CONCOCT/stats/MEGAHIT-CONCOCT-test_minigut_sample2_original_data_gt1000.csv", + "GenomeBinning/CONCOCT/stats/SPAdes-CONCOCT-test_minigut.csv", + "GenomeBinning/CONCOCT/stats/SPAdes-CONCOCT-test_minigut.tsv", + "GenomeBinning/CONCOCT/stats/SPAdes-CONCOCT-test_minigut_PCA_components_data_gt1000.csv", + "GenomeBinning/CONCOCT/stats/SPAdes-CONCOCT-test_minigut_PCA_transformed_data_gt1000.csv", + "GenomeBinning/CONCOCT/stats/SPAdes-CONCOCT-test_minigut_args.txt", + "GenomeBinning/CONCOCT/stats/SPAdes-CONCOCT-test_minigut_clustering_gt1000.csv", + "GenomeBinning/CONCOCT/stats/SPAdes-CONCOCT-test_minigut_log.txt", + "GenomeBinning/CONCOCT/stats/SPAdes-CONCOCT-test_minigut_original_data_gt1000.csv", + "GenomeBinning/CONCOCT/stats/SPAdes-CONCOCT-test_minigut_sample2.csv", + "GenomeBinning/CONCOCT/stats/SPAdes-CONCOCT-test_minigut_sample2.tsv", + "GenomeBinning/CONCOCT/stats/SPAdes-CONCOCT-test_minigut_sample2_PCA_components_data_gt1000.csv", + "GenomeBinning/CONCOCT/stats/SPAdes-CONCOCT-test_minigut_sample2_PCA_transformed_data_gt1000.csv", + "GenomeBinning/CONCOCT/stats/SPAdes-CONCOCT-test_minigut_sample2_args.txt", + "GenomeBinning/CONCOCT/stats/SPAdes-CONCOCT-test_minigut_sample2_clustering_gt1000.csv", + "GenomeBinning/CONCOCT/stats/SPAdes-CONCOCT-test_minigut_sample2_log.txt", + "GenomeBinning/CONCOCT/stats/SPAdes-CONCOCT-test_minigut_sample2_original_data_gt1000.csv", + "GenomeBinning/DASTool/MEGAHIT-DASTool-test_minigut.seqlength", + "GenomeBinning/DASTool/MEGAHIT-DASTool-test_minigut_DASTool.log", + "GenomeBinning/DASTool/MEGAHIT-DASTool-test_minigut_DASTool_contig2bin.tsv", + "GenomeBinning/DASTool/MEGAHIT-DASTool-test_minigut_DASTool_summary.tsv", + "GenomeBinning/DASTool/MEGAHIT-DASTool-test_minigut_allBins.eval", + "GenomeBinning/DASTool/SPAdes-DASTool-test_minigut.seqlength", + "GenomeBinning/DASTool/SPAdes-DASTool-test_minigut_DASTool.log", + "GenomeBinning/DASTool/SPAdes-DASTool-test_minigut_DASTool_contig2bin.tsv", + "GenomeBinning/DASTool/SPAdes-DASTool-test_minigut_DASTool_summary.tsv", + "GenomeBinning/DASTool/SPAdes-DASTool-test_minigut_allBins.eval", + "GenomeBinning/DASTool/bins/MEGAHIT-MetaBAT2Refined-test_minigut.1.fa", + "GenomeBinning/DASTool/bins/MEGAHIT-MetaBAT2Refined-test_minigut.2.fa", + "GenomeBinning/DASTool/bins/SPAdes-CONCOCTRefined-test_minigut.7.fa", + "GenomeBinning/DASTool/bins/SPAdes-MaxBin2Refined-test_minigut.001_sub.fa", + "GenomeBinning/DASTool/unbinned/MEGAHIT-DASToolUnbinned-test_minigut.fa", + "GenomeBinning/DASTool/unbinned/SPAdes-DASToolUnbinned-test_minigut.fa", + "GenomeBinning/MaxBin2/MEGAHIT-MaxBin2-test_minigut.abundance", + "GenomeBinning/MaxBin2/MEGAHIT-MaxBin2-test_minigut.summary", + "GenomeBinning/MaxBin2/SPAdes-MaxBin2-test_minigut.abundance", + "GenomeBinning/MaxBin2/SPAdes-MaxBin2-test_minigut.summary", + "GenomeBinning/MaxBin2/bins/MEGAHIT-MaxBin2-test_minigut.001.fa.gz", + "GenomeBinning/MaxBin2/bins/MEGAHIT-MaxBin2-test_minigut.002.fa.gz", + "GenomeBinning/MaxBin2/bins/SPAdes-MaxBin2-test_minigut.001.fa.gz", + "GenomeBinning/MaxBin2/bins/SPAdes-MaxBin2-test_minigut.002.fa.gz", + "GenomeBinning/MaxBin2/discarded/MEGAHIT-MaxBin2-test_minigut.tooshort.gz", + "GenomeBinning/MaxBin2/discarded/SPAdes-MaxBin2-test_minigut.tooshort.gz", + "GenomeBinning/MaxBin2/unbinned/discarded/MEGAHIT-MaxBin2-test_minigut.noclass.pooled.fa.gz", + "GenomeBinning/MaxBin2/unbinned/discarded/MEGAHIT-MaxBin2-test_minigut.noclass.remaining.fa.gz", + "GenomeBinning/MaxBin2/unbinned/discarded/SPAdes-MaxBin2-test_minigut.noclass.pooled.fa.gz", + "GenomeBinning/MaxBin2/unbinned/discarded/SPAdes-MaxBin2-test_minigut.noclass.remaining.fa.gz", + "GenomeBinning/MetaBAT2/bins/MEGAHIT-MetaBAT2-test_minigut.1.fa.gz", + "GenomeBinning/MetaBAT2/bins/MEGAHIT-MetaBAT2-test_minigut.2.fa.gz", + "GenomeBinning/MetaBAT2/bins/SPAdes-MetaBAT2-test_minigut.1.fa.gz", + "GenomeBinning/MetaBAT2/bins/SPAdes-MetaBAT2-test_minigut.2.fa.gz", + "GenomeBinning/MetaBAT2/discarded/MEGAHIT-MetaBAT2-test_minigut.lowDepth.fa.gz", + "GenomeBinning/MetaBAT2/discarded/MEGAHIT-MetaBAT2-test_minigut.tooShort.fa.gz", + "GenomeBinning/MetaBAT2/discarded/MEGAHIT-MetaBAT2-test_minigut_sample2.lowDepth.fa.gz", + "GenomeBinning/MetaBAT2/discarded/MEGAHIT-MetaBAT2-test_minigut_sample2.tooShort.fa.gz", + "GenomeBinning/MetaBAT2/discarded/SPAdes-MetaBAT2-test_minigut.lowDepth.fa.gz", + "GenomeBinning/MetaBAT2/discarded/SPAdes-MetaBAT2-test_minigut.tooShort.fa.gz", + "GenomeBinning/MetaBAT2/discarded/SPAdes-MetaBAT2-test_minigut_sample2.lowDepth.fa.gz", + "GenomeBinning/MetaBAT2/discarded/SPAdes-MetaBAT2-test_minigut_sample2.tooShort.fa.gz", + "GenomeBinning/MetaBAT2/unbinned/discarded/MEGAHIT-MetaBAT2-test_minigut.unbinned.pooled.fa.gz", + "GenomeBinning/MetaBAT2/unbinned/discarded/MEGAHIT-MetaBAT2-test_minigut.unbinned.remaining.fa.gz", + "GenomeBinning/MetaBAT2/unbinned/discarded/MEGAHIT-MetaBAT2-test_minigut_sample2.unbinned.pooled.fa.gz", + "GenomeBinning/MetaBAT2/unbinned/discarded/MEGAHIT-MetaBAT2-test_minigut_sample2.unbinned.remaining.fa.gz", + "GenomeBinning/MetaBAT2/unbinned/discarded/SPAdes-MetaBAT2-test_minigut.unbinned.pooled.fa.gz", + "GenomeBinning/MetaBAT2/unbinned/discarded/SPAdes-MetaBAT2-test_minigut.unbinned.remaining.fa.gz", + "GenomeBinning/MetaBAT2/unbinned/discarded/SPAdes-MetaBAT2-test_minigut_sample2.unbinned.pooled.fa.gz", + "GenomeBinning/MetaBAT2/unbinned/discarded/SPAdes-MetaBAT2-test_minigut_sample2.unbinned.remaining.fa.gz", + "GenomeBinning/QC/BUSCO/MEGAHIT-DASTool-test_minigut/short_summary.specific.bacteria_odb10.MEGAHIT-MetaBAT2Refined-test_minigut.1.fa.json", + "GenomeBinning/QC/BUSCO/MEGAHIT-DASTool-test_minigut/short_summary.specific.bacteria_odb10.MEGAHIT-MetaBAT2Refined-test_minigut.1.fa.txt", + "GenomeBinning/QC/BUSCO/MEGAHIT-DASTool-test_minigut/short_summary.specific.bacteria_odb10.MEGAHIT-MetaBAT2Refined-test_minigut.2.fa.json", + "GenomeBinning/QC/BUSCO/MEGAHIT-DASTool-test_minigut/short_summary.specific.bacteria_odb10.MEGAHIT-MetaBAT2Refined-test_minigut.2.fa.txt", + "GenomeBinning/QC/BUSCO/MEGAHIT-DASTool-test_minigut/test_minigut-bacteria_odb10-busco.batch_summary.txt", + "GenomeBinning/QC/BUSCO/MEGAHIT-DASTool-test_minigut/test_minigut-bacteria_odb10-busco.log", + "GenomeBinning/QC/BUSCO/MEGAHIT-DASTool-test_minigut/test_minigut-bacteria_odb10-busco/MEGAHIT-MetaBAT2Refined-test_minigut.1.fa/run_bacteria_odb10/full_table.tsv", + "GenomeBinning/QC/BUSCO/MEGAHIT-DASTool-test_minigut/test_minigut-bacteria_odb10-busco/MEGAHIT-MetaBAT2Refined-test_minigut.1.fa/run_bacteria_odb10/missing_busco_list.tsv", + "GenomeBinning/QC/BUSCO/MEGAHIT-DASTool-test_minigut/test_minigut-bacteria_odb10-busco/MEGAHIT-MetaBAT2Refined-test_minigut.1.fa/run_bacteria_odb10/short_summary.json", + "GenomeBinning/QC/BUSCO/MEGAHIT-DASTool-test_minigut/test_minigut-bacteria_odb10-busco/MEGAHIT-MetaBAT2Refined-test_minigut.1.fa/run_bacteria_odb10/short_summary.txt", + "GenomeBinning/QC/BUSCO/MEGAHIT-DASTool-test_minigut/test_minigut-bacteria_odb10-busco/MEGAHIT-MetaBAT2Refined-test_minigut.2.fa/run_bacteria_odb10/full_table.tsv", + "GenomeBinning/QC/BUSCO/MEGAHIT-DASTool-test_minigut/test_minigut-bacteria_odb10-busco/MEGAHIT-MetaBAT2Refined-test_minigut.2.fa/run_bacteria_odb10/missing_busco_list.tsv", + "GenomeBinning/QC/BUSCO/MEGAHIT-DASTool-test_minigut/test_minigut-bacteria_odb10-busco/MEGAHIT-MetaBAT2Refined-test_minigut.2.fa/run_bacteria_odb10/short_summary.json", + "GenomeBinning/QC/BUSCO/MEGAHIT-DASTool-test_minigut/test_minigut-bacteria_odb10-busco/MEGAHIT-MetaBAT2Refined-test_minigut.2.fa/run_bacteria_odb10/short_summary.txt", + "GenomeBinning/QC/BUSCO/SPAdes-DASTool-test_minigut/short_summary.specific.bacteria_odb10.SPAdes-CONCOCTRefined-test_minigut.7.fa.json", + "GenomeBinning/QC/BUSCO/SPAdes-DASTool-test_minigut/short_summary.specific.bacteria_odb10.SPAdes-CONCOCTRefined-test_minigut.7.fa.txt", + "GenomeBinning/QC/BUSCO/SPAdes-DASTool-test_minigut/short_summary.specific.bacteria_odb10.SPAdes-MaxBin2Refined-test_minigut.001_sub.fa.json", + "GenomeBinning/QC/BUSCO/SPAdes-DASTool-test_minigut/short_summary.specific.bacteria_odb10.SPAdes-MaxBin2Refined-test_minigut.001_sub.fa.txt", + "GenomeBinning/QC/BUSCO/SPAdes-DASTool-test_minigut/test_minigut-bacteria_odb10-busco.batch_summary.txt", + "GenomeBinning/QC/BUSCO/SPAdes-DASTool-test_minigut/test_minigut-bacteria_odb10-busco.log", + "GenomeBinning/QC/BUSCO/SPAdes-DASTool-test_minigut/test_minigut-bacteria_odb10-busco/SPAdes-CONCOCTRefined-test_minigut.7.fa/run_bacteria_odb10/full_table.tsv", + "GenomeBinning/QC/BUSCO/SPAdes-DASTool-test_minigut/test_minigut-bacteria_odb10-busco/SPAdes-CONCOCTRefined-test_minigut.7.fa/run_bacteria_odb10/missing_busco_list.tsv", + "GenomeBinning/QC/BUSCO/SPAdes-DASTool-test_minigut/test_minigut-bacteria_odb10-busco/SPAdes-CONCOCTRefined-test_minigut.7.fa/run_bacteria_odb10/short_summary.json", + "GenomeBinning/QC/BUSCO/SPAdes-DASTool-test_minigut/test_minigut-bacteria_odb10-busco/SPAdes-CONCOCTRefined-test_minigut.7.fa/run_bacteria_odb10/short_summary.txt", + "GenomeBinning/QC/BUSCO/SPAdes-DASTool-test_minigut/test_minigut-bacteria_odb10-busco/SPAdes-MaxBin2Refined-test_minigut.001_sub.fa/run_bacteria_odb10/full_table.tsv", + "GenomeBinning/QC/BUSCO/SPAdes-DASTool-test_minigut/test_minigut-bacteria_odb10-busco/SPAdes-MaxBin2Refined-test_minigut.001_sub.fa/run_bacteria_odb10/missing_busco_list.tsv", + "GenomeBinning/QC/BUSCO/SPAdes-DASTool-test_minigut/test_minigut-bacteria_odb10-busco/SPAdes-MaxBin2Refined-test_minigut.001_sub.fa/run_bacteria_odb10/short_summary.json", + "GenomeBinning/QC/BUSCO/SPAdes-DASTool-test_minigut/test_minigut-bacteria_odb10-busco/SPAdes-MaxBin2Refined-test_minigut.001_sub.fa/run_bacteria_odb10/short_summary.txt", + "GenomeBinning/QC/busco_summary.tsv", + "GenomeBinning/SemiBin2/bins/MEGAHIT-SemiBin2-test_minigut_0.fa.gz", + "GenomeBinning/SemiBin2/bins/MEGAHIT-SemiBin2-test_minigut_1.fa.gz", + "GenomeBinning/SemiBin2/bins/SPAdes-SemiBin2-test_minigut_0.fa.gz", + "GenomeBinning/SemiBin2/bins/SPAdes-SemiBin2-test_minigut_1.fa.gz", + "GenomeBinning/SemiBin2/log/MEGAHIT-SemiBin2-test_minigut.SemiBinRun.log", + "GenomeBinning/SemiBin2/log/MEGAHIT-SemiBin2-test_minigut_sample2.SemiBinRun.log", + "GenomeBinning/SemiBin2/log/SPAdes-SemiBin2-test_minigut.SemiBinRun.log", + "GenomeBinning/SemiBin2/log/SPAdes-SemiBin2-test_minigut_sample2.SemiBinRun.log", + "GenomeBinning/bin_summary.tsv", + "GenomeBinning/depths/bins/MEGAHIT-DASTool-test_minigut-binDepths.heatmap.png", + "GenomeBinning/depths/bins/SPAdes-DASTool-test_minigut-binDepths.heatmap.png", + "GenomeBinning/depths/bins/bin_depths_summary.tsv", + "GenomeBinning/depths/contigs/MEGAHIT-test_minigut-depth.txt.gz", + "GenomeBinning/depths/contigs/MEGAHIT-test_minigut_sample2-depth.txt.gz", + "GenomeBinning/depths/contigs/SPAdes-test_minigut-depth.txt.gz", + "GenomeBinning/depths/contigs/SPAdes-test_minigut_sample2-depth.txt.gz" + ], + [ + "MEGAHIT-CONCOCT-test_minigut_0.fa.gz:md5,245ea168aa421e1e3e720cf223a80780", + "MEGAHIT-CONCOCT-test_minigut_1.fa.gz:md5,0593d0a3d2d865b0b9fc8d59304856f1", + "MEGAHIT-CONCOCT-test_minigut_10.fa.gz:md5,f6a252ee5f95f7348ab6490a0b18cd3e", + "MEGAHIT-CONCOCT-test_minigut_11.fa.gz:md5,68ffd2e7570c04ed9e1694b6e55c459e", + "MEGAHIT-CONCOCT-test_minigut_12.fa.gz:md5,9495623384c1e92830ab89f5eedb1979", + "MEGAHIT-CONCOCT-test_minigut_13.fa.gz:md5,bb0aa3e68ff8ebdb35177d611d799994", + "MEGAHIT-CONCOCT-test_minigut_14.fa.gz:md5,9f82e309368507bffde5bd69b8df8d55", + "MEGAHIT-CONCOCT-test_minigut_15.fa.gz:md5,0ca16978fbfc82a58f08d4dc028acffc", + "MEGAHIT-CONCOCT-test_minigut_16.fa.gz:md5,7fbce6f10b9ea39de87360e17b842fd8", + "MEGAHIT-CONCOCT-test_minigut_17.fa.gz:md5,a8dce52362f7090beabab2b0585f6f13", + "MEGAHIT-CONCOCT-test_minigut_18.fa.gz:md5,17e0497babb72b7c2fd29dbd1cf408b0", + "MEGAHIT-CONCOCT-test_minigut_19.fa.gz:md5,83b98e9a477607bcf7c688852fbfa3dd", + "MEGAHIT-CONCOCT-test_minigut_2.fa.gz:md5,3298e937cdec73fb2b80e4826897386c", + "MEGAHIT-CONCOCT-test_minigut_20.fa.gz:md5,dc2b5d0c92264f32b950288c966631db", + "MEGAHIT-CONCOCT-test_minigut_21.fa.gz:md5,6655f58c6acbec32c0d8166b8ae450a0", + "MEGAHIT-CONCOCT-test_minigut_22.fa.gz:md5,5ce43a45b643cb445ddd4fc5bd6889b0", + "MEGAHIT-CONCOCT-test_minigut_23.fa.gz:md5,36ee5c9a732b19ce6cfd865ab764ac52", + "MEGAHIT-CONCOCT-test_minigut_24.fa.gz:md5,a75b524379de38f6676ce62df8f1d2ce", + "MEGAHIT-CONCOCT-test_minigut_25.fa.gz:md5,af96e6a99cb6f233bf21430665d6e090", + "MEGAHIT-CONCOCT-test_minigut_26.fa.gz:md5,e9d491b243366815a11eec81ce092f16", + "MEGAHIT-CONCOCT-test_minigut_27.fa.gz:md5,b8e587472b9a62c5df604d05047f6574", + "MEGAHIT-CONCOCT-test_minigut_28.fa.gz:md5,37232a9e385b4831ad04befc774277f1", + "MEGAHIT-CONCOCT-test_minigut_29.fa.gz:md5,a85aa535d2016fc6f9c2287387f1b929", + "MEGAHIT-CONCOCT-test_minigut_3.fa.gz:md5,0d5223f7b99c2e88b8527fbab8c2da4b", + "MEGAHIT-CONCOCT-test_minigut_30.fa.gz:md5,70c515d7c194e3d91005e1fdbdfe8e79", + "MEGAHIT-CONCOCT-test_minigut_31.fa.gz:md5,764d6b4538534eaf2b193e0c907047a6", + "MEGAHIT-CONCOCT-test_minigut_32.fa.gz:md5,fab3b8eb1e3ce43233cff2f615013dd9", + "MEGAHIT-CONCOCT-test_minigut_33.fa.gz:md5,5b6da5302317448023e2c1441008eabf", + "MEGAHIT-CONCOCT-test_minigut_34.fa.gz:md5,293559bdc66d45e221cd9158db1ffaf7", + "MEGAHIT-CONCOCT-test_minigut_35.fa.gz:md5,6525a4445cbd73e89ef5d00043ceff70", + "MEGAHIT-CONCOCT-test_minigut_36.fa.gz:md5,85c6bc19dff2b9066405838edcb94caf", + "MEGAHIT-CONCOCT-test_minigut_37.fa.gz:md5,ed1f768de5e704e054d8e2c9575f9865", + "MEGAHIT-CONCOCT-test_minigut_38.fa.gz:md5,999d99d15c183680ecd69d63dfdbc717", + "MEGAHIT-CONCOCT-test_minigut_39.fa.gz:md5,d62b2e75dc8b1c4f010b73933d6c15cd", + "MEGAHIT-CONCOCT-test_minigut_4.fa.gz:md5,138f9762d3f8a8ca6f6ef0f1695a30fb", + "MEGAHIT-CONCOCT-test_minigut_5.fa.gz:md5,7ff40f320b284e8b09df4c1f90436e6f", + "MEGAHIT-CONCOCT-test_minigut_6.fa.gz:md5,691e3ca1bb16d0568eedebd7f8079805", + "MEGAHIT-CONCOCT-test_minigut_7.fa.gz:md5,1487610744c6a2d4da9675800f0acf48", + "MEGAHIT-CONCOCT-test_minigut_8.fa.gz:md5,c1a7ed283db7fe38e2b4f5fe5ce63dce", + "MEGAHIT-CONCOCT-test_minigut_9.fa.gz:md5,926864de4d10a03a38041c50aaac880f", + "MEGAHIT-CONCOCT-test_minigut_sample2_0.fa.gz:md5,058a4294413bc58f9edaa5bcf294fece", + "MEGAHIT-CONCOCT-test_minigut_sample2_1.fa.gz:md5,9ad71999675d7022bf045d530fb11b4c", + "MEGAHIT-CONCOCT-test_minigut_sample2_2.fa.gz:md5,5e961ca70243e019b04275f0285dc021", + "MEGAHIT-CONCOCT-test_minigut_sample2_3.fa.gz:md5,b8138d52a921647851b15fbf1193da55", + "MEGAHIT-CONCOCT-test_minigut_sample2_4.fa.gz:md5,41c5f79d0306e54c04486c602d211940", + "MEGAHIT-CONCOCT-test_minigut_sample2_5.fa.gz:md5,06669da41ad21b632b5c52538151ef63", + "SPAdes-CONCOCT-test_minigut_0.fa.gz:md5,5592f48411b54c121ec73e21f24676b9", + "SPAdes-CONCOCT-test_minigut_1.fa.gz:md5,dec7b7a10d803a76fe88bd05716db43f", + "SPAdes-CONCOCT-test_minigut_10.fa.gz:md5,5f67a3c1f3f5eabf4e6598959c9fa01d", + "SPAdes-CONCOCT-test_minigut_11.fa.gz:md5,fe82661bc34c23248dad38691eb1c9e4", + "SPAdes-CONCOCT-test_minigut_12.fa.gz:md5,e7acdad0c8b09aefb0e8a907dbe12029", + "SPAdes-CONCOCT-test_minigut_13.fa.gz:md5,4f1724ac2497e0ecf0e9855c73c48740", + "SPAdes-CONCOCT-test_minigut_14.fa.gz:md5,3894b42a30d739e8cef36814163858c2", + "SPAdes-CONCOCT-test_minigut_15.fa.gz:md5,b60ea3929129639676d007e147c3972a", + "SPAdes-CONCOCT-test_minigut_16.fa.gz:md5,2973c394a8da3179321daae77d9f98d8", + "SPAdes-CONCOCT-test_minigut_18.fa.gz:md5,aaf37cc788f36ddf05f331896b39e723", + "SPAdes-CONCOCT-test_minigut_19.fa.gz:md5,75bc78b30df8cdc9602b5f7c4a049307", + "SPAdes-CONCOCT-test_minigut_2.fa.gz:md5,c22b3a3467d6a37b9c6936994fa2af3f", + "SPAdes-CONCOCT-test_minigut_20.fa.gz:md5,51c30d66a74eb66e9344be8c8c9f4402", + "SPAdes-CONCOCT-test_minigut_21.fa.gz:md5,2321a05fc90086b71e0a8c984f652eec", + "SPAdes-CONCOCT-test_minigut_22.fa.gz:md5,c0bc434a155d8a340562fbfb37a203f9", + "SPAdes-CONCOCT-test_minigut_23.fa.gz:md5,ca2b11b40eb35360ea0d3c7d1c470ecc", + "SPAdes-CONCOCT-test_minigut_24.fa.gz:md5,1241f1adb911b632326f2dace8ad193d", + "SPAdes-CONCOCT-test_minigut_25.fa.gz:md5,a0c9081af49482db3806c3cc5c4e6f4c", + "SPAdes-CONCOCT-test_minigut_26.fa.gz:md5,0d8e226060f422f428eabed45693065d", + "SPAdes-CONCOCT-test_minigut_27.fa.gz:md5,0a08423445f121579d0205214ada9404", + "SPAdes-CONCOCT-test_minigut_28.fa.gz:md5,b90eaa4fcc2fd0340dc9e7442a5ae843", + "SPAdes-CONCOCT-test_minigut_29.fa.gz:md5,d9a736307bfb86641d5f245370a04a0f", + "SPAdes-CONCOCT-test_minigut_3.fa.gz:md5,4312567f4b976054df0b4607e46860f3", + "SPAdes-CONCOCT-test_minigut_30.fa.gz:md5,aabbea39778ed0376f825f0ced15ff7c", + "SPAdes-CONCOCT-test_minigut_32.fa.gz:md5,c81add7fd22e8374511173e34c9b0757", + "SPAdes-CONCOCT-test_minigut_4.fa.gz:md5,90328732de843597558479f69173cc78", + "SPAdes-CONCOCT-test_minigut_5.fa.gz:md5,932a7420e19ed19e4bbb595751fb94a0", + "SPAdes-CONCOCT-test_minigut_6.fa.gz:md5,f42f33d67588416bc5b8afa0b12c07d9", + "SPAdes-CONCOCT-test_minigut_7.fa.gz:md5,aae2a4519a6ba263f90ed89ea7b54213", + "SPAdes-CONCOCT-test_minigut_8.fa.gz:md5,9052dcad2226d1164caca962e9ec71a5", + "SPAdes-CONCOCT-test_minigut_9.fa.gz:md5,c728c1c6789e9f4d865aa335e4e1f448", + "SPAdes-CONCOCT-test_minigut_sample2_0.fa.gz:md5,b79b79488ec80026c6f7e4763e90c169", + "SPAdes-CONCOCT-test_minigut_sample2_1.fa.gz:md5,dc2d382c3762416d930880aae8c270e4", + "SPAdes-CONCOCT-test_minigut_sample2_10.fa.gz:md5,5f91e2ae2030fbcda09c3938cb88ffab", + "SPAdes-CONCOCT-test_minigut_sample2_11.fa.gz:md5,33c007b3e8898f42b16e7493388cbb56", + "SPAdes-CONCOCT-test_minigut_sample2_2.fa.gz:md5,d338e139516f63c10eb5fe24f3827223", + "SPAdes-CONCOCT-test_minigut_sample2_3.fa.gz:md5,9171d03bdaf0bc2064abb0d126e8ce66", + "SPAdes-CONCOCT-test_minigut_sample2_4.fa.gz:md5,6a4819c04001ffa59bcfc90fd75a0fdd", + "SPAdes-CONCOCT-test_minigut_sample2_5.fa.gz:md5,51f188a2f7a9f9b5cf0509e72a41cc19", + "SPAdes-CONCOCT-test_minigut_sample2_6.fa.gz:md5,20283cc2b90e709cc60d983518f91c1f", + "SPAdes-CONCOCT-test_minigut_sample2_7.fa.gz:md5,afd865a4be118e39f5eda3ab49bba6dd", + "SPAdes-CONCOCT-test_minigut_sample2_8.fa.gz:md5,d8c32b41c12d3bb2aa1e04e2771db275", + "SPAdes-CONCOCT-test_minigut_sample2_9.fa.gz:md5,2e2f306d618fa183073b0d53ee7cb950", + "MEGAHIT-CONCOCT-test_minigut.csv:md5,799a519443cbf87101cbdc29556b60a4", + "MEGAHIT-CONCOCT-test_minigut_args.txt:md5,f447f7834b8e5bab73502e6ecf482a66", + "MEGAHIT-CONCOCT-test_minigut_clustering_gt1000.csv:md5,1218a51aa4454ba7718f10b896cc8651", + "MEGAHIT-CONCOCT-test_minigut_sample2.csv:md5,24040242b11981713fb3e5723ad2a617", + "MEGAHIT-CONCOCT-test_minigut_sample2_args.txt:md5,663042906344d19ad919e8081ada9cfb", + "MEGAHIT-CONCOCT-test_minigut_sample2_clustering_gt1000.csv:md5,a267534612791f1edb02fc269aa3be93", + "SPAdes-CONCOCT-test_minigut.csv:md5,84cbd58fbbf0e98e0ca5a76ea7bc94fe", + "SPAdes-CONCOCT-test_minigut_args.txt:md5,f5cd5b2bc15857b4a5309985c3eeeffb", + "SPAdes-CONCOCT-test_minigut_clustering_gt1000.csv:md5,79717b4541addf3e3872d4d0814b7b82", + "SPAdes-CONCOCT-test_minigut_sample2.csv:md5,86daeda21e1acfd0122aa4f0623325f8", + "SPAdes-CONCOCT-test_minigut_sample2_args.txt:md5,6e7129afbba33b973ac9ecc920659ea9", + "SPAdes-CONCOCT-test_minigut_sample2_clustering_gt1000.csv:md5,4bbba6a0ba80b107ef2b13b7089e2156", + "MEGAHIT-DASTool-test_minigut.seqlength:md5,f154f9ef4a4c0adb8d8f9ebb8163df93", + "MEGAHIT-DASTool-test_minigut_DASTool_contig2bin.tsv:md5,6add6f39f4fd9c31ff9f58df5f28fcdf", + "MEGAHIT-DASTool-test_minigut_DASTool_summary.tsv:md5,a900f80e0820a1e9416c2e391b37d06c", + "MEGAHIT-DASTool-test_minigut_allBins.eval:md5,b31d82ad1f410e66fd41661ffb4d0604", + "SPAdes-DASTool-test_minigut.seqlength:md5,4860a5cb7b0bf2e78e959111b5619006", + "SPAdes-DASTool-test_minigut_DASTool_contig2bin.tsv:md5,07c1af95dd0da4c11de390c2f188fe6c", + "SPAdes-DASTool-test_minigut_DASTool_summary.tsv:md5,b04bb7c85b2e393bfdaec7d754210a5a", + "SPAdes-DASTool-test_minigut_allBins.eval:md5,5bb0af6ad3d3ba960cb8d1242bd3f485", + "MEGAHIT-MetaBAT2Refined-test_minigut.1.fa:md5,489a5f7ba3795477e09d2d396fe535c3", + "MEGAHIT-MetaBAT2Refined-test_minigut.2.fa:md5,1addf634bca82af85d36621585f93f52", + "SPAdes-CONCOCTRefined-test_minigut.7.fa:md5,4be1cc2c06f329e0102cb27b03e30624", + "SPAdes-MaxBin2Refined-test_minigut.001_sub.fa:md5,d1edb5fdd4a5edffd8366a9efd3471c1", + "MEGAHIT-DASToolUnbinned-test_minigut.fa:md5,5b68d8b2df39cb4ab46299d9a09f1243", + "SPAdes-DASToolUnbinned-test_minigut.fa:md5,4161096564c7f9328ad5f8aa425b2864", + "MEGAHIT-MaxBin2-test_minigut.abundance:md5,435c92e8806d92755833204b4c105dd2", + "MEGAHIT-MaxBin2-test_minigut.summary:md5,5388c6b4b6f6f068d2345ea79cc4b06b", + "SPAdes-MaxBin2-test_minigut.abundance:md5,041d2a70c3dc9b51ba53c8c5732750d3", + "SPAdes-MaxBin2-test_minigut.summary:md5,972cd008b3841d7e6f266d46a5531392", + "MEGAHIT-MaxBin2-test_minigut.001.fa.gz:md5,2cff808af62fba48b3c742465b35dbd0", + "MEGAHIT-MaxBin2-test_minigut.002.fa.gz:md5,951aa9061ce661773454160752d90838", + "SPAdes-MaxBin2-test_minigut.001.fa.gz:md5,843ea84e39049274d801bb1a45243dd6", + "SPAdes-MaxBin2-test_minigut.002.fa.gz:md5,ed82bcb652c6ec406fb33437f163cbb9", + "MEGAHIT-MaxBin2-test_minigut.tooshort.gz:md5,13f117fb0402c6f3d41d2d4d7dfa375d", + "SPAdes-MaxBin2-test_minigut.tooshort.gz:md5,124650d9e643411384fb724b106afe39", + "MEGAHIT-MaxBin2-test_minigut.noclass.pooled.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "MEGAHIT-MaxBin2-test_minigut.noclass.remaining.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "SPAdes-MaxBin2-test_minigut.noclass.pooled.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "SPAdes-MaxBin2-test_minigut.noclass.remaining.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "MEGAHIT-MetaBAT2-test_minigut.1.fa.gz:md5,4771097fa5328a323e8922b0ed3964e4", + "MEGAHIT-MetaBAT2-test_minigut.2.fa.gz:md5,cd22587eee69d0964e6efe4dc0475e77", + "SPAdes-MetaBAT2-test_minigut.1.fa.gz:md5,1d4fc3446b6788f6ec416133ee38ea1a", + "SPAdes-MetaBAT2-test_minigut.2.fa.gz:md5,a3b7b2eb7ea0cb752d1876adc90152b3", + "MEGAHIT-MetaBAT2-test_minigut.lowDepth.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "MEGAHIT-MetaBAT2-test_minigut.tooShort.fa.gz:md5,c47a1bc114bd4d9ff9794ca2475690c0", + "MEGAHIT-MetaBAT2-test_minigut_sample2.lowDepth.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "MEGAHIT-MetaBAT2-test_minigut_sample2.tooShort.fa.gz:md5,4f5d664ebd4f4bed534d03a302941745", + "SPAdes-MetaBAT2-test_minigut.lowDepth.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "SPAdes-MetaBAT2-test_minigut.tooShort.fa.gz:md5,346dfe36b73b1527b2c7d54652f56354", + "SPAdes-MetaBAT2-test_minigut_sample2.lowDepth.fa.gz:md5,d41d8cd98f00b204e9800998ecf8427e", + "SPAdes-MetaBAT2-test_minigut_sample2.tooShort.fa.gz:md5,9bddbc167f9f357f9ce51dfd4b3f90ea", + "MEGAHIT-MetaBAT2-test_minigut.unbinned.remaining.fa.gz:md5,d22ec86d2e92f05c494fef2702f843c2", + "MEGAHIT-MetaBAT2-test_minigut_sample2.unbinned.remaining.fa.gz:md5,26500281c2553df9ba913417f325bea1", + "SPAdes-MetaBAT2-test_minigut.unbinned.remaining.fa.gz:md5,b7d946b4e8fb2263d1e26ce46bd5ee63", + "SPAdes-MetaBAT2-test_minigut_sample2.unbinned.remaining.fa.gz:md5,df1dd296842bcf4e9420485a5dad8191", + "full_table.tsv:md5,599081c38cfceb1124999cc391a13140", + "missing_busco_list.tsv:md5,da2d1bf8d167eecc9ddc6adac9cd5d3d", + "full_table.tsv:md5,9c87b7683b335d8fc94617c7f5d195c2", + "missing_busco_list.tsv:md5,a51ce34d52c4635fefe5cf044feec954", + "full_table.tsv:md5,eff59a289564e1553d13099f8d16309e", + "missing_busco_list.tsv:md5,c6807925eff74c7de1c1a38d88069b08", + "full_table.tsv:md5,877e4dad881ca7079c8b6118b59a34d4", + "missing_busco_list.tsv:md5,c7ee1e582e010aab60a566da7fe304de", + "MEGAHIT-SemiBin2-test_minigut_0.fa.gz:md5,3688b9460d9a4a1e4ea912721f226b5d", + "MEGAHIT-SemiBin2-test_minigut_1.fa.gz:md5,12381d7733271d3e28c39f7ad1ca4e74", + "SPAdes-SemiBin2-test_minigut_0.fa.gz:md5,daf60d669f93aecce24c715d863388a9", + "SPAdes-SemiBin2-test_minigut_1.fa.gz:md5,19ce02b104d195bf57130398e7b2dd2e", + "bin_summary.tsv:md5,60111a58bb0167ec1367f1e7463b7026", + "bin_depths_summary.tsv:md5,7153f759db72abb02e2ee3c2ab1b5e56" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2025-11-11T07:13:39.966382867" + }, + "csv-rows": { + "content": [ + 4, + 4 + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2025-11-12T05:04:37.179720571" }, "multiqc": { "content": [ @@ -156,8 +622,8 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "25.04.7" + "nextflow": "25.10.0" }, - "timestamp": "2025-10-17T15:35:03.829622799" + "timestamp": "2025-11-03T13:09:26.024757138" } } \ No newline at end of file diff --git a/tests/test_hybrid.nf.test.snap b/tests/test_hybrid.nf.test.snap index d35db489f..1f49fb7ae 100644 --- a/tests/test_hybrid.nf.test.snap +++ b/tests/test_hybrid.nf.test.snap @@ -1,19 +1,19 @@ { "-profile hybrid": { "content": [ - 51, + 59, { "ADJUST_MAXBIN2_EXT": { "coreutils": 9.5 }, "BIN_SUMMARY": { - "python": "3.10.6", - "pandas": "1.4.3" + "pandas": "1.4.3", + "python": "3.10.6" }, "BOWTIE2_ASSEMBLY_ALIGN": { "bowtie2": "2.4.2", - "samtools": 1.11, - "pigz": "2.3.4" + "pigz": "2.3.4", + "samtools": 1.11 }, "BOWTIE2_ASSEMBLY_BUILD": { "bowtie2": "2.4.2" @@ -40,13 +40,13 @@ "chopper": "0.8.0" }, "CONCAT_BUSCO_TSV": { - "csvtk": "0.31.0" + "qsv": "5.1.0" }, "CONVERT_DEPTHS": { "bioawk": 20110810 }, "FASTP": { - "fastp": "0.24.0" + "fastp": "1.0.1" }, "FASTQC_RAW": { "fastqc": "0.12.1" @@ -61,12 +61,12 @@ "gunzip": 1.13 }, "MAG_DEPTHS": { - "python": "3.6.7", - "pandas": "1.1.5" + "pandas": "1.1.5", + "python": "3.6.7" }, "MAG_DEPTHS_SUMMARY": { - "python": "3.10.6", - "pandas": "1.4.3" + "pandas": "1.4.3", + "python": "3.10.6" }, "MAXBIN2": { "maxbin2": "2.2.7" @@ -100,42 +100,45 @@ "porechop": "0.2.4" }, "PRODIGAL": { - "prodigal": "2.6.3", - "pigz": 2.6 + "pigz": 2.6, + "prodigal": "2.6.3" }, "PROKKA": { "prokka": "1.14.6" }, "QUAST": { - "python": "3.7.6", - "metaquast": "5.0.2" + "metaquast": "5.0.2", + "python": "3.7.6" }, "QUAST_BINS": { - "python": "3.7.6", - "metaquast": "5.0.2" + "metaquast": "5.0.2", + "python": "3.7.6" }, "QUAST_BINS_SUMMARY": { "cp": 9.5 }, "SAMTOOLS_HOSTREMOVED_INDEX": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_HOSTREMOVED_STATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_HOSTREMOVED_UNMAPPED": { "samtools": 1.21 }, + "SEMIBIN_SINGLEEASYBIN": { + "SemiBin": "2.2.0" + }, "SEQKIT_STATS": { "seqkit": "2.9.0" }, "SPLIT_FASTA": { - "python": "3.6.7", "biopython": "1.7.4", - "pandas": "1.1.5" + "pandas": "1.1.5", + "python": "3.6.7" }, "Workflow": { - "nf-core/mag": "v5.2.0" + "nf-core/mag": "v5.3.0" } } ], @@ -143,7 +146,7 @@ "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-11-04T08:43:07.241387365" + "timestamp": "2025-11-27T11:33:15.714841944" }, "multiqc": { "content": [ @@ -336,7 +339,7 @@ ], [ "bowtie2_pe_plot.yaml:md5,331d49d9aa0a0ce1a3a8b407b8a49801", - "busco_plot_bacteria_odb10.yaml:md5,891eb4ee4391f6f36c18c5b82a7d2473", + "busco_plot_bacteria_odb10.yaml:md5,da10d6a882b6f7a5e6eca94f415aabff", "fastp-insert-size-plot.yaml:md5,55f97b7830c1395c10c06bf3f4431186", "fastp-seq-content-gc-plot_Read_1_After_filtering.yaml:md5,fb178f8c18fde4ad16d79afe333d481b", "fastp-seq-content-gc-plot_Read_1_Before_filtering.yaml:md5,2f3f9726d97d4f22be3f4ad30ee14173", @@ -371,25 +374,25 @@ "multiqc_bowtie2.yaml:md5,d6a4f1f2e6952801eda62c414c1685cb", "multiqc_bowtie2_bowtie2-1.yaml:md5,d6a4f1f2e6952801eda62c414c1685cb", "multiqc_bowtie2_bowtie2-2.yaml:md5,b5a185109453a80131d7da2cf4d3f2ec", - "multiqc_busco.yaml:md5,76cda2e3678fbdf6a592da3bb7fcdc37", + "multiqc_busco.yaml:md5,df428a34eda0c1a05aac5cd84a040e08", "multiqc_citations.yaml:md5,49f79471c1620b06da08b1acb97a1e56", - "multiqc_fastp.yaml:md5,5d2c6eefa228bc0210be0d017eeb8eda", + "multiqc_fastp.yaml:md5,29b2500f793b0c444ee7c6535d406b09", "multiqc_fastqc.yaml:md5,0d11a6d30d0d1a430e58d44b57ac6e87", "multiqc_fastqc_fastqc-1.yaml:md5,0b8c8b4edb4f3e70409f30bcdda54397", - "multiqc_general_stats.yaml:md5,b973d94a42bdc5d0fb4afa5e04ab6f48", - "multiqc_prokka.yaml:md5,f7ee4045a273845b501ba15e5fd4d38f", + "multiqc_general_stats.yaml:md5,edb4f404e32d372bd387a90b72575087", + "multiqc_prokka.yaml:md5,b994dcc420bd2f85d4e0f91549e08b54", "multiqc_quast.yaml:md5,e5940a0ce6af05da51fe94bc6d7d3901", - "multiqc_quast_quast-1.yaml:md5,4fcb2008af9fc15990854d76e6a72ada", + "multiqc_quast_quast-1.yaml:md5,b20f16ccd1d9395ecac0ceee2cbe78de", "porechop.yaml:md5,828d96e2822bb4b4108ab706c00c4450", - "prokka_plot.yaml:md5,229d29dafbf6bde37d8f245dfb535b2e", - "quast_num_contigs.yaml:md5,241f678b1df1c1dd0dd58246a073d7dc", - "quast_table.yaml:md5,c1c9b5770b5defb3595b7b46af6a746c" + "prokka_plot.yaml:md5,c095a60a9936134ec73e6667a5635bbe", + "quast_num_contigs.yaml:md5,ddc54b8fb069f419547237c52e3058f2", + "quast_table.yaml:md5,e5720e81c420f07480481ac3c75bb822" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2025-10-17T15:41:54.219952596" + "timestamp": "2025-12-01T14:45:00.164025293" } } \ No newline at end of file diff --git a/tests/test_longreadonly.nf.test.snap b/tests/test_longreadonly.nf.test.snap index df2b55dfb..4c07320ae 100644 --- a/tests/test_longreadonly.nf.test.snap +++ b/tests/test_longreadonly.nf.test.snap @@ -7,8 +7,8 @@ "coreutils": 9.5 }, "BIN_SUMMARY": { - "python": "3.10.6", - "pandas": "1.4.3" + "pandas": "1.4.3", + "python": "3.10.6" }, "BUSCO_BUSCO": { "busco": "6.0.0" @@ -17,7 +17,7 @@ "untar": 1.34 }, "CONCAT_BUSCO_TSV": { - "csvtk": "0.31.0" + "qsv": "5.1.0" }, "CONVERT_DEPTHS": { "bioawk": 20110810 @@ -35,12 +35,12 @@ "gunzip": 1.13 }, "MAG_DEPTHS": { - "python": "3.6.7", - "pandas": "1.1.5" + "pandas": "1.1.5", + "python": "3.6.7" }, "MAG_DEPTHS_SUMMARY": { - "python": "3.10.6", - "pandas": "1.4.3" + "pandas": "1.4.3", + "python": "3.10.6" }, "MAXBIN2": { "maxbin2": "2.2.7" @@ -52,7 +52,7 @@ "metabat2": 2.17 }, "METAMDBG_ASM": { - "metamdbg": 1.1 + "metamdbg": 1.2 }, "MINIMAP2_ASSEMBLY_ALIGN": { "minimap2": "2.29-r1283", @@ -81,28 +81,28 @@ "porechop_abi": "0.5.0" }, "PRODIGAL": { - "prodigal": "2.6.3", - "pigz": 2.6 + "pigz": 2.6, + "prodigal": "2.6.3" }, "PROKKA": { "prokka": "1.14.6" }, "QUAST": { - "python": "3.7.6", - "metaquast": "5.0.2" + "metaquast": "5.0.2", + "python": "3.7.6" }, "QUAST_BINS": { - "python": "3.7.6", - "metaquast": "5.0.2" + "metaquast": "5.0.2", + "python": "3.7.6" }, "QUAST_BINS_SUMMARY": { "cp": 9.5 }, "SAMTOOLS_HOSTREMOVED_INDEX": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_HOSTREMOVED_STATS": { - "samtools": 1.21 + "samtools": "1.22.1" }, "SAMTOOLS_HOSTREMOVED_UNMAPPED": { "samtools": 1.21 @@ -111,12 +111,12 @@ "seqkit": "2.9.0" }, "SPLIT_FASTA": { - "python": "3.6.7", "biopython": "1.7.4", - "pandas": "1.1.5" + "pandas": "1.1.5", + "python": "3.6.7" }, "Workflow": { - "nf-core/mag": "v5.2.0" + "nf-core/mag": "v5.3.0" } } ], @@ -124,7 +124,7 @@ "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-11-04T08:48:59.440835918" + "timestamp": "2025-11-27T11:34:46.475733493" }, "multiqc": { "content": [ diff --git a/tests/test_longreadonly_alternatives.nf.test.snap b/tests/test_longreadonly_alternatives.nf.test.snap index 91cff24dd..c2804b4af 100644 --- a/tests/test_longreadonly_alternatives.nf.test.snap +++ b/tests/test_longreadonly_alternatives.nf.test.snap @@ -7,8 +7,8 @@ "coreutils": 9.5 }, "BIN_SUMMARY": { - "python": "3.10.6", - "pandas": "1.4.3" + "pandas": "1.4.3", + "python": "3.10.6" }, "BUSCO_BUSCO": { "busco": "6.0.0" @@ -17,7 +17,7 @@ "untar": 1.34 }, "CONCAT_BUSCO_TSV": { - "csvtk": "0.31.0" + "qsv": "5.1.0" }, "CONVERT_DEPTHS": { "bioawk": 20110810 @@ -32,12 +32,12 @@ "gunzip": 1.13 }, "MAG_DEPTHS": { - "python": "3.6.7", - "pandas": "1.1.5" + "pandas": "1.1.5", + "python": "3.6.7" }, "MAG_DEPTHS_SUMMARY": { - "python": "3.10.6", - "pandas": "1.4.3" + "pandas": "1.4.3", + "python": "3.10.6" }, "MAXBIN2": { "maxbin2": "2.2.7" @@ -74,12 +74,12 @@ "seqkit": "2.9.0" }, "SPLIT_FASTA": { - "python": "3.6.7", "biopython": "1.7.4", - "pandas": "1.1.5" + "pandas": "1.1.5", + "python": "3.6.7" }, "Workflow": { - "nf-core/mag": "v5.2.0" + "nf-core/mag": "v5.3.0" } } ], @@ -87,7 +87,7 @@ "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-11-04T08:51:15.395173486" + "timestamp": "2025-11-27T11:30:05.181782749" }, "multiqc": { "content": [ @@ -120,9 +120,9 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2025-10-17T15:56:17.268973009" + "timestamp": "2025-11-27T13:31:05.010588102" } } \ No newline at end of file diff --git a/tests/test_minimal.nf.test.snap b/tests/test_minimal.nf.test.snap index 6dd754b6c..fccf77067 100644 --- a/tests/test_minimal.nf.test.snap +++ b/tests/test_minimal.nf.test.snap @@ -41,7 +41,7 @@ "fastqc": "0.12.1" }, "Workflow": { - "nf-core/mag": "v5.2.0" + "nf-core/mag": "v5.3.0" } } ], @@ -49,7 +49,7 @@ "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-11-04T08:52:09.346693154" + "timestamp": "2025-11-07T11:44:39.568035358" }, "multiqc": { "content": [ @@ -170,9 +170,9 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2025-10-17T15:57:08.801736448" + "timestamp": "2025-12-01T14:39:25.68546084" } } \ No newline at end of file diff --git a/tests/test_single_end.nf.test.snap b/tests/test_single_end.nf.test.snap index 4a805a9f0..b55e432e8 100644 --- a/tests/test_single_end.nf.test.snap +++ b/tests/test_single_end.nf.test.snap @@ -10,22 +10,22 @@ "coreutils": 9.5 }, "BCFTOOLS_CONSENSUS": { - "bcftools": 1.21 + "bcftools": 1.22 }, "BCFTOOLS_INDEX": { - "bcftools": 1.21 + "bcftools": 1.22 }, "BCFTOOLS_VIEW": { - "bcftools": 1.21 + "bcftools": 1.22 }, "BIN_SUMMARY": { - "python": "3.10.6", - "pandas": "1.4.3" + "pandas": "1.4.3", + "python": "3.10.6" }, "BOWTIE2_ASSEMBLY_ALIGN": { "bowtie2": "2.4.2", - "samtools": 1.11, - "pigz": "2.3.4" + "pigz": "2.3.4", + "samtools": 1.11 }, "BOWTIE2_ASSEMBLY_BUILD": { "bowtie2": "2.4.2" @@ -64,7 +64,7 @@ "untar": 1.34 }, "CONCAT_CHECKM_TSV": { - "csvtk": "0.31.0" + "qsv": "5.1.0" }, "CONCOCT_CONCOCT": { "concoct": "1.1.0" @@ -85,7 +85,7 @@ "bioawk": 20110810 }, "FAIDX": { - "samtools": 1.21 + "samtools": "1.22.1" }, "FASTQC_RAW": { "fastqc": "0.12.1" @@ -97,21 +97,21 @@ "freebayes": "1.3.10" }, "GENOMAD_DOWNLOAD": { - "genomad": "1.11.1" + "genomad": "1.11.2" }, "GENOMAD_ENDTOEND": { - "genomad": "1.11.1" + "genomad": "1.11.2" }, "GTDBTK_CLASSIFYWF": { - "gtdbtk": "2.5.2", - "gtdb_db": "r226" + "gtdb_db": "r226", + "gtdbtk": "2.5.2" }, "GTDBTK_DB_PREPARATION": { "tar": 1.34 }, "GTDBTK_SUMMARY": { - "python": "3.10.6", - "pandas": "1.4.3" + "pandas": "1.4.3", + "python": "3.10.6" }, "GUNZIP_BINS": { "gunzip": 1.13 @@ -120,12 +120,12 @@ "gunzip": 1.13 }, "MAG_DEPTHS": { - "python": "3.6.7", - "pandas": "1.1.5" + "pandas": "1.1.5", + "python": "3.6.7" }, "MAG_DEPTHS_SUMMARY": { - "python": "3.10.6", - "pandas": "1.4.3" + "pandas": "1.4.3", + "python": "3.10.6" }, "MAXBIN2": { "maxbin2": "2.2.7" @@ -140,8 +140,8 @@ "metabat2": 2.17 }, "PRODIGAL": { - "prodigal": "2.6.3", - "pigz": 2.6 + "pigz": 2.6, + "prodigal": "2.6.3" }, "PROKKA": { "prokka": "1.14.6" @@ -153,12 +153,12 @@ "pydamage": 1.0 }, "QUAST": { - "python": "3.7.6", - "metaquast": "5.0.2" + "metaquast": "5.0.2", + "python": "3.7.6" }, "QUAST_BINS": { - "python": "3.7.6", - "metaquast": "5.0.2" + "metaquast": "5.0.2", + "python": "3.7.6" }, "QUAST_BINS_SUMMARY": { "cp": 9.5 @@ -167,12 +167,12 @@ "seqkit": "2.9.0" }, "SPLIT_FASTA": { - "python": "3.6.7", "biopython": "1.7.4", - "pandas": "1.1.5" + "pandas": "1.1.5", + "python": "3.6.7" }, "Workflow": { - "nf-core/mag": "v5.2.0" + "nf-core/mag": "v5.3.0" } } ], @@ -180,7 +180,7 @@ "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-11-05T22:26:03.841320596" + "timestamp": "2025-11-27T11:48:18.977628229" }, "multiqc": { "content": [ @@ -376,9 +376,9 @@ ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2025-11-03T09:55:56.923848787" + "timestamp": "2025-12-01T14:43:55.379083582" } } \ No newline at end of file diff --git a/workflows/mag.nf b/workflows/mag.nf index 9e75b764c..5f63e26a5 100644 --- a/workflows/mag.nf +++ b/workflows/mag.nf @@ -42,17 +42,18 @@ include { QUAST } from '../modules/local/quast_run/mai include { QUAST_BINS } from '../modules/local/quast_bins/main' include { QUAST_BINS_SUMMARY } from '../modules/local/quast_bins_summary/main' include { BIN_SUMMARY } from '../modules/local/bin_summary/main' +include { PREPARE_BIGMAG_SUMMARY } from '../modules/local/bigmag_summary/main' workflow MAG { take: - ch_raw_short_reads // channel: samplesheet read in from --input + ch_raw_short_reads // channel: samplesheet read in from --input ch_raw_long_reads ch_input_assemblies main: - ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() + ch_versions = channel.empty() + ch_multiqc_files = channel.empty() //////////////////////////////////////////////////// /* -- Create channel for reference databases -- */ @@ -60,44 +61,48 @@ workflow MAG { if (params.host_genome) { host_fasta = params.genomes[params.host_genome].fasta ?: false - ch_host_fasta = Channel.value(file("${host_fasta}")) + ch_host_fasta = channel.value(file("${host_fasta}")) host_bowtie2index = params.genomes[params.host_genome].bowtie2 ?: false - ch_host_bowtie2index = Channel.fromPath("${host_bowtie2index}", checkIfExists: true).first() + ch_host_bowtie2index = channel.fromPath("${host_bowtie2index}", checkIfExists: true).first() } else if (params.host_fasta) { - ch_host_fasta = Channel.fromPath("${params.host_fasta}", checkIfExists: true).first() ?: false + ch_host_fasta = channel.fromPath("${params.host_fasta}", checkIfExists: true).first() ?: false if (params.host_fasta_bowtie2index) { - ch_host_bowtie2index = Channel.fromPath("${params.host_fasta_bowtie2index}", checkIfExists: true).first() + ch_host_bowtie2index = channel.fromPath("${params.host_fasta_bowtie2index}", checkIfExists: true).first() } else { - ch_host_bowtie2index = Channel.empty() + ch_host_bowtie2index = channel.empty() } } else { - ch_host_fasta = Channel.empty() - ch_host_bowtie2index = Channel.empty() + ch_host_fasta = channel.empty() + ch_host_bowtie2index = channel.empty() } if (!params.keep_phix) { - ch_phix_db_file = params.phix_reference ? Channel.value(file("${params.phix_reference}", checkIfExists: true)) : Channel.value(file("${projectDir}/assets/data/GCA_002596845.1_ASM259684v1_genomic.fna.gz", checkIfExists: true)) + ch_phix_db_file = params.phix_reference + ? channel.value(file("${params.phix_reference}", checkIfExists: true)) + : channel.value(file("${projectDir}/assets/data/GCA_002596845.1_ASM259684v1_genomic.fna.gz", checkIfExists: true)) } else { - ch_phix_db_file = Channel.empty() + ch_phix_db_file = channel.empty() } if (!params.keep_lambda) { - ch_lambda_db = params.lambda_reference ? Channel.value(file("${params.lambda_reference}", checkIfExists: true)) : Channel.value(file("${projectDir}/assets/data/GCA_000840245.1_ViralProj14204_genomic.fna.gz", checkIfExists: true)) + ch_lambda_db = params.lambda_reference + ? channel.value(file("${params.lambda_reference}", checkIfExists: true)) + : channel.value(file("${projectDir}/assets/data/GCA_000840245.1_ViralProj14204_genomic.fna.gz", checkIfExists: true)) } else { - ch_lambda_db = Channel.value([]) + ch_lambda_db = channel.value([]) } if (params.genomad_db) { ch_genomad_db = file(params.genomad_db, checkIfExists: true) } else { - ch_genomad_db = Channel.empty() + ch_genomad_db = channel.empty() } gtdb = params.skip_binqc || params.skip_gtdbtk ? false : params.gtdb_db @@ -110,10 +115,10 @@ workflow MAG { } if (params.metaeuk_db && !params.skip_metaeuk) { - ch_metaeuk_db = Channel.value(file("${params.metaeuk_db}", checkIfExists: true)) + ch_metaeuk_db = channel.value(file("${params.metaeuk_db}", checkIfExists: true)) } else { - ch_metaeuk_db = Channel.empty() + ch_metaeuk_db = channel.empty() } // Get mmseqs db for MetaEuk if requested @@ -138,7 +143,9 @@ workflow MAG { params.skip_shortread_qc, ) ch_versions = ch_versions.mix(SHORTREAD_PREPROCESSING.out.versions) - ch_multiqc_files = ch_multiqc_files.mix(SHORTREAD_PREPROCESSING.out.multiqc_files.collect { it[1] }.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix( + SHORTREAD_PREPROCESSING.out.multiqc_files.collect { _meta, report -> report }.ifEmpty([]) + ) ch_short_reads = SHORTREAD_PREPROCESSING.out.short_reads ch_short_reads_assembly = SHORTREAD_PREPROCESSING.out.short_reads_assembly } @@ -163,7 +170,9 @@ workflow MAG { params.skip_longread_qc, ) ch_versions = ch_versions.mix(LONGREAD_PREPROCESSING.out.versions) - ch_multiqc_files = ch_multiqc_files.mix(LONGREAD_PREPROCESSING.out.multiqc_files.collect { it[1] }.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix( + LONGREAD_PREPROCESSING.out.multiqc_files.collect { _meta, report -> report }.ifEmpty([]) + ) ch_long_reads = LONGREAD_PREPROCESSING.out.long_reads /* @@ -194,10 +203,10 @@ workflow MAG { GUNZIP_ASSEMBLYINPUT(ch_assemblies_split.gzipped) ch_versions = ch_versions.mix(GUNZIP_ASSEMBLYINPUT.out.versions) - ch_assemblies = Channel.empty() + ch_assemblies = channel.empty() ch_assemblies = ch_assemblies.mix(ch_assemblies_split.ungzip, GUNZIP_ASSEMBLYINPUT.out.gunzip) - ch_shortread_assemblies = ch_assemblies.filter { it[0].assembler.toUpperCase() in ['SPADES', 'SPADESHYBRID', 'MEGAHIT'] } - ch_longread_assemblies = ch_assemblies.filter { it[0].assembler.toUpperCase() in ['FLYE', 'METAMDBG'] } + ch_shortread_assemblies = ch_assemblies.filter { meta, _contigs -> meta.assembler.toUpperCase() in ['SPADES', 'SPADESHYBRID', 'MEGAHIT'] } + ch_longread_assemblies = ch_assemblies.filter { meta, _contigs -> meta.assembler.toUpperCase() in ['FLYE', 'METAMDBG'] } } if (!params.skip_quast) { @@ -268,7 +277,11 @@ workflow MAG { // Make sure if running aDNA subworkflow to use the damage-corrected contigs for higher accuracy if (params.ancient_dna && !params.skip_ancient_damagecorrection) { BINNING( - BINNING_PREPARATION.out.grouped_mappings.join(ANCIENT_DNA_ASSEMBLY_VALIDATION.out.contigs_recalled).map { it -> [it[0], it[4], it[2], it[3]] }, + BINNING_PREPARATION.out.grouped_mappings + .join(ANCIENT_DNA_ASSEMBLY_VALIDATION.out.contigs_recalled) + .map { meta, _contigs, bams, bais, corrected_contigs -> + [meta, corrected_contigs, bams, bais] + }, params.bin_min_size, params.bin_max_size, ) @@ -382,7 +395,7 @@ workflow MAG { * Bin QC subworkflows: for checking bin completeness with either BUSCO, CHECKM, CHECKM2, and/or GUNC */ - ch_bin_qc_summary = Channel.empty() + ch_bin_qc_summary = channel.empty() if (!params.skip_binqc) { BIN_QC(ch_input_for_postbinning) ch_versions = ch_versions.mix(BIN_QC.out.versions) @@ -392,7 +405,7 @@ workflow MAG { ch_checkm2_summary = BIN_QC.out.checkm2_summary } - ch_quast_bins_summary = Channel.empty() + ch_quast_bins_summary = channel.empty() if (!params.skip_quast) { ch_input_for_quast_bins = ch_input_for_postbinning .groupTuple() @@ -415,7 +428,7 @@ workflow MAG { /* * CATPACK: bin / contig taxonomic classification */ - ch_catpack_summary = Channel.empty() + ch_catpack_summary = channel.empty() if (params.cat_db || params.cat_db_generate) { CATPACK( ch_input_for_postbinning_bins, @@ -430,8 +443,8 @@ workflow MAG { * GTDB-tk: taxonomic classifications using GTDB reference */ - if (!params.skip_gtdbtk) { - ch_gtdbtk_summary = Channel.empty() + if (!params.skip_gtdbtk && !params.skip_binqc && (params.run_busco || params.run_checkm || params.run_checkm2)) { + ch_gtdbtk_summary = channel.empty() if (gtdb) { ch_gtdb_bins = ch_input_for_postbinning.filter { meta, _bins -> @@ -448,7 +461,7 @@ workflow MAG { } } else { - ch_gtdbtk_summary = Channel.empty() + ch_gtdbtk_summary = channel.empty() } if ((!params.skip_binqc) || !params.skip_quast || !params.skip_gtdbtk) { BIN_SUMMARY( @@ -462,6 +475,13 @@ workflow MAG { ) ch_versions = ch_versions.mix(BIN_SUMMARY.out.versions) } + if (params.generate_bigmag_file) { + PREPARE_BIGMAG_SUMMARY( + BIN_SUMMARY.out.summary, + BIN_QC.out.gunc_summary, + ) + ch_versions = ch_versions.mix(PREPARE_BIGMAG_SUMMARY.out.versions) + } /* * Prokka: Genome annotation @@ -505,7 +525,25 @@ workflow MAG { // // Collate and save software versions // - softwareVersionsToYAML(ch_versions) + def topic_versions = channel.topic("versions") + .distinct() + .branch { entry -> + versions_file: entry instanceof Path + versions_tuple: true + } + + def topic_versions_string = topic_versions.versions_tuple + .map { process, tool, version -> + [process[process.lastIndexOf(':') + 1..-1], " ${tool}: ${version}"] + } + .groupTuple(by: 0) + .map { process, tool_versions -> + tool_versions.unique().sort() + "${process}:\n${tool_versions.join('\n')}" + } + + softwareVersionsToYAML(ch_versions.mix(topic_versions.versions_file)) + .mix(topic_versions_string) .collectFile( storeDir: "${params.outdir}/pipeline_info", name: 'nf_core_' + 'mag_software_' + 'mqc_' + 'versions.yml', @@ -518,29 +556,29 @@ workflow MAG { // // MODULE: MultiQC // - ch_multiqc_config = Channel.fromPath( + ch_multiqc_config = channel.fromPath( "${projectDir}/assets/multiqc_config.yml", checkIfExists: true ) ch_multiqc_custom_config = params.multiqc_config - ? Channel.fromPath(params.multiqc_config, checkIfExists: true) - : Channel.empty() + ? channel.fromPath(params.multiqc_config, checkIfExists: true) + : channel.empty() ch_multiqc_logo = params.multiqc_logo - ? Channel.fromPath(params.multiqc_logo, checkIfExists: true) - : Channel.fromPath("${workflow.projectDir}/docs/images/mag_logo_mascot_light.png", checkIfExists: true) + ? channel.fromPath(params.multiqc_logo, checkIfExists: true) + : channel.fromPath("${workflow.projectDir}/docs/images/mag_logo_mascot_light.png", checkIfExists: true) summary_params = paramsSummaryMap( workflow, parameters_schema: "nextflow_schema.json" ) - ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) + ch_workflow_summary = channel.value(paramsSummaryMultiqc(summary_params)) ch_multiqc_files = ch_multiqc_files.mix( ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml') ) ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("${projectDir}/assets/methods_description_template.yml", checkIfExists: true) - ch_methods_description = Channel.value( + ch_methods_description = channel.value( methodsDescriptionText(ch_multiqc_custom_methods_description) ) @@ -564,15 +602,18 @@ workflow MAG { ch_multiqc_files = ch_multiqc_files.mix(BINNING_PREPARATION.out.multiqc_files.collect().ifEmpty([])) } - if (!params.skip_binning && !params.skip_prokka) { - ch_multiqc_files = ch_multiqc_files.mix(PROKKA.out.txt.collect { it[1] }.ifEmpty([])) - } - if (!params.skip_binning && !params.skip_binqc) { - ch_multiqc_files = ch_multiqc_files.mix(BIN_QC.out.multiqc_files.collect().ifEmpty([])) - } + if (!params.skip_binning) { + if (!params.skip_prokka) { + ch_multiqc_files = ch_multiqc_files.mix(PROKKA.out.txt.collect { _meta, report -> report }.ifEmpty([])) + } - if (!params.skip_gtdbtk) { - ch_multiqc_files = ch_multiqc_files.mix(GTDBTK.out.multiqc_files.collect().ifEmpty([])) + if (!params.skip_binqc) { + ch_multiqc_files = ch_multiqc_files.mix(BIN_QC.out.multiqc_files.collect().ifEmpty([])) + } + + if (!params.skip_gtdbtk) { + ch_multiqc_files = ch_multiqc_files.mix(GTDBTK.out.multiqc_files.collect().ifEmpty([])) + } } MULTIQC(