arog-bioinfo/MeeW-Annotation
None
Overview
Latest release: None, Last update: 2026-07-05
Share link: https://snakemake.github.io/snakemake-workflow-catalog?wf=arog-bioinfo/MeeW-Annotation
Quality control: linting: failed formatting: failed
Deployment
Step 1: Install Snakemake and Snakedeploy
Snakemake and Snakedeploy are best installed via the Conda package manager. It is recommended to install conda via Miniforge. Run
conda create -c conda-forge -c bioconda -c nodefaults --name snakemake snakemake snakedeploy
to install both Snakemake and Snakedeploy in an isolated environment. For all following commands ensure that this environment is activated via
conda activate snakemake
For other installation methods, refer to the Snakemake and Snakedeploy documentation.
Step 2: Deploy workflow
With Snakemake and Snakedeploy installed, the workflow can be deployed as follows. First, create an appropriate project working directory on your system and enter it:
mkdir -p path/to/project-workdir
cd path/to/project-workdir
In all following steps, we will assume that you are inside of that directory. Then run
snakedeploy deploy-workflow https://github.com/arog-bioinfo/MeeW-Annotation . --tag None
Snakedeploy will create two folders, workflow and config. The former contains the deployment of the chosen workflow as a Snakemake module, the latter contains configuration files which will be modified in the next step in order to configure the workflow to your needs.
Step 3: Configure workflow
To configure the workflow, adapt config/config.yml to your needs following the instructions below.
Step 4: Run workflow
The deployment method is controlled using the --software-deployment-method (short --sdm) argument.
To run the workflow using apptainer/singularity, use
snakemake --cores all --sdm apptainer
To run the workflow using a combination of conda and apptainer/singularity for software deployment, use
snakemake --cores all --sdm conda apptainer
To run the workflow with automatic deployment of all required software via conda/mamba, use
snakemake --cores all --sdm conda
Snakemake will automatically detect the main Snakefile in the workflow subfolder and execute the workflow module that has been defined by the deployment in step 2.
For further options such as cluster and cloud execution, see the docs.
Step 5: Generate report
After finalizing your data analysis, you can automatically generate an interactive visual HTML report for inspection of results together with parameters and code inside of the browser using
snakemake --report report.zip
Configuration
The following section is imported from the workflow’s config/README.md.
Workflow configuration
The workflow processes one or more Metagenome-Assembled Genomes (MAGs) per run. Configure inputs and tool options in config/config.yaml.
General input
sample_sheet: path to a TSV file containing sample names, input FASTA paths, domains, and optional genome types.
Sample sheet format
The sample sheet is a tab-separated file. Required columns:
sample: unique identifier/name for the MAG or isolate.path: path to the input genome file in FASTA format (.fasta,.fna,.fa).domain: annotation path for the sample. Useprokfor prokaryotic samples andeukfor eukaryotic samples.
Optional columns:
genome_type: usemagfor metagenome-assembled genomes orisolatefor isolate genomes. Missing values default tomag. Funannotate2 is only targeted for eukaryotic isolate genomes, so eukaryotic isolates requiredomain: eukandgenome_type: isolate. Eukaryotic MAGs use the existing MetaEuk/reCOGnizer path.
The workflow dynamically processes all rows defined in this sheet.
Metabolic Modeling handoff
The final workflow targets include results/stage_sheets/annotation_to_metabolic_modeling.tsv for downstream MeeW Metabolic Modeling. This Annotation-owned TSV has exactly two columns, mag and path, and contains one row per prokaryotic MAG/bin (domain: prok) only. Each path value is an absolute path to the corresponding Bakta protein FASTA output at results/bakta/{sample}/{sample}.faa. Eukaryotic samples are deliberately excluded because the current Metabolic Modeling workflow is prokaryotic-only.
Example:
sample path domain genome_type
sample_a data/sample_a.fna prok mag
sample_b data/sample_b.fasta euk mag
fungal_isolate data/fungal_isolate.fasta euk isolate
Optional QA filtering
qa_filter.enabled: whentrue, filter samples before annotation targets are expanded.qa_filter.min_completeness: minimum completeness required for a sample to pass.qa_filter.max_contamination: maximum contamination allowed for a sample to pass.qa_filter.checkm2_reports: CheckM2 TSV reports for prokaryotic samples. Reports must includeName,Completeness, andContamination.qa_filter.eukcc_reports: EukCC CSV reports for eukaryotic samples. Reports must includebin,completeness, andcontamination.qa_filter.missing_sample: behavior when a sample is absent from QA reports. Supported values areerror,keep, anddrop.
Prokaryotic annotation path
prodigal.extra: optional extra options string passed to the Prodigal wrapper.bakta.db: path to the Bakta database directory.bakta.extra: optional extra options string passed to the Bakta wrapper.gtdbtk.enabled: whentrue, run optional GTDB-Tk classification for prokaryotic genomes only. Eukaryotic samples are not staged or classified.gtdbtk.data_dir: path to the GTDB-Tk reference database directory. The recommended path is/home/argomes/resources/gtdbtk_db; the database is not downloaded automatically and this path is only required whengtdbtk.enabledistrue.gtdbtk.extra: optional extra options string passed to the GTDB-Tk wrapper.recognizer_prok.resources_dir: path to the prokaryotic reCOGnizer resources database directory.recognizer_prok.extra: optional extra options string passed to the prokaryotic reCOGnizer wrapper.upimapi.db: UPIMAPI built-in database name to use, for exampleswissprot. Leave empty when usingupimapi.db_custom.upimapi.db_custom: path to a custom UPIMAPI database FASTA. Leave empty when usingupimapi.db.upimapi.resources_dir: path to the UPIMAPI resources database directory.upimapi.extra: optional extra options string passed to the UPIMAPI wrapper.upimapi.skip_db_check_if_exists: whentrue, automatically add--skip-db-checkonly if the selected UPIMAPI database FASTA already exists inupimapi.resources_dirorupimapi.db_customexists.
Eukaryotic annotation path
metaeuk.db: path to the MetaEuk reference database, such as a UniProt database.metaeuk.extra: optional extra options string passed to the MetaEuk wrapper.recognizer_euk.resources_dir: path to the eukaryotic reCOGnizer resources database directory.recognizer_euk.custom_db: path to a KOG/custom database for eukaryotic reCOGnizer. Leave empty to disable a custom eukaryotic database.recognizer_euk.extra: optional extra options string passed to the eukaryotic reCOGnizer wrapper.funannotate2.enabled: whentrue, target Funannotate2 for eukaryotic isolate genomes (domain: euk,genome_type: isolate).funannotate2.db_dir: Funannotate2 database directory. The default is/home/argomes/resources/funannotate2_db.funannotate2.install_db: whentrue, a real workflow run installs missing Funannotate2 databases intofunannotate2.db_dir; dry-runs only plan this step.funannotate2.databases: Funannotate2 database names to install, for exampleall.funannotate2.extra_install: optional extra CLI options passed tofunannotate2 install.funannotate2.species,funannotate2.strain,funannotate2.params,funannotate2.pretrained: optional values passed to Funannotate2 steps when provided.funannotate2.extra_clean,funannotate2.extra_train,funannotate2.extra_predict,funannotate2.extra_annotate: optional extra CLI options for each Funannotate2 step.
Thread presets
threads: dictionary containing computational resource presets.threads.high: thread count for high-resource steps.threads.medium: thread count for medium-resource steps.threads.low: thread count for low-resource steps.
Example config
# ====================
# General Input
# ====================
sample_sheet: "config/samples.tsv"
# ====================
# Quality Filtering
# ====================
qa_filter:
enabled: false
min_completeness: 50.0
max_contamination: 10.0
checkm2_reports: []
eukcc_reports: []
missing_sample: "error"
# ====================
# Prokaryotic Annotation
# ====================
# --------------------
# Prodigal
# --------------------
prodigal:
extra: "-p meta -f gff"
# --------------------
# Bakta
# --------------------
bakta:
db: "resources/bakta_db/db-light"
extra: ""
# --------------------
# GTDB-Tk
# --------------------
gtdbtk:
enabled: false
data_dir: "/home/argomes/resources/gtdbtk_db"
extra: ""
# --------------------
# reCOGnizer Prokaryotic
# --------------------
recognizer_prok:
resources_dir: "resources/recognizer_db"
extra: ""
# --------------------
# UPIMAPI
# --------------------
upimapi:
db: "swissprot"
db_custom: ""
resources_dir: "resources/upimapi_db"
extra: ""
skip_db_check_if_exists: true
# ====================
# Eukaryotic Annotation
# ====================
# --------------------
# MetaEuk
# --------------------
metaeuk:
db: "resources/metaeuk_db/uniprot_db"
extra: ""
# --------------------
# reCOGnizer Eukaryotic
# --------------------
recognizer_euk:
resources_dir: "resources/recognizer_db"
custom_db: ""
extra: ""
# --------------------
# Funannotate2
# --------------------
funannotate2:
enabled: true
db_dir: "/home/argomes/resources/funannotate2_db"
install_db: true
databases:
- all
extra_install: ""
species: ""
strain: ""
params: ""
pretrained: ""
extra_clean: ""
extra_train: ""
extra_predict: ""
extra_annotate: ""
# ====================
# Computational Resources
# ====================
threads:
high: 16
medium: 8
low: 1
Workflow parameters
The following table is automatically parsed from the workflow’s config.schema.y(a)ml file.
Parameter |
Type |
Description |
Required |
Default |
|---|---|---|---|---|
sample_sheet |
string |
path to sample sheet, mandatory |
yes |
config/samples.tsv |
deferred_sample_sheet |
boolean |
allow sample sheet to be generated by an upstream checkpoint |
false |
|
sample_sheet_checkpoint |
string |
optional upstream checkpoint name for orchestrated deferred mode |
||
qa_filter |
external CheckM2/EukCC QA filtering applied before target expansion |
yes |
||
. enabled |
boolean |
enable filtering by external QA reports |
false |
|
. min_completeness |
number |
minimum completeness required to keep a sample |
50.0 |
|
. max_contamination |
number |
maximum contamination allowed to keep a sample |
10.0 |
|
. checkm2_reports |
array |
CheckM2 TSV report paths for prokaryotic samples |
[] |
|
. eukcc_reports |
array |
EukCC CSV report paths for eukaryotic samples |
[] |
|
. missing_sample |
string |
behavior when a sample is missing from its QA report |
error |
|
prodigal |
parameters for Prodigal gene prediction |
yes |
||
. extra |
string |
extra CLI options passed to Prodigal wrapper |
||
bakta |
parameters for Bakta annotation |
yes |
||
. db |
string |
path to Bakta database directory |
yes |
|
. extra |
string |
extra CLI options passed to Bakta wrapper |
||
gtdbtk |
parameters for GTDB-Tk classification |
|||
. enabled |
boolean |
enable optional GTDB-Tk classification for prokaryotic genomes only |
false |
|
. data_dir |
string |
path to GTDB-Tk database directory |
||
. extra |
string |
extra CLI options passed to GTDB-Tk wrapper |
||
metaeuk |
parameters for MetaEuk gene prediction |
yes |
||
. db |
string |
path to MetaEuk reference database |
yes |
|
. extra |
string |
extra CLI options passed to MetaEuk wrapper |
||
recognizer_prok |
parameters for prokaryotic reCOGnizer domain annotation |
yes |
||
. resources_dir |
string |
path to prokaryotic reCOGnizer database directory |
yes |
|
. extra |
string |
extra CLI options passed to prokaryotic reCOGnizer wrapper |
||
recognizer_euk |
parameters for eukaryotic reCOGnizer domain annotation |
yes |
||
. resources_dir |
string |
path to eukaryotic reCOGnizer database directory |
yes |
|
. custom_db |
string |
path to KOG/custom database for eukaryotic reCOGnizer; empty disables custom DB |
||
. extra |
string |
extra CLI options passed to eukaryotic reCOGnizer wrapper |
||
funannotate2 |
parameters for Funannotate2 eukaryotic isolate annotation |
yes |
||
. enabled |
boolean |
enable Funannotate2 targets for eukaryotic isolate genomes |
yes |
true |
. db_dir |
string |
path to the Funannotate2 database directory |
yes |
|
. install_db |
boolean |
install missing Funannotate2 databases during real workflow execution |
yes |
true |
. databases |
array |
Funannotate2 database names to install when db_dir is missing |
yes |
[‘all’] |
. extra_install |
[‘string’, ‘null’] |
extra CLI options passed to Funannotate2 install |
||
. species |
[‘string’, ‘null’] |
species name passed to Funannotate2 when provided |
||
. strain |
[‘string’, ‘null’] |
strain name passed to Funannotate2 when provided |
||
. params |
[‘string’, ‘null’] |
Funannotate2 parameters file passed to predict when provided |
||
. pretrained |
[‘string’, ‘null’] |
Funannotate2 pretrained parameters passed to predict when provided |
||
. extra_clean |
[‘string’, ‘null’] |
extra CLI options passed to Funannotate2 clean |
||
. extra_train |
[‘string’, ‘null’] |
extra CLI options passed to Funannotate2 train |
||
. extra_predict |
[‘string’, ‘null’] |
extra CLI options passed to Funannotate2 predict |
||
. extra_annotate |
[‘string’, ‘null’] |
extra CLI options passed to Funannotate2 annotate |
||
upimapi |
parameters for UPIMAPI functional annotation |
yes |
||
. db |
string |
UPIMAPI built-in database name to use (for example, swissprot) |
||
. db_custom |
string |
path to a custom UPIMAPI database FASTA; leave empty when using db |
||
. resources_dir |
string |
path to UPIMAPI resources database directory |
||
. extra |
string |
extra CLI options passed to UPIMAPI wrapper |
||
. skip_db_check_if_exists |
boolean |
automatically pass –skip-db-check when the selected UPIMAPI database FASTA already exists in the configured resources directory |
true |
|
threads |
computational resources presets |
yes |
||
. high |
integer |
|||
. medium |
integer |
|||
. low |
integer |
Linting and formatting
Linting results
1Lints for snakefile /tmp/tmpisep44c4/workflow/rules/prok.smk:
2 * Mixed rules and functions in same snakefile.:
3 Small one-liner functions used only once should be defined as lambda
4 expressions. Other functions should be collected in a common module, e.g.
5 'rules/common.smk'. This makes the workflow steps more readable.
6 Also see:
7 https://snakemake.readthedocs.io/en/latest/snakefiles/modularization.html#includes
8
9Lints for snakefile /tmp/tmpisep44c4/workflow/rules/euk.smk:
10 * Absolute path "/home/argomes/resources/funannotate2_db" in line 61:
11 Do not define absolute paths inside of the workflow, since this renders
12 your workflow irreproducible on other machines. Use path relative to the
13 working directory instead, or make the path configurable via a config
14 file.
15 Also see:
16 https://snakemake.readthedocs.io/en/latest/snakefiles/configuration.html#configuration
17 * Absolute path "/home/argomes/resources/funannotate2_db" in line 90:
18 Do not define absolute paths inside of the workflow, since this renders
19 your workflow irreproducible on other machines. Use path relative to the
20 working directory instead, or make the path configurable via a config
21 file.
22 Also see:
23 https://snakemake.readthedocs.io/en/latest/snakefiles/configuration.html#configuration
24 * Absolute path "/home/argomes/resources/funannotate2_db" in line 115:
25 Do not define absolute paths inside of the workflow, since this renders
26 your workflow irreproducible on other machines. Use path relative to the
27 working directory instead, or make the path configurable via a config
28 file.
29 Also see:
30 https://snakemake.readthedocs.io/en/latest/snakefiles/configuration.html#configuration
31 * Absolute path "/home/argomes/resources/funannotate2_db" in line 142:
32 Do not define absolute paths inside of the workflow, since this renders
33 your workflow irreproducible on other machines. Use path relative to the
34 working directory instead, or make the path configurable via a config
35 file.
36 Also see:
37 https://snakemake.readthedocs.io/en/latest/snakefiles/configuration.html#configuration
38 * Absolute path "/home/argomes/resources/funannotate2_db" in line 171:
39 Do not define absolute paths inside of the workflow, since this renders
40 your workflow irreproducible on other machines. Use path relative to the
41 working directory instead, or make the path configurable via a config
42 file.
43 Also see:
44 https://snakemake.readthedocs.io/en/latest/snakefiles/configuration.html#configuration
45
46Lints for snakefile /tmp/tmpisep44c4/workflow/rules/stage_sheets.smk:
47 * Mixed rules and functions in same snakefile.:
48 Small one-liner functions used only once should be defined as lambda
49 expressions. Other functions should be collected in a common module, e.g.
50 'rules/common.smk'. This makes the workflow steps more readable.
51 Also see:
52 https://snakemake.readthedocs.io/en/latest/snakefiles/modularization.html#includes
53
54Lints for rule stage_gtdbtk_genomes (line 107, /tmp/tmpisep44c4/workflow/rules/prok.smk):
55 * No log directive defined:
56 Without a log directive, all output will be printed to the terminal. In
57 distributed environments, this means that errors are harder to discover.
58 In local environments, output of concurrent jobs will be mixed and become
59 unreadable.
60 Also see:
61 https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#log-files
62 * Migrate long run directives into scripts or notebooks:
63 Long run directives hamper workflow readability. Use the script or
64 notebook directive instead. Note that the script or notebook directive
65 does not involve boilerplate. Similar to run, you will have direct access
66 to params, input, output, and wildcards.Only use the run directive for a
67 handful of lines.
68 Also see:
69 https://snakemake.readthedocs.io/en/latest/snakefiles/rules.html#external-scripts
70 https://snakemake.readthedocs.io/en/latest/snakefiles/rules.html#jupyter-notebook-integration
71
72Lints for rule annotation_to_metabolic_modeling_stage_sheet (line 56, /tmp/tmpisep44c4/workflow/rules/stage_sheets.smk):
73 * No log directive defined:
74 Without a log directive, all output will be printed to the terminal. In
75 distributed environments, this means that errors are harder to discover.
76 In local environments, output of concurrent jobs will be mixed and become
77 unreadable.
78 Also see:
79 https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#log-files
80 * Migrate long run directives into scripts or notebooks:
81 Long run directives hamper workflow readability. Use the script or
82 notebook directive instead. Note that the script or notebook directive
83 does not involve boilerplate. Similar to run, you will have direct access
84 to params, input, output, and wildcards.Only use the run directive for a
85 handful of lines.
86 Also see:
87 https://snakemake.readthedocs.io/en/latest/snakefiles/rules.html#external-scripts
88 https://snakemake.readthedocs.io/en/latest/snakefiles/rules.html#jupyter-notebook-integration
Formatting results
1[DEBUG]
2[DEBUG] In file "/tmp/tmpisep44c4/workflow/rules/stage_sheets.smk": Formatted content is different from original
3[DEBUG]
4[DEBUG]
5[DEBUG]
6[DEBUG]
7[DEBUG]
8[DEBUG]
9[INFO] 1 file(s) would be changed 😬
10[INFO] 6 file(s) would be left unchanged 🎉
11
12snakefmt version: 0.11.5