From be258042cadfab4761515ac8f916037d4efc5f49 Mon Sep 17 00:00:00 2001 From: Vini Salazar <17276653+vinisalazar@users.noreply.github.com> Date: Tue, 12 May 2026 14:43:18 +1000 Subject: [PATCH 1/9] fix: wrap ext.prefix ternary inside single closure --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index bd46eca..a576ec1 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -56,7 +56,7 @@ process { } withName: FMHFUNPROFILER { ext.args = { "${meta.db_params}" } - ext.prefix = params.perform_runmerging ? { "${meta.id}_${meta.db_name}.fmhfunprofiler" } : { "${meta.id}_${meta.run_accession}_${meta.db_name}.fmhfunprofiler" } + ext.prefix = { params.perform_runmerging ? "${meta.id}_${meta.db_name}.fmhfunprofiler" : "${meta.id}_${meta.run_accession}_${meta.db_name}.fmhfunprofiler" } publishDir = [ path: { "${params.outdir}/fmhfunprofiler/${meta.db_name}/" }, mode: params.publish_dir_mode, From d1fa49dff384872e0ff12319ec2b45de3445b1af Mon Sep 17 00:00:00 2001 From: Vini Salazar <17276653+vinisalazar@users.noreply.github.com> Date: Tue, 12 May 2026 14:43:24 +1000 Subject: [PATCH 2/9] fix(fmhfunprofiler): fix typo, remove TODOs, fix version string --- modules/local/fmhfunprofiler/main.nf | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/modules/local/fmhfunprofiler/main.nf b/modules/local/fmhfunprofiler/main.nf index 5478b65..1cdf28a 100644 --- a/modules/local/fmhfunprofiler/main.nf +++ b/modules/local/fmhfunprofiler/main.nf @@ -10,10 +10,8 @@ process FMHFUNPROFILER { tuple val(dbmeta), path(fmhfunprofiler_db) output: - // TODO nf-core: Named file extensions MUST be emitted for ALL output channels - tuple val(meta), path("*.fmhfuncprofiler.ko"), emit: ko - // TODO nf-core: List additional required output channels/values here - tuple val("${task.process}"), val('fmh-funprofiler'), val("ghcr.io/vdblab/fmhfunprofiler:20250930a"), emit: versions_fmhfunprofiler, topic: versions + tuple val(meta), path("*.fmhfunprofiler.ko"), emit: ko + tuple val("${task.process}"), val('fmh-funprofiler'), val("20250930a"), emit: versions_fmhfunprofiler, topic: versions when: task.ext.when == null || task.ext.when @@ -29,7 +27,7 @@ process FMHFUNPROFILER { ${fastqs} \\ ${fmhfunprofiler_db} \\ ${args} \\ - ${prefix}.fmhfuncprofiler.ko + ${prefix}.fmhfunprofiler.ko """ @@ -37,7 +35,7 @@ process FMHFUNPROFILER { def args = dbmeta.db_params def prefix = task.ext.prefix ?: "${meta.id}" """ - echo ${args} > ${prefix}.fmhfuncprofiler.ko + echo ${args} > ${prefix}.fmhfunprofiler.ko """ } From ab360d1eadd18f05e376176203c75ee335ee1147 Mon Sep 17 00:00:00 2001 From: Vini Salazar <17276653+vinisalazar@users.noreply.github.com> Date: Tue, 12 May 2026 14:43:26 +1000 Subject: [PATCH 3/9] fix(fmhfunprofiler): remove TODO comments from tests --- modules/local/fmhfunprofiler/tests/main.nf.test | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/local/fmhfunprofiler/tests/main.nf.test b/modules/local/fmhfunprofiler/tests/main.nf.test index e5cceef..91caadf 100644 --- a/modules/local/fmhfunprofiler/tests/main.nf.test +++ b/modules/local/fmhfunprofiler/tests/main.nf.test @@ -27,7 +27,6 @@ nextflow_process { when { process { """ - // TODO nf-core: define inputs of the process here. Example: input[0]= CONCAT_ALL.out[0] input[1] = Channel.of([[db_params:"11 1000"],file(params.pipelines_testdata_base_path + 'funcprofiler/data/database/fmhfunprofiler/KOs_sketched_scaled_1000_demo.sig.zip')]) @@ -64,7 +63,6 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out).match() } - //TODO nf-core: Add all required assertions to verify the test output. ) } From 0bdc1ab071a57c090200f5eaabd03f37aa1bdf82 Mon Sep 17 00:00:00 2001 From: Vini Salazar <17276653+vinisalazar@users.noreply.github.com> Date: Tue, 12 May 2026 14:43:31 +1000 Subject: [PATCH 4/9] fix(fmhfunprofiler): rewrite meta.yml with correct inputs/outputs --- modules/local/fmhfunprofiler/meta.yml | 65 ++++++++++++--------------- 1 file changed, 28 insertions(+), 37 deletions(-) diff --git a/modules/local/fmhfunprofiler/meta.yml b/modules/local/fmhfunprofiler/meta.yml index e811862..5e5c2cf 100644 --- a/modules/local/fmhfunprofiler/meta.yml +++ b/modules/local/fmhfunprofiler/meta.yml @@ -1,61 +1,52 @@ # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json -# # TODO nf-core: Add a description of the module and list keywords name: "fmhfunprofiler" -description: write your description here +description: FracMinHash-based functional profiler that assigns reads to KEGG Orthology (KO) categories using sketch databases. keywords: - - sort - - example - - genomics + - functional profiling + - sketch + - KEGG + - metagenomics tools: - ## TODO nf-core: Add a description and other details for the software below - "fmhfunprofiler": - description: "" - homepage: "" - documentation: "" - tool_dev_url: "" + description: "Rapid sketch-based functional profiling of metagenomic reads against KEGG Orthology databases using FracMinHash sketching." + homepage: "https://github.com/vdblab/fmhfunprofiler" + documentation: "https://github.com/vdblab/fmhfunprofiler" + tool_dev_url: "https://github.com/vdblab/fmhfunprofiler" doi: "" - licence: null + licence: ["MIT"] identifier: null input: - ### TODO nf-core: Add a description of all of the variables used as input - - meta: type: map description: | Groovy Map containing sample information - e.g. `[ id:'sample1' ]` - - bam: + e.g. `[ id:'sample1', single_end:false ]` + - fastqs: type: file - description: Sorted BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - ontologies: - - edam: "http://edamontology.org/format_2572" # BAM - - edam: "http://edamontology.org/format_2573" # CRAM - - edam: "http://edamontology.org/format_3462" # SAM + description: One or more gzipped FASTQ (or FASTA) files for the sample. + pattern: "*.{fastq.gz,fq.gz,fa.gz,fasta.gz}" + - - dbmeta: + type: map + description: | + Groovy Map containing database metadata, including db_params (space-separated kmer and sketch scale integers) + e.g. `[ db_name:'kegg_v1', db_params:'11 1000' ]` + - fmhfunprofiler_db: + type: file + description: FracMinHash sketch database (.sig.zip) built against KEGG Orthology entries. + pattern: "*.sig.zip" output: - ### TODO nf-core: Add a description of all of the variables used as output - bam: - - - meta: + - ko: + - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1' ]` - - "*.bam": + - "*.fmhfunprofiler.ko": type: file - description: Sorted BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - ontologies: - - edam: "http://edamontology.org/format_2572" # BAM - - edam: "http://edamontology.org/format_2573" # CRAM - - edam: "http://edamontology.org/format_3462" # SAM - versions: - - "versions.yml": - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: "http://edamontology.org/format_3750" # YAML + description: Tab-separated KO abundance table for the sample. + pattern: "*.fmhfunprofiler.ko" authors: - "@nickp60" From 584b2f1c1144f442267dfdb8eb7b5ade5e84c998 Mon Sep 17 00:00:00 2001 From: Vini Salazar <17276653+vinisalazar@users.noreply.github.com> Date: Tue, 12 May 2026 14:43:33 +1000 Subject: [PATCH 5/9] docs: rewrite output.md per nf-core conventions --- docs/output.md | 89 ++++++++++---------------------------------------- 1 file changed, 18 insertions(+), 71 deletions(-) diff --git a/docs/output.md b/docs/output.md index b5a7710..dfb1aa1 100644 --- a/docs/output.md +++ b/docs/output.md @@ -8,7 +8,7 @@ The directories listed below will be created in the results directory after the ## Pipeline overview -The pipeline processes data using the following steps: +The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: - [FastQC](#fastqc) - Raw read QC and preprocessing - [HUMANn v3 / v4](#humann-v3--v4) - Functional profiling via MetaPhlAn + HUMANn @@ -20,21 +20,21 @@ The pipeline processes data using the following steps: - [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution -## Other than FastQC, MultiQC and pipeline information, all other steps (the profilers) are off by default, and must be switched on manually. +:::note +Other than FastQC, MultiQC and pipeline information, all other steps (the profilers) are off by default, and must be switched on manually. +::: ### FastQC -- [Short reads QC and preprocessing](https://nf-co.re/subworkflows/fastq_shortreads_preprocess_qc/), see [Output section](https://nf-co.re/subworkflows/fastq_shortreads_preprocess_qc/#output) for details. -- Long reads QC and preprocessing (work in progress) +[FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content, adapter contamination, and overrepresented sequences. For further reading and documentation see the [FastQC help pages](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). ---- +- `fastqc/` + - `*_fastqc.html`: FastQC report containing quality metrics for each sample. + - `*_fastqc.zip`: Zip archive containing the FastQC report and data files. ### HUMANn v3 / v4 -Enabled with `--run_humann_v3` or `--run_humann_v4`. Each sample is first run through MetaPhlAn to generate a taxonomic profile, which guides HUMANn functional profiling. - -
-Output files +[HUMANn](https://huttenhower.sph.harvard.edu/humann/) (HMP Unified Metabolic Analysis Network) is a method for efficiently and accurately profiling the presence/absence and abundance of microbial pathways in a community from metagenomic or metatranscriptomic sequencing data. Enabled with `--run_humann_v3` or `--run_humann_v4`. Each sample is first run through MetaPhlAn to generate a taxonomic profile, which guides HUMANn functional profiling. - `humann_v3//` or `humann_v4//` - `*_genefamilies.tsv`: Gene family abundances in reads per kilobase (RPK), stratified by contributing species. @@ -43,116 +43,63 @@ Enabled with `--run_humann_v3` or `--run_humann_v4`. Each sample is first run th - `metaphlan//` - `*_profile.txt`: Species-level taxonomic abundance profile used as input to HUMANn. -
- ---- - ### FMH FunProfiler -Enabled with `--run_fmhfunprofiler`. Uses FracMinHash sketching to rapidly assign reads to functional categories. - -
-Output files +[FMH FunProfiler](https://github.com/vdblab/fmhfunprofiler) uses FracMinHash sketching to rapidly assign reads to KEGG Orthology (KO) functional categories. Enabled with `--run_fmhfunprofiler`. - `fmhfunprofiler//` - - `*.ko.txt`: KO (KEGG Orthology) abundance table for the sample. - -
- ---- + - `*.fmhfunprofiler.ko`: KO (KEGG Orthology) abundance table for the sample. ### mifaser -Enabled with `--run_mifaser`. Maps reads to functional databases at the protein level to produce enzyme function profiles. - -
-Output files +[mifaser](https://bromberglab.org/project/mifaser/) maps reads to functional databases at the protein level to produce enzyme function profiles. Enabled with `--run_mifaser`. - `mifaser///` - `analysis.tsv`: Tab-separated table of functional assignments with read counts per enzyme function (EC number). - `analysis.log`: Log file with run statistics including number of reads processed and assigned. -
- ---- - ### DIAMOND blastx -Enabled with `--run_diamond`. Performs fast translated alignment of metagenomic reads against a protein reference database. Each read is aligned in all six reading frames and only significant hits are reported. - -
-Output files +[DIAMOND](https://github.com/bbuchfink/diamond) performs fast translated alignment of (meta)genomic reads against a protein reference database. Each read is aligned in all six reading frames and only significant hits are reported. Enabled with `--run_diamond`. - `diamond//` - `*.tsv`: Tabular alignment results (BLAST tabular format 6) with one row per query-subject hit. - `*.log`: DIAMOND run log containing alignment statistics (query count, alignment rate, etc.). -
- -Requires a pre-built `.dmnd` database (see [usage docs](usage.md#diamond-blastx)). - ---- - ### EggNOG-mapper -Enabled with `--run_eggnogmapper`. Assigns functional annotations to sequences by mapping them to orthologous groups in the EggNOG database. - -
-Output files +[EggNOG-mapper](https://github.com/eggnogdb/eggnog-mapper) assigns functional annotations to sequences by mapping them to orthologous groups in the EggNOG database. Enabled with `--run_eggnogmapper`. - `eggnogmapper//` - `*.emapper.annotations`: TSV file with functional annotations per query sequence, including GO terms, KEGG pathways, COG categories, and more. - `*.emapper.seed_orthologs`: TSV linking query sequences to their best seed orthologs _(optional, produced when search is performed)_. - - `*.emapper.hits`: TSV with raw search hits from the search phase . - -
- ---- + - `*.emapper.hits`: TSV with raw search hits from the search phase. ### RGI BWT -Enabled with `--run_rgi`. Aligns reads against the CARD database using Bowtie2/BWA to identify antimicrobial resistance genes. - -
-Output files +[RGI](https://github.com/arpcard/rgi) (Resistance Gene Identifier) aligns reads against the CARD database using Bowtie2/BWA to identify antimicrobial resistance genes. Enabled with `--run_rgi`. - `rgi//` - `*.txt`: Tab-separated AMR gene hit table with gene family, resistance mechanism, drug class, and read counts. - `*.json`: Full RGI output in JSON format with detailed per-hit annotations. -
- ---- - ### MultiQC -
-Output files +[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. - `multiqc/` - `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. - `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. - `multiqc_plots/`: directory containing static images from the report in various formats. -
- -[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. - Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . ---- - ### Pipeline information -
-Output files +[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. - `pipeline_info/` - Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. - Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.yml`. The `pipeline_report*` files will only be present if the `--email` / `--email_on_fail` parameter's are used when running the pipeline. - Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. - Parameters used by the pipeline run: `params.json`. - -
- -[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. From a5a09034dbdfd04be88f813b0ac74c297960007d Mon Sep 17 00:00:00 2001 From: Vini Salazar <17276653+vinisalazar@users.noreply.github.com> Date: Tue, 12 May 2026 14:43:38 +1000 Subject: [PATCH 6/9] docs: convert GitHub admonitions to nf-core website admonitions --- docs/usage.md | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 6c2c875..6bfc7a0 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -27,7 +27,9 @@ The samplesheet is a comma-separated file with the following columns: | `fastq_2` | No | Full path to gzipped FASTQ file for read 2 (paired-end only). Leave empty for single-end or Nanopore reads. | | `fasta` | No\* | Full path to gzipped FASTA file. Provide instead of FASTQ if your data is already assembled. Must end in `.fa.gz`, `.fna.gz`, or `.fasta.gz`. | +:::note > \*Either `fastq_1` or `fasta` must be provided for each row. +::: ### Example samplesheet @@ -89,9 +91,11 @@ eggnogmapper,eggnog_v5,eggnogmapper_db,diamond,,/data/databases/eggnog_mapper/eg eggnogmapper,eggnog_v5,eggnogmapper_data_dir,,,/data/databases/eggnog_mapper/data ``` -> The EggNOG data directory can be downloaded with `download_eggnog_data.py` from the eggnog-mapper package. See the [EggNOG-mapper documentation](https://github.com/eggnogdb/eggnog-mapper/wiki) for details. +:::note +The EggNOG data directory can be downloaded with `download_eggnog_data.py` from the eggnog-mapper package. See the [EggNOG-mapper documentation](https://github.com/eggnogdb/eggnog-mapper/wiki) for details. +::: -### mifaser +### Mifaser [mifaser](https://bromberglab.org/project/mifaser/) performs functional profiling by mapping reads to functional databases at the protein level. It supports both short-read and long-read data. Enable with `--run_mifaser`. @@ -140,8 +144,9 @@ tool,db_name,db_entity,db_params,db_type,db_path rgi,card_v3,,,,/data/databases/card ``` -> [!NOTE] -> Wildcard variant databases are not currently supported by the pipeline. Only the core CARD database is used. +:::note +Wildcard variant databases are not currently supported by the pipeline. Only the core CARD database is used. +::: ### DIAMOND blastx @@ -158,8 +163,9 @@ diamond makedb --in proteins.faa --db proteins See the [DIAMOND makedb documentation](https://github.com/bbuchfink/diamond/wiki/3.-Command-line-options#makedb-options) for all available options (e.g. adding taxonomy, setting block size). -> [!IMPORTANT] -> The path should point to the **directory** containing the `.dmnd` file, not the file itself. The pipeline will automatically locate the `.dmnd` file within that directory. +:::warning +The path should point to the **directory** containing the `.dmnd` file, not the file itself. The pipeline will automatically locate the `.dmnd` file within that directory. +::: ## Running the pipeline @@ -206,8 +212,9 @@ If you wish to repeatedly use the same parameters for multiple runs, rather than Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `. -> [!WARNING] -> Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). +:::warning +Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). +::: The above pipeline run specified with a params file in yaml format: @@ -244,13 +251,15 @@ This version number will be logged in reports when you run the pipeline, so that To further assist in reproducibility, you can use share and reuse [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. -> [!TIP] -> If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. +:::tip +If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. +::: ## Core Nextflow arguments -> [!NOTE] -> These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen) +:::note +These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen) +::: ### `-profile` @@ -258,8 +267,9 @@ Use this parameter to choose a configuration profile. Profiles can give configur Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Apptainer, Conda) - see below. -> [!IMPORTANT] -> We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. +:::warning +We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. +::: The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to check if your system is supported, please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). From 834ae70b25239bdc1cf1a582871cfa0eb29e2a8a Mon Sep 17 00:00:00 2001 From: Vini Salazar <17276653+vinisalazar@users.noreply.github.com> Date: Tue, 12 May 2026 14:55:54 +1000 Subject: [PATCH 7/9] chore: sync RO-Crate description from README --- ro-crate-metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 1e8ec7d..0acf7d1 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -23,7 +23,7 @@ "@type": "Dataset", "creativeWorkStatus": "InProgress", "datePublished": "2025-08-13T15:15:55+00:00", - "description": "

\n \n \n \"nf-core/funcprofiler\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/funcprofiler/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/funcprofiler/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/funcprofiler/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/funcprofiler/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/funcprofiler/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/funcprofiler)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23funcprofiler-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/funcprofiler)[![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## Introduction\n\n\n\n**nf-core/funcprofiler** is a bioinformatics pipeline for read-based functional profiling of microbiome sequencing data. It accepts short-read (Illumina) and long-read (Oxford Nanopore) FASTQ files and runs one or more functional profilers against user-supplied databases, producing gene family abundances, pathway abundances, pathway coverages, and antimicrobial resistance profiles.\n\n### Pipeline Summary\n\n![](./assets/pipeline_light.svg)\n\nSupported profilers:\n\n1. [**HUMANn v3**](https://huttenhower.sph.harvard.edu/humann/) \u2014 functional profiling via MetaPhlAn + HUMANn 3 (`--run_humann_v3`)\n2. [**HUMANn v4**](https://huttenhower.sph.harvard.edu/humann/) \u2014 functional profiling via MetaPhlAn + HUMANn 4 (`--run_humann_v4`)\n3. [**FMH FunProfiler**](https://github.com/dib-lab/fmh_funprofiler) \u2014 sketch-based functional profiling (`--run_fmhfunprofiler`)\n4. [**RGI**](https://github.com/arpcard/rgi) \u2014 antimicrobial resistance gene identification (`--run_rgi`, available)\n5. [**mifaser**](https://bromberglab.org/project/mifaser/) \u2014 functional profiling via mifaser (`--run_mifaser`, available)\n6. [**DIAMOND**](https://github.com/bbuchfink/diamond) \u2014 alignment with DIAMOND blastx (`--run_diamond`, available)\n7. [**eggNOG-mapper**](https://academic.oup.com/mbe/article/38/12/5825/6379734) \u2014 functional annotation, orthology assignments and domain prediction (`--run_eggnogmapper`, available)\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\nFirst, prepare a samplesheet with your input data:\n\n`samplesheet.csv`:\n\n```csv\nsample,run_accession,instrument_platform,fastq_1,fastq_2,fasta\nSAMPLE1,RUN1,ILLUMINA,/path/to/sample1_R1.fastq.gz,/path/to/sample1_R2.fastq.gz,\nSAMPLE2,RUN1,OXFORD_NANOPORE,/path/to/sample2.fastq.gz,,\n```\n\nEach row represents a sequencing run. Multiple rows with the same `sample` and different `run_accession` values will be merged before profiling.\n\nThen prepare a databases sheet \u2014 see [docs/usage.md](docs/usage.md) for the full format. Here is an abbreviated example for running HUMANn (which requires 4 databases):\n\n`databases.csv`\n\n```csv\ntool,db_name,db_entity,db_params,db_type,db_path\nhumann_v3,uniref90_v3,humann_metaphlan,,,/data/databases/metaphlan_db\nhumann_v3,uniref90_v3,humann_nucleotide,,,/data/databases/chocophlan\nhumann_v3,uniref90_v3,humann_protein,,,/data/databases/uniref90_diamond\nhumann_v3,uniref90_v3,humann_utility,,,/data/databases/utility_mapping\n```\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/funcprofiler \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \\\n --databases databases.csv \\\n --run_humann_v3\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/funcprofiler/usage) and the [parameter documentation](https://nf-co.re/funcprofiler/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/funcprofiler/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/funcprofiler/output).\n\n## Credits\n\nnf-core/funcprofiler was written by Nick Waters, Vini Salazar, Yixuan Yang.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#funcprofiler` channel](https://nfcore.slack.com/channels/funcprofiler) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "description": "

\n \n \n \"nf-core/funcprofiler\"\n \n

\n\n[![GitHub Actions CI Status](https://github.com/nf-core/funcprofiler/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-core/funcprofiler/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-core/funcprofiler/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/funcprofiler/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/funcprofiler/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/funcprofiler)\n\n[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23funcprofiler-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/funcprofiler)[![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## Introduction\n\n\n\n**nf-core/funcprofiler** is a bioinformatics pipeline for read-based functional profiling of microbiome sequencing data. It accepts short-read (Illumina) and long-read (Oxford Nanopore) FASTQ files and runs one or more functional profilers against user-supplied databases, producing gene family abundances, pathway abundances, pathway coverages, and antimicrobial resistance profiles.\n\n### Pipeline Summary\n\n![](./assets/pipeline_light.svg)\n\nSupported profilers:\n\n1. [**HUMANn v3**](https://huttenhower.sph.harvard.edu/humann/) \u2014 functional profiling via MetaPhlAn + HUMANn 3 (`--run_humann_v3`)\n2. [**HUMANn v4**](https://huttenhower.sph.harvard.edu/humann/) \u2014 functional profiling via MetaPhlAn + HUMANn 4 (`--run_humann_v4`)\n3. [**FMH FunProfiler**](https://github.com/dib-lab/fmh_funprofiler) \u2014 sketch-based functional profiling (`--run_fmhfunprofiler`)\n4. [**RGI**](https://github.com/arpcard/rgi) \u2014 antimicrobial resistance gene identification (`--run_rgi`, available)\n5. [**mifaser**](https://bromberglab.org/project/mifaser/) \u2014 functional profiling via mifaser (`--run_mifaser`, available)\n6. [**DIAMOND**](https://github.com/bbuchfink/diamond) \u2014 alignment with DIAMOND blastx (`--run_diamond`, available)\n7. [**eggNOG-mapper**](https://academic.oup.com/mbe/article/38/12/5825/6379734) \u2014 functional annotation, orthology assignments and domain prediction (`--run_eggnogmapper`, available)\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\nFirst, prepare a samplesheet with your input data:\n\n`samplesheet.csv`:\n\n```csv\nsample,run_accession,instrument_platform,fastq_1,fastq_2,fasta\nSAMPLE1,RUN1,ILLUMINA,/path/to/sample1_R1.fastq.gz,/path/to/sample1_R2.fastq.gz,\nSAMPLE2,RUN1,OXFORD_NANOPORE,/path/to/sample2.fastq.gz,,\n```\n\nEach row represents a sequencing run. Multiple rows with the same `sample` and different `run_accession` values will be merged before profiling.\n\nThen prepare a databases sheet \u2014 see [docs/usage.md](docs/usage.md) for the full format. Here is an abbreviated example for running HUMANn (which requires 4 databases):\n\n`databases.csv`\n\n```csv\ntool,db_name,db_entity,db_params,db_type,db_path\nhumann_v3,uniref90_v3,humann_metaphlan,,,/data/databases/metaphlan_db\nhumann_v3,uniref90_v3,humann_nucleotide,,,/data/databases/chocophlan\nhumann_v3,uniref90_v3,humann_protein,,,/data/databases/uniref90_diamond\nhumann_v3,uniref90_v3,humann_utility,,,/data/databases/utility_mapping\n```\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-core/funcprofiler \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \\\n --databases databases.csv \\\n --run_humann_v3\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/funcprofiler/usage) and the [parameter documentation](https://nf-co.re/funcprofiler/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/funcprofiler/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/funcprofiler/output).\n\n## Credits\n\nnf-core/funcprofiler was written by Nick Waters, Vini Salazar, Yixuan Yang, Mirae Baichoo.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\n\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\nFor further information or help, don't hesitate to get in touch on the [Slack `#funcprofiler` channel](https://nfcore.slack.com/channels/funcprofiler) (you can join with [this invite](https://nf-co.re/join/slack)).\n\n## Citations\n\n\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nYou can cite the `nf-core` publication as follows:\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { "@id": "main.nf" From ff12832601d20eab68b907aad4c58392f28278c2 Mon Sep 17 00:00:00 2001 From: Vini Salazar <17276653+vinisalazar@users.noreply.github.com> Date: Tue, 12 May 2026 14:59:51 +1000 Subject: [PATCH 8/9] Apply pre-commit --- docs/usage.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 6bfc7a0..76ac1ec 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -28,8 +28,9 @@ The samplesheet is a comma-separated file with the following columns: | `fasta` | No\* | Full path to gzipped FASTA file. Provide instead of FASTQ if your data is already assembled. Must end in `.fa.gz`, `.fna.gz`, or `.fasta.gz`. | :::note + > \*Either `fastq_1` or `fasta` must be provided for each row. -::: +> ::: ### Example samplesheet From 630bfc252525b5009f845a07ebeb5fc8b76ef0bb Mon Sep 17 00:00:00 2001 From: Vini Salazar <17276653+vinisalazar@users.noreply.github.com> Date: Tue, 12 May 2026 15:21:35 +1000 Subject: [PATCH 9/9] Update snapshots --- .../local/fmhfunprofiler/tests/main.nf.test.snap | 16 ++++++++-------- .../local/profile/tests/main.nf.test.snap | 8 ++++---- tests/default.nf.test.snap | 8 ++++---- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/modules/local/fmhfunprofiler/tests/main.nf.test.snap b/modules/local/fmhfunprofiler/tests/main.nf.test.snap index b47ac35..0fa414e 100644 --- a/modules/local/fmhfunprofiler/tests/main.nf.test.snap +++ b/modules/local/fmhfunprofiler/tests/main.nf.test.snap @@ -9,14 +9,14 @@ "single_end": true, "db_name": "demo" }, - "test_demo.fmhfunprofiler.fmhfuncprofiler.ko:md5,82ff17528f0b59f02d8c72fd4beef144" + "test_demo.fmhfunprofiler.fmhfunprofiler.ko:md5,82ff17528f0b59f02d8c72fd4beef144" ] ], "1": [ [ "FMHFUNPROFILER", "fmh-funprofiler", - "ghcr.io/vdblab/fmhfunprofiler:20250930a" + "20250930a" ] ], "ko": [ @@ -26,14 +26,14 @@ "single_end": true, "db_name": "demo" }, - "test_demo.fmhfunprofiler.fmhfuncprofiler.ko:md5,82ff17528f0b59f02d8c72fd4beef144" + "test_demo.fmhfunprofiler.fmhfunprofiler.ko:md5,82ff17528f0b59f02d8c72fd4beef144" ] ], "versions_fmhfunprofiler": [ [ "FMHFUNPROFILER", "fmh-funprofiler", - "ghcr.io/vdblab/fmhfunprofiler:20250930a" + "20250930a" ] ] } @@ -54,14 +54,14 @@ "single_end": true, "db_name": "demo" }, - "test_demo.fmhfunprofiler.fmhfuncprofiler.ko:md5,16b7196a90c1d2fd3e3109c8d252cd08" + "test_demo.fmhfunprofiler.fmhfunprofiler.ko:md5,16b7196a90c1d2fd3e3109c8d252cd08" ] ], "1": [ [ "FMHFUNPROFILER", "fmh-funprofiler", - "ghcr.io/vdblab/fmhfunprofiler:20250930a" + "20250930a" ] ], "ko": [ @@ -71,14 +71,14 @@ "single_end": true, "db_name": "demo" }, - "test_demo.fmhfunprofiler.fmhfuncprofiler.ko:md5,16b7196a90c1d2fd3e3109c8d252cd08" + "test_demo.fmhfunprofiler.fmhfunprofiler.ko:md5,16b7196a90c1d2fd3e3109c8d252cd08" ] ], "versions_fmhfunprofiler": [ [ "FMHFUNPROFILER", "fmh-funprofiler", - "ghcr.io/vdblab/fmhfunprofiler:20250930a" + "20250930a" ] ] } diff --git a/subworkflows/local/profile/tests/main.nf.test.snap b/subworkflows/local/profile/tests/main.nf.test.snap index 187ebac..7641fe6 100644 --- a/subworkflows/local/profile/tests/main.nf.test.snap +++ b/subworkflows/local/profile/tests/main.nf.test.snap @@ -17,7 +17,7 @@ "single_end": true, "instrument_platform": "ILLUMINA" }, - "2612_null.fmhfunprofiler.fmhfuncprofiler.ko:md5,16b7196a90c1d2fd3e3109c8d252cd08" + "2612_null.fmhfunprofiler.fmhfunprofiler.ko:md5,16b7196a90c1d2fd3e3109c8d252cd08" ], [ { @@ -57,7 +57,7 @@ "single_end": true, "instrument_platform": "ILLUMINA" }, - "minigut_null.fmhfunprofiler.fmhfuncprofiler.ko:md5,16b7196a90c1d2fd3e3109c8d252cd08" + "minigut_null.fmhfunprofiler.fmhfunprofiler.ko:md5,16b7196a90c1d2fd3e3109c8d252cd08" ], [ { @@ -108,7 +108,7 @@ "single_end": true, "instrument_platform": "ILLUMINA" }, - "2612_null.fmhfunprofiler.fmhfuncprofiler.ko:md5,16b7196a90c1d2fd3e3109c8d252cd08" + "2612_null.fmhfunprofiler.fmhfunprofiler.ko:md5,16b7196a90c1d2fd3e3109c8d252cd08" ], [ { @@ -148,7 +148,7 @@ "single_end": true, "instrument_platform": "ILLUMINA" }, - "minigut_null.fmhfunprofiler.fmhfuncprofiler.ko:md5,16b7196a90c1d2fd3e3109c8d252cd08" + "minigut_null.fmhfunprofiler.fmhfunprofiler.ko:md5,16b7196a90c1d2fd3e3109c8d252cd08" ], [ { diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index 017d5bc..2b6d91d 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -8,8 +8,8 @@ "cat/minigut.merged.fastq.gz", "fmhfunprofiler", "fmhfunprofiler/null", - "fmhfunprofiler/null/ERR5766181_null.fmhfunprofiler.fmhfuncprofiler.ko", - "fmhfunprofiler/null/minigut_null.fmhfunprofiler.fmhfuncprofiler.ko", + "fmhfunprofiler/null/ERR5766181_null.fmhfunprofiler.fmhfunprofiler.ko", + "fmhfunprofiler/null/minigut_null.fmhfunprofiler.fmhfunprofiler.ko", "humann3", "humann3/ERR5766181_genefamilies.tsv.gz", "humann3/ERR5766181_pathabundance.tsv.gz", @@ -60,8 +60,8 @@ [ "ERR5766181.merged.fastq.gz:md5,6e42a74ec7f9e86d77f2aababeb401fb", "minigut.merged.fastq.gz:md5,1fbae8f5fe6fdfa6552cfca32d9c3129", - "ERR5766181_null.fmhfunprofiler.fmhfuncprofiler.ko:md5,16b7196a90c1d2fd3e3109c8d252cd08", - "minigut_null.fmhfunprofiler.fmhfuncprofiler.ko:md5,16b7196a90c1d2fd3e3109c8d252cd08", + "ERR5766181_null.fmhfunprofiler.fmhfunprofiler.ko:md5,16b7196a90c1d2fd3e3109c8d252cd08", + "minigut_null.fmhfunprofiler.fmhfunprofiler.ko:md5,16b7196a90c1d2fd3e3109c8d252cd08", "ERR5766181_genefamilies.tsv.gz:md5,5be83431bf30c5a8602dbe269ca10271", "ERR5766181_pathabundance.tsv.gz:md5,96af4c4334623d4ad74878276d2bd572", "ERR5766181_pathcoverage.tsv.gz:md5,7f7b3add3ab6334b9cc027dbc8f63c88",