Configuration¶
One YAML file describes a FunFlux run: its mode, its input and output folders, the databases, the
resources and the analysis settings. This page lists every key of that file, the modes that read
it, its default and its allowed values. The template is config/config.yaml. Copy it, fill in the
copy and pass it with --configfile:
cp config/config.yaml config/config_custom.yaml
snakemake --sdm conda --cores 24 --configfile config/config_custom.yaml
Without --configfile, the run stops at once with [FunFlux] No configuration supplied. Git
ignores config/config_custom.yaml, so your filled-in copy is never committed.
Terms used on this page
| YAML | the text format of the configuration file, with keys indented under their block; unquoted yes, on, true read as true and no, off, false as false |
| NOTE | a line starting [FunFlux] NOTE that reports something to check without stopping the run; read them after every dry run |
| launch folder | the folder Snakemake is started from, normally the FunFlux repository; relative paths are read from it, and .snakemake/ is created there |
| the screen | the contamination and mitochondrion screen of the draft assembly: BLAST against core_nt, BlobTools, the mitochondrion screen and the contig selector |
| batch | the samples one run finds in its mode's input folder; each needs a row in the annotation parameter table |
| funannotate database | the frozen snapshot of funannotate's data, such as Swiss-Prot, Pfam, the BUSCO set and stored AUGUSTUS models, downloaded once from Zenodo into directories.funannotate_db |
| checksum (SHA-256) | a 64-character fingerprint of a file's content, printed by sha256sum; FunFlux checks several downloads against stored checksums and stops on a mismatch |
| heavy step, long step | on a cluster, heavy steps ask the scheduler for ram_gb and runtime_hours, and long steps for runtime_hours only |
How the file is read¶
FunFlux checks the configuration before any job starts, so a dry run (snakemake -n) finds
configuration errors in seconds. The first failing check stops the run, so repeat the dry run
until it passes. A line [FunFlux] NOTE: ... does not stop the run.
Troubleshooting lists the messages.
FunFlux treats a wrong, empty, missing or unknown entry as follows.
| In the file | What FunFlux does |
|---|---|
| a value outside the allowed values listed below | stops the run with a message that starts [FunFlux] <key>: |
nan or inf (YAML .nan, .inf) where a number is expected |
refuses it, as above |
| a missing optional key | uses the default given in the tables below. The template ships the same value unless a table says otherwise |
| a missing or empty required key | stops the run |
| a number key that is present but empty | stops the run, unless its table lists empty as allowed. Delete the line to get the default |
an unknown or misplaced key under parameters |
stops the run with a message that lists the known keys or names the right place |
a misspelt optional key in the blocks input, directories, files, links or resources |
ignores it without a message, because these blocks are not checked for unknown keys. With antismash instead of antismash_db in directories, for example, the antiSMASH database is downloaded |
| a misspelt top-level key | ignores it without a message, because top-level keys are not checked either. With a misspelt parameter: block, every key under parameters takes its default |
Outside parameters, a misspelt optional key is ignored without a message
A misspelt key or a refused value under parameters stops the run before any job starts. A
misspelt optional key in another block is ignored, and its default is used. A misspelt
parameters or resources block is ignored too, and all its keys take their defaults. Check
those names yourself.
YAML reads unquoted off, no and false as false, and on, yes and true as true, before
FunFlux sees them. What a key then does depends on the key:
| Keys | Unquoted off, no or false |
Empty (key: or key: "") |
|---|---|---|
mode of decontamination, mitochondria, genemark, tiberius and signalp6, and amr.chroquetas |
read as off, so decontamination.mode: off works without quotes |
the default of the key (off for amr.chroquetas) |
amr.mito_genetic_code |
refused, and so is true | auto |
nt_version, masking_method, busco.lineage, prediction.busco_db, assembler, flye_input_mode |
read as empty, so the default applies: masking_method: off still masks with tantan |
the default |
In a key that has an off value, off needs no quotes. The six keys of the last row
have no such value, and an unquoted off gives their default. tiberius.mode and
amr.chroquetas also read an unquoted on, yes or true as on.
A relative path is read from the launch folder, not from the folder of the configuration file and
not from output_dir:
| Keys | A relative path |
|---|---|
output_dir, the directories.*_db paths, files.iprscan, files.annotation_params, the protein files of the annotation parameter table |
is made absolute as FunFlux reads it |
directories.genemark_dir, files.signalp6_archive |
stops the run when GeneMark or SignalP 6 is on, because these must already be absolute |
Write absolute paths unless you know the launch folder in advance.
The Modes column of the tables below names the modes that read a key, and the other modes ignore
it. "screen" stands for the contamination and mitochondrion screen, which runs in illumina,
longread and hybrid mode, and in contigs mode with parameters.contigs.screen: true.
What every run needs¶
These are the keys to fill in. The links come filled in, and every key under parameters has a
default.
| Key | Set it to |
|---|---|
mode |
illumina, longread, hybrid or contigs (Choosing a mode) |
input.illumina_dir, input.longread_dir or input.contigs_dir |
the input folder of the mode, and in hybrid mode the first two |
directories.output_dir |
the folder for results and logs |
directories.eggnog_db, directories.funannotate_db |
the eggNOG-mapper data, and the folder for the funannotate database (Reference databases) |
directories.blast_db |
the NCBI BLAST database folder, when the screen runs |
files.annotation_params |
the annotation parameter table |
files.iprscan |
the InterProScan launcher (Licensed and external tools) |
resources.threads |
the number you give to --cores |
mode¶
The top-level key mode selects the input mode of the run.
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
mode |
required; illumina in the template |
illumina, longread, hybrid, contigs (case and surrounding spaces are ignored) |
all | Selects the input type, how the reads are cleaned and assembled, and the input folder that is searched for samples. The contamination and mitochondrion screen and every later step except polishing are the same in all modes. |
A configuration without mode is taken for a FunFlux 1.x, FunFluxL or FunFluxL+ configuration, and
the run stops with a message that points to Coming from v1.
input¶
The input block names the folders that FunFlux searches for samples. A run reads only the keys
of its mode.
input:
illumina_dir: "" # illumina, hybrid
longread_dir: "" # longread, hybrid
contigs_dir: "" # contigs
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
illumina_dir |
required in its modes | an existing folder holding {sample}_R1.<ext> and {sample}_R2.<ext> |
illumina, hybrid |
Paired-end reads. Samples are found from the R1 files, and an R1 file without its R2 stops the run. |
longread_dir |
required in its modes | an existing folder holding {sample}_ont.<ext> or {sample}_pacbio.<ext> |
longread, hybrid |
Long reads. The suffix sets the technology of each sample, _ont for Oxford Nanopore and _pacbio for PacBio HiFi (CCS). One batch may mix both, but a sample with both files stops the run. In hybrid mode it may be the same folder as illumina_dir. |
contigs_dir |
required in its mode | an existing folder holding {sample}.fasta, {sample}.fa or {sample}.fna |
contigs |
One assembly per sample. |
- Read files end in
fastq,fq,fastq.gzorfq.gz. All files of one kind in a batch (Illumina reads, long reads, assemblies) must share one extension, and two extensions stop the run. - A
_pacbiofile is taken to hold HiFi reads, and a NOTE says so. PacBio CLR reads are not supported. - In
hybridmode every sample needs Illumina and long reads. The run stops and lists the samples that lack either. - In
contigs_direvery file whose name contains a dot is taken as a sample, and the last dot splits off the extension (my.genome.fastais the samplemy.genome). Keep nothing else there. AREADME.txtstops the run with the two-extensions error, and a FASTA in a subfolder becomes a sample name containing/, which is refused.
Sample names become file names, report labels and the locus-tag prefix of every gene
(funannotate predict --name):
| Sample name | Result |
|---|---|
contains a space or one of * # @ % ^ / ! ? & : ; | < > |
stops the run |
| contains underscores or dots | allowed |
| is not 3 to 12 letters or digits starting with a letter | runs, with a NOTE that its gene IDs cannot be submitted to GenBank as they are |
A name such as SAMPLE1, 3 to 12 letters or digits starting with a letter, gets neither
the stop nor the NOTE.
directories¶
The directories block names the output folder and the folders of the databases and of
GeneMark-ES.
directories:
output_dir: ""
blast_db: ""
eggnog_db: ""
funannotate_db: ""
genemark_dir: ""
antismash_db: ""
unite_db: ""
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
output_dir |
required | any path | all | Root of every result and log, created by the first job. Later runs with the same output_dir reuse the databases and the SignalP 6 installation stored in 00.resources/. Two things are written elsewhere: the funannotate database, in directories.funannotate_db, and Snakemake's .snakemake/ folder, in the launch folder. The .snakemake/ folder holds Snakemake's records of the run, the run logs and, unless --conda-prefix is given, the conda environments. |
blast_db |
required with the screen | a folder | screen | The NCBI nucleotide BLAST database. The folder holds the files named after parameters.nt_version (for core_nt, core_nt.nal and the core_nt.NN.* volumes), the BLAST taxonomy files taxdb.btd and taxdb.bti, and the NCBI taxonomy files nodes.dmp and names.dmp. FunFlux prints a NOTE when the folder does not exist. Without the two .dmp files the dry run stops with Snakemake's MissingInputException in rule blob_json (blob_guide_json in hybrid mode), and without taxdb.* the organism names in the BLAST table read N/A. |
eggnog_db |
required | a folder | all | The eggNOG-mapper data (eggnog.db, eggnog_proteins.dmnd), passed to emapper.py --data_dir. FunFlux prints a NOTE when the folder does not exist. |
funannotate_db |
required | a folder, which may not exist yet | all | The funannotate database. When the folder holds no funannotate-db-info.txt, the archive named in links.funannotate_link is downloaded into it, checked against its .sha256 file and unpacked. The absolute paths stored inside the database are rewritten to this location once per output folder. |
genemark_dir |
empty: no GeneMark-ES | absolute path of the folder holding an executable gmes_petap.pl |
all | With parameters.genemark.mode: auto, funannotate predict runs GeneMark-ES from here. The licence key ~/.gm_key of the user who runs Snakemake must then exist, or the run stops. |
antismash_db |
empty: download | a folder containing clusterblast/ |
all | An antiSMASH database you already hold. It is linked into 00.resources/antismash/databases/ and never written to. When empty, download-antismash-databases fills that folder (about 9.4 GB for antiSMASH 8.0.4). |
unite_db |
empty: download | a folder containing an uncompressed unite_its_sintax.fasta |
all | A UNITE SINTAX reference you already hold. It is linked into 00.resources/unite/, and links.unite_its_link is not used (a NOTE says so). |
antismash_db and unite_db are checked as soon as they are set. A missing folder, or a folder
without clusterblast/ or unite_its_sintax.fasta, stops the run, dry runs included.
Start one run first when several runs share a funannotate database
Several runs can share one funannotate database, but nothing stops two of them from repairing
its stored paths at the same time. Start one run, let it pass the step
normalize_funannotate_db, then start the others, and reach the folder under the same path in
every run (Reference databases).
files¶
The files block names three single files: the annotation parameter table, the InterProScan
launcher and the SignalP 6 archive.
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
annotation_params |
required | path of a tab-separated table | all | The species name, protein evidence and AUGUSTUS model of each sample. See Annotation parameter table. |
iprscan |
required | path of interproscan.sh |
all | The InterProScan 5 launcher, installed by hand (FunFlux v2 was tested with 5.78-109.0). It runs on the Java 11 of the workflow's interproscan environment. FunFlux prints a NOTE when the file does not exist. |
signalp6_archive |
empty | absolute path of a readable file | all, when parameters.signalp6.mode is not off |
The SignalP 6 archive downloaded from DTU (for example signalp-6.0i.fast.tar.gz). It is installed once per output folder into 00.resources/signalp6/, and the workflow never downloads SignalP. |
links¶
The links block holds the download addresses of what the workflow fetches itself, and the
template fills them in.
links:
phix_link: https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/819/615/GCF_000819615.1_ViralProj14015/GCF_000819615.1_ViralProj14015_genomic.fna.gz
funannotate_link: https://zenodo.org/records/23265189/files/funannotate_db_1.8.17_2026-10-08.tar.gz?download=1
unite_its_link: https://s3.hpc.ut.ee/plutof-public/original/338a1413-6039-4e00-b5cf-410346a1e366.gz
tiberius_model_link: https://bioinf.uni-greifswald.de/bioinf/tiberius/models/fungi.tar.gz
telomere_db_link: https://raw.githubusercontent.com/tolkit/a-telomeric-repeat-database/73c635c7b80e5ab369b4c7ec67d23db32dcaa1b8/data/telo_database_v2.tsv
univec_link: https://ftp.ncbi.nlm.nih.gov/pub/UniVec/archive/10.1/UniVec
chroquetas_link: https://raw.githubusercontent.com/nmquijada/ChroQueTas/1aad051d6ad48f5e403636699d19095e655764f7
The run stops when a link that the mode needs is missing. univec_link is the one exception: left
out, it takes the address shown above.
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
phix_link |
template URL | a URL | illumina, hybrid (required there) |
The PhiX174 genome (RefSeq GCF_000819615.1) that Illumina libraries are spiked with. Read pairs that align to it concordantly (both mates, facing each other) are removed; a pair with only one mate on PhiX is kept. |
funannotate_link |
template URL | a Zenodo URL of the form https://zenodo.org/records/<id>/files/<archive> |
all, and required even when the database is already on disk | The archive of the funannotate database (Zenodo record 23265189, 2.1 GB), downloaded only while directories.funannotate_db holds no database. To switch to another version of the database, change the link and point directories.funannotate_db at a new, empty folder, for the reasons given under Newer snapshots, and building your own. The checksum file, the archive name with .sha256 in place of .tar.gz, is taken from the same record and checked with sha256sum -c. A mismatch stops the run before anything is unpacked. |
unite_its_link |
template URL | a URL of a gzip-compressed SINTAX FASTA | all, and required unless directories.unite_db is set |
The UNITE reference for the ITS classification. The template points to UNITE's SINTAX release for eukaryotes of 19.02.2025 (266,589 sequences). It is downloaded once per output folder and unpacked on the fly into 00.resources/unite/unite_its_sintax.fasta, and PROVENANCE.txt beside it records the URL, date, md5 and size. No checksum is checked. |
tiberius_model_link |
template URL | a URL of a .tar.gz archive holding one folder with the model files |
all, and required unless parameters.tiberius.mode is off |
The fungi model of the Tiberius gene finder, from its authors' server (about 30 MB). It is downloaded once per output folder, checked against parameters.tiberius.model_sha256 and unpacked into 00.resources/tiberius/model/. A mismatch stops the run before anything is unpacked. |
telomere_db_link |
template URL | the URL of the tab-separated database file | all, and required | The telomere repeat database of tidk, telo_database_v2.tsv (0.6 MB), with the known telomere repeat units that the contig summary checks its candidates against. It is downloaded once per output folder into 00.resources/telomeres/ and checked against parameters.contig_summary.telomere_db_sha256, and a mismatch stops the run. The template address names one commit of the repository tolkit/a-telomeric-repeat-database, so the file behind it does not change (Reference databases). |
univec_link |
the address above | a URL of a UniVec FASTA file | all | NCBI's UniVec, build 10.1 in NCBI's archive (1.7 MB). Rule univec_illumina downloads it once per output folder into 00.resources/adapters/, checks it against parameters.contig_summary.univec_sha256 and keeps the 151 Illumina adapter and primer records for the contig adapter screen; a mismatch stops the run (Adapter trimming and the adapter screen). |
chroquetas_link |
template URL | the raw-file address of one commit of the ChroQueTas repository on GitHub, without a file name | all, required when parameters.amr.chroquetas is on and not read when it is off |
ChroQueTas 1.0.1 and its FungAMR database. Rule chroquetas_db downloads bin/ChroQueTas.sh, FungAMR_db/db-v20250811.tgz and LICENSE from this address once per output folder into 00.resources/chroquetas/. It checks the script and the archive against parameters.amr.chroquetas_script_sha256 and chroquetas_db_sha256, and a mismatch stops the run before anything runs or is unpacked (Reference databases). |
resources¶
The resources block holds three numbers: the threads, the memory in GB and, for a cluster, the
time limit in hours.
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
threads |
24 | an integer ≥ 1 | all | The most threads any rule asks for (see below). On a single computer, give the same number to --cores and do not add --jobs/-j. For a local run --jobs is another name for --cores, and giving both can let the jobs use more CPUs than the machine has. On a cluster each job asks the scheduler for its rule's threads, so use at most the CPUs of one compute node (Slurm: sinfo -o "%n %c"). |
ram_gb |
128 | an integer ≥ 1 | all | On a single computer, the memory limit SPAdes is given (-m, step illumina_assembly) and, capped at 64 GB, the Java heap of Qualimap (map_evaluation, and in hybrid also map_guide_evaluation). Snakemake reserves no memory for these steps unless --resources sets a limit, mem_gb for SPAdes and java_mem for Qualimap (Running FunFlux). On a cluster, it is also the memory every heavy step asks the scheduler for, in every mode, and Qualimap asks for its heap plus 4 GB, never more than ram_gb. Use at most the memory the scheduler offers one compute node, or no node can take those steps (Slurm: sinfo -o "%n %m", in MB). See How the settings reach Slurm. A change re-runs nothing. |
runtime_hours |
48 | an integer ≥ 1 | all | On a cluster, the time limit that every heavy and every long step asks the scheduler for. These are the steps that can run for more than an hour, such as the assemblers, BLAST, gene prediction and InterProScan, and a step still running at the limit is stopped. Use at most the time limit of the partition, or the scheduler refuses those steps or never starts them (Slurm: sinfo -o "%P %l"). A single computer ignores it. A change re-runs nothing. |
The rules ask for threads in four ways:
| Rules | Threads they ask for |
|---|---|
funannotate_prediction, tiberius_prediction, the assemblers (illumina_assembly, long_read_assembly), the read mappings (map_phix, map_contigs, map_guide_contigs, map_sel_contigs) |
threads |
| the other CPU-bound rules | threads, up to a fixed cap between 2 and 24 |
SignalP 6 (signalp6_annotation) |
parameters.signalp6.torch_num_threads, lowered to threads when it is larger |
| every other rule | 1 |
threads is the most any one job takes, so it is the number to give --cores. When --cores
is lower than a rule's number, Snakemake runs the job with --cores threads. The cap of every
rule, with the reasons, is listed on CPU cores and threads. On a
cluster the three keys must each fit one compute node and one partition
(On a cluster).
parameters¶
The parameters block holds the analysis settings. FunFlux checks every key under parameters in
every mode, so a wrong value stops the run even in a mode that does not use the key. There are
three exceptions: spades_kmers is read only in illumina and hybrid mode, the longread and
hybrid blocks only in their own mode, and the files that the decontamination keys name only
when the screen runs. After a change of most settings, the next run re-runs the step that uses it
and every step after it.
BLAST database and hit depth¶
These keys choose the BLAST database of the screen and how many hits BLAST keeps for each contig.
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
nt_version |
core_nt |
the name of the BLAST database in directories.blast_db, usually core_nt or nt, not checked |
screen | The database BLAST searches, as blastn -db <blast_db>/<nt_version>. |
blast_max_target_seqs |
10 | an integer ≥ 1, with a NOTE below 5 | screen | -max_target_seqs, the number of database sequences kept per contig. BLAST applies it during the search, not as a final best-N filter, so a small value can lose better matches. A large value skews the genus calls: BlobTools adds up the bit scores of every kept hit per genus, so a genus with many database entries of one gene can outvote the genus of the closest matches. |
blast_max_hsps |
5 | an integer ≥ 1, with a NOTE below 5 while the mitochondrion screen is on | screen | -max_hsps, the number of alignments kept per database sequence. The mitochondrion screen reads qcovs, the share of the contig covered by one database sequence, which BLAST computes from the kept alignments only. |
One BLAST table feeds both BlobTools (the genus of each contig) and the mitochondrion screen. With
blast_max_hsps: 1 BLAST keeps only the single best local alignment per database sequence, so a
complete mitochondrial genome that aligns to its closest reference in several blocks can look only
half covered. These values also change the hits whose bit scores BlobTools adds up, and so can
change the genus it gives a contig. The e-value is fixed at 1e-10. See
BLAST hit depth.
To come close to an earlier version, set blast_max_target_seqs: 50 (FunFlux 2.0.0 kept 50
database sequences per contig, with 5 alignments each) or blast_max_hsps: 1 (FunFlux 1.1.x kept
10, with 1 alignment each). Both versions searched with an e-value of 1e-5.
A configuration copied from FunFlux 2.0.0
The FunFlux 2.0.0 template sets blast_max_target_seqs: 50, and updating FunFlux does not
change your copy. Set it to 10, or delete the line, to search as FunFlux 2.1.0 does
(BLAST hit depth).
spades_kmers¶
spades_kmers lists the k-mer sizes that SPAdes assembles the Illumina reads with.
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
spades_kmers |
"21,33,55,77,99,127" |
auto, or comma-separated text or a YAML list, with every k odd, from 1 to 127, and strictly ascending |
illumina, hybrid |
The SPAdes -k list. auto lets SPAdes choose from the read length (Illumina mode). |
decontamination¶
These keys tell the contig selector which contigs to keep or remove by genus.
parameters:
decontamination:
mode: off # off | include | exclude
discard_no_hit: false
include_genera:
include_genera_by_sample:
exclude_genera:
exclude_genera_file:
sample_overrides:
The contig selector, rule select_contigs, takes the genus BlobTools assigned to each contig (the
taxon with the highest summed BLAST bit score) and keeps or removes the contig. With every policy,
off included, it writes contaminants/contig_taxonomy_decisions.tsv, one line per contig with
its genus, keep or remove, and the reason. With mitochondria.mode: separate_confirmed (the
default), the contig selector always keeps the contigs that the mitochondrion screen confirmed (reason
protected_confirmed_mitochondrial). With report or off, nothing is protected. A contig of an
animal's or a plant's mitochondrial DNA, such as human mitochondrial DNA from the library, is not
confirmed, so even separate_confirmed does not protect it (mitochondria).
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
mode |
off |
off, include, exclude, while auto stops the run (see the warning box below) |
screen | off keeps every contig. include keeps only the listed genera. Name the genera that contig_taxonomy_decisions.tsv gives the isolate's own contigs, which for a poorly sequenced fungus are often not its true genus. When the screen runs, a sample in include mode without a genus stops the run before any job starts. exclude removes the listed genera. |
discard_no_hit |
false |
true, false (also yes/no, on/off, 1/0) |
screen | With exclude, also removes the contigs without a BLAST hit (reason discarded_no_hit). include removes them anyway, because no-hit is not on its list, and the setting changes only the reason. No effect with off. |
include_genera |
empty | a genus, a YAML list, or names separated by ; or , |
screen | Genera that include keeps. |
include_genera_by_sample |
empty | path of a tab-separated table with the header columns sample and genus, in which a sample may have several rows |
screen | Adds the sample's genera to include_genera. |
exclude_genera |
empty | as include_genera |
screen | Genera that exclude removes. |
exclude_genera_file |
empty | path of a text file with one genus per line, in which lines starting with # are skipped |
screen | Adds its genera to exclude_genera. |
sample_overrides |
empty | path of a tab-separated table with the columns sample and mode, and optionally include_genera, exclude_genera, discard_no_hit |
screen | Replaces the named settings for single samples, and an empty cell keeps the run-wide value. A mode cell holds off, include, exclude or nothing, and a discard_no_hit cell a yes/no word or nothing. |
Genus names are compared without regard to case. include also accepts a few aliases, from a table
of bacterial genus splits and from the prefixes brady, meso, neo, sino, aeri, caldi and geo.
Neocosmospora and Cosmospora, for example, match each other. An alias can only keep more
contigs. exclude compares exact names.
When the screen runs, the three files are checked before any job starts. Each must exist and be UTF-8 text:
| File | Must also hold |
|---|---|
include_genera_by_sample |
a header line with the columns sample and genus |
exclude_genera_file |
no further check |
sample_overrides |
a header line with the columns sample and mode. Every mode cell holds off, include, exclude or nothing, and the discard_no_hit cell of each sample of the batch a yes/no word or nothing |
Every sample of the batch that ends up in include mode needs at least one genus. The log
logs/select_contigs_{sample}.log warns when more than 20 % of the bases are removed, and when two
or more genera each hold at least 5 % of the bases.
The v1 key parameters.genus is still read when the decontamination block is missing or empty,
and a NOTE reports the translation:
decontamination block |
v1 key parameters.genus |
Becomes |
|---|---|---|
| missing or empty | a genus | mode: include with that genus |
| missing or empty | empty | mode: off, so every contig is kept |
| not empty | any value | nothing, and genus is ignored without a message |
Move the genus into the decontamination block, because once that block holds anything, genus
has no effect.
There is no auto mode, because BLAST genus labels are unreliable for poorly sequenced fungi
The v1 workflows had a mode: auto that kept the genus BlobTools gave the most contigs.
FunFlux v2 refuses it before any job starts and, when the screen runs, also in the mode
column of sample_overrides.
Why auto fails |
What happens |
|---|---|
| it counts contigs, not bases | when the contigs without a BLAST hit outnumber those of any genus, it keeps them and removes the rest of the genome |
| the isolate's genus is poorly represented in core_nt | BLAST labels much of the isolate's own DNA with related genera, so auto keeps a wrong genus, and even include with the true genus can remove most of the genome |
auto can therefore remove most of the genome. Run with off (the default), read
contig_taxonomy_decisions.tsv and {sample}_composition.txt, then exclude the contaminant
genera or include the genera BLAST gave the isolate's own contigs
(Why there is no auto mode).
mitochondria¶
These keys set how the mitochondrion screen recognises the mitochondrial genome, and what happens to it.
parameters:
mitochondria:
mode: separate_confirmed # off | report | separate_confirmed
min_direct_blast_qcov: 35
min_assembler_coverage_ratio: 3.0
very_strong_qcov: 70
A direct hit is a BLAST hit whose title names a mitochondrial genome, and qcovs is the
percentage of the contig that its best direct hit covers.
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
mode |
separate_confirmed |
off, report, separate_confirmed |
screen | separate_confirmed writes mitochondria/mitochondrial_screen.tsv, protects the confirmed contigs from the contig selector, and writes them to contigs_mitochondrial.fasta instead of contigs_final.fasta, the nuclear genome that QC, ITS and gene prediction read. report writes the table only, so nothing is protected or split off. off classifies nothing. |
min_direct_blast_qcov |
35 | a number above 0 and at most 100 | screen | Without assembler evidence (illumina and contigs mode, and the hybrid guide), a direct hit with qcovs at or above this value confirms the contig, and a weaker one makes it a mitochondrial_candidate. With assembler evidence, it is the minimum that depth or circularity must back up. |
min_assembler_coverage_ratio |
3.0 | a number above 0 | longread, hybrid |
Contig depth divided by the median contig depth, as reported by the assembler (Flye depth, hifiasm rd:i). A direct hit at or above min_direct_blast_qcov, plus a ratio at or above this value or a clean circle (circular, not a repeat, not an alternative copy), confirms the contig. |
very_strong_qcov |
70 | a number above 0 and at most 100 | longread, hybrid |
A direct hit at or above this value confirms the contig without depth or circularity. |
The assembler evidence comes from the hifiasm or Flye assembly of longread and hybrid mode.
illumina and contigs mode, and the guide screen of hybrid, give the screen none, so the last
two keys change nothing there.
Neither circularity nor high depth confirms a contig without a direct hit.
Since FunFlux 2.1.0, the screen also looks up the organism of the best direct hit in the NCBI
taxonomy (nodes.dmp in directories.blast_db). When that organism is an animal or a plant, as
it is for human mitochondrial DNA from the library, a contig that the keys above would confirm, or
make a mitochondrial_candidate, is classed foreign_mitochondrial instead (reason
best_direct_hit_animal_or_plant). It is not protected from the contig selector and not written to
contigs_mitochondrial.fasta. It stays in the assembly, where the decontamination keys treat it
like any other contig, so with the default decontamination.mode: off it is kept. FunFlux 2.0.0
confirmed such contigs. The last column of mitochondrial_screen.tsv, best_mito_kingdom, names
the kingdom (Fungi, Metazoa or Viridiplantae), and is empty when the contig has no direct hit,
when that hit has no usable taxonomy ID, or when the taxonomy places it in none of the three; the
class is then left as the keys above give it.
No key changes this check. See Mitochondria.
busco¶
The busco block chooses the lineage dataset of the BUSCO completeness check.
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
lineage |
auto |
auto, or a BUSCO dataset name ending in _odb and a number, such as hypocreales_odb12 (case is ignored) |
all | auto runs busco --auto-lineage-euk. BUSCO then reports a generic (eukaryota) and a specific lineage, and MultiQC shows two BUSCO rows per sample. A name runs busco -l <name>, which gives one row and the same dataset for every sample. |
Where the lineage data come from depends on the setting:
| Setting | Where the lineage data come from | Internet needed |
|---|---|---|
auto |
downloaded again for every sample in every run, into a temporary folder of that sample | in every BUSCO job |
| a name | downloaded once per output folder by rule busco_data into 00.resources/busco/, and read by every BUSCO job with --offline. Later runs into the same folder reuse it |
once, on the computer that runs Snakemake |
A named lineage is the one choice for compute nodes without internet
A named lineage is downloaded once, on the computer that runs Snakemake, while auto needs
internet in every BUSCO job.
The dry run checks only the form of the name. A name BUSCO does not offer stops busco_data with a
[FunFlux] busco_data: message. A dataset archive takes tens to hundreds of MB (274.6 MB for
hypocreales_odb12), and with auto the BUSCO folder of one sample held 0.65 to 1.8 GB at the
end of a run (Disk use). See Assembly QC.
contig_summary¶
These keys steer the contig summary, and above all how it finds the telomeres.
parameters:
contig_summary:
telomere_motif: auto
telomere_db_sha256: 1d4f5c8c2cce6a76aaa8de01602317a8e0b8d0401711b96f3c7a826c385da699
telomere_window: 25000
min_telomere_copies: 5
min_rdna_units: 3
univec_sha256: 687d8aa872d4ee215c9e0b3b004d0ee709fb243436d36d159a3f0ac5c25b5e36
After the annotation, rule contig_summary writes 02.assembly/{sample}/eval/contig_summary.tsv.
It has one row per contig of the draft assembly, with the evidence the run produced about it and a
verdict. The evidence consists of the telomere arrays at the contig ends, read depth, the
assembler's depth and circularity flag, rDNA units, BUSCO markers, predicted genes and the calls of
the contamination and mitochondrion screen, and the adapter column says whether the contig
adapter screen found adapter sequence on the contig. The verdict is one of chromosome,
chromosome_arm, mitochondrion, rDNA_array, low_depth, repeat, nuclear_contig,
nuclear_fragment, contaminant, foreign_mitochondrion or unclassified.
The telomere arrays are the one piece of evidence worked out from the sequence itself. Their repeat
unit differs between fungal groups, so rule telomere_units chooses it from the assembly with tidk.
It checks the unit against tidk's telomere repeat database, which rule telomere_db downloads once
per output folder (Telomeres). The first four keys steer
that choice.
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
telomere_motif |
auto |
auto (any case), or letters A, C, G and T only, 4 to 30 long, with lower case upper-cased |
all | With auto, the telomere repeat unit is chosen from the data. Every tandem repeat unit found at the contig ends, every unit of the tidk database and every unit of the literature is scored by how it behaves at the contig ends. The best-supported one is the unit of the assembly. A unit you set is used as given, whatever the data say, and the data's own choice is reported next to it, with a NOTE when it differs. The known fungal units are listed under Which fungi carry which repeat. Either strand and any rotation work, so CCCTAA gives the same result as TTAGGG. |
telomere_db_sha256 |
the checksum of the database file at the template address | 64 hexadecimal characters (capitals are accepted) | all | The SHA-256 that the file downloaded from links.telomere_db_link must have, checked by rule telomere_db before it is used. A mismatch stops the run. The template address names one commit of the database repository, so the file behind it does not change. To use another version, change the link and this checksum together (sha256sum <file> prints it). |
telomere_window |
25000 | an integer from 500 to 100000 | all | The terminal window, in bp. It is the stretch at each contig end in which the candidate units are collected, and how far from the end tidk ends accepts an array. The telomere array can sit some kb inside a contig end when the assembler ran past the telomere, so the window must cover that. The two offset columns of the table show where each array lies. |
min_telomere_copies |
5 | an integer ≥ 2 | all | The copies of the unit an array needs to count as a telomere. tidk ends requires this many unit lengths (30 bp for a 6-bp unit), and a unit is collected at the contig ends only when it forms a tandem run of this many copies. |
min_rdna_units |
3 | an integer ≥ 1 | all | The number of rDNA units (the ITS windows of its_windows) from which a contig can be an rDNA_array. |
univec_sha256 |
the checksum of UniVec build 10.1 | 64 hexadecimal characters (capitals are accepted) | all | The SHA-256 that the file downloaded from links.univec_link must have, checked by rule univec_illumina before its Illumina records are used. A mismatch stops the run. Change the link and this checksum together. |
A parameters.contig_summary.telomere_motif that is neither auto nor a plain unit stops the run
with
[FunFlux] parameters.contig_summary.telomere_motif: must be auto (the unit is chosen from the data) or the telomere repeat unit of the species, 4 to 30 letters A, C, G and T, such as TTAGGG (got: <value>).
A malformed checksum stops it with
[FunFlux] parameters.contig_summary.telomere_db_sha256: must be the SHA-256 checksum of the telomere database file, 64 hexadecimal characters (got: <value>).
The three numbers are checked as whole numbers against the limits above.
Every dry run prints the settings in one line:
Contig summary: telomere motif auto (the repeat unit is chosen from the data), a telomere from 5 tandem copies within 25000 bp of a contig end, an rDNA array from 3 rDNA unit(s).
With a unit set, the line reads telomere motif TTAGGG (used as given; the data's own choice is reported next to it).
A change of these settings re-runs the following steps:
| Change | Re-runs |
|---|---|
telomere_motif, telomere_window, min_telomere_copies |
telomere_units and contig_summary, then MultiQC |
min_rdna_units |
contig_summary only |
links.telomere_db_link or telomere_db_sha256 |
telomere_db, then telomere_units of every sample |
links.univec_link or univec_sha256 |
univec_illumina, then the adapter screen and the contig summary of every sample |
These keys re-run only the telomere and contig-summary steps, never the assembly or the
annotation. hifiasm has a separate key of its own, parameters.longread.hifiasm.telomere_motif or
parameters.hybrid.hifiasm.telomere_motif. It takes the unit as it reads at the 5' end of a
chromosome (CCCTAA for TTAGGG). See Contig summary.
its and its_taxonomy_cutoff¶
These keys steer how the ITS is extracted from the genome and classified against UNITE.
parameters:
its:
window_flank: 2000
max_full_length: 1500
unite_identified_only: true
its_taxonomy_cutoff: 0.8
nhmmer finds every 5.8S gene in contigs_final.fasta with ITSx's own profiles. A window is cut
around each, and windows on the minus strand are reverse-complemented. ITSx extracts ITS1, 5.8S and
ITS2 from the windows, and SINTAX classifies ITS1 and ITS2 against UNITE.
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
its.window_flank |
2000 | an integer ≥ 200 | all | The bases kept on each side of the middle of each 5.8S site. 2,000 bp hold the end of the SSU, ITS1, ITS2 and the start of the LSU, which ITSx needs to recognise the unit. |
its.max_full_length |
1500 | an integer ≥ 400 | all | The longest ITS1-5.8S-ITS2 record listed as ok in {sample}_ITS_copies.txt. A longer one is listed as rejected_too_long (1,500 bp is ITSx's own "suspiciously long" limit). Only ITS1 and ITS2 are classified, so this key changes that table only. |
its.unite_identified_only |
true |
true or false |
all | With true, rule unite_identified keeps the UNITE records whose taxonomy names a genus (g: followed by a name) in 00.resources/unite/unite_its_sintax.identified.fasta, and SINTAX classifies against that file. About a third of the records of the default release stop above the genus, and one that is identical to the query can hold the result at d:Fungi. With false, SINTAX classifies against the whole release, and rule unite_identified does not run. See The UNITE reference filter. |
its_taxonomy_cutoff |
0.8 | a number above 0 and at most 1 | all | Passed as vsearch --sintax_cutoff. {sample}_ITS1_taxonomy.txt and {sample}_ITS2_taxonomy.txt hold every rank with its bootstrap confidence in column 2, and in column 4 only the ranks whose confidence reaches the cutoff. |
ITS1 and ITS2 sequences outside 50 to 600 bp are listed in {sample}_ITS_copies.txt and not
classified. That range is fixed. See ITS taxonomy and
ITS on long-read contigs.
Repeat masking¶
Before gene prediction, the genome is soft-masked by tantan, or by RepeatModeler and RepeatMasker.
parameters:
masking_method: tantan # tantan | repeatmodeler_repeatmasker
repeatmodeler_quick: true
repeatmodeler_ltrstruct: false
repeatmodeler_seed:
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
masking_method |
tantan |
tantan, repeatmodeler_repeatmasker |
all | How contigs_sort.fasta is soft-masked (repeats in lower case) before gene prediction. tantan masks tandem repeats and low-complexity sequence. repeatmodeler_repeatmasker builds a repeat library from this genome with RepeatModeler and masks with RepeatMasker, which also finds interspersed repeats such as transposons. This method takes hours. |
repeatmodeler_quick |
true |
true, false |
all (RepeatModeler only) | RepeatModeler -quick, a shorter run that finds fewer repeat families. |
repeatmodeler_ltrstruct |
false |
true, false |
all (RepeatModeler only) | RepeatModeler -LTRStruct, which adds the LTR retrotransposon structural module. |
repeatmodeler_seed |
empty | empty, or an integer ≥ 0 | all (RepeatModeler only) | RepeatModeler -srand <seed>. When empty, RepeatModeler seeds itself from the clock, and two runs on the same genome build slightly different libraries. |
RepeatMasker needs no Dfam or RepBase library here, because it masks with the library RepeatModeler built. See Repeat masking.
prediction¶
The prediction keys pass two settings to funannotate predict.
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
busco_db |
dikarya |
letters, digits and _, and once the database is on disk, a folder of that name must exist in it |
all | funannotate predict --busco_db, the conserved-gene set that SNAP and GlimmerHMM are trained on, and AUGUSTUS too for the samples without a model in column 4 of the annotation table. The funannotate database as downloaded holds only dikarya (BUSCO dikarya_odb9, 1,312 genes). For a fungus outside the Dikarya, add a set such as fungi (Other BUSCO sets for gene prediction) and set busco_db: fungi. |
augustus_optimize |
false |
true, false |
all | funannotate predict --optimize_augustus, for the samples whose column 4 of the annotation table is empty. After the quick training, optimize_augustus.pl tunes AUGUSTUS's meta-parameters, the settings the quick training keeps fixed, by 8-fold cross-validation: each eighth of the BUSCO test genes is predicted by a model trained without it. AUGUSTUS is then trained again (see The AUGUSTUS model). It adds about a quarter of an hour for a 40 Mb genome and uses at most 8 CPUs. It does not apply to samples that name a stored AUGUSTUS model, and a NOTE names them. Switching it re-runs gene prediction only for the samples whose column 4 is empty. |
genemark¶
The genemark block decides whether funannotate predict uses GeneMark-ES.
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
mode |
auto |
auto, off (also false, no, 0, none, and null in quotes). An empty value (mode:, mode: "" or an unquoted null) means auto, as for the other mode keys |
all | With auto, funannotate predict uses GeneMark-ES when directories.genemark_dir is set. With off it never does, and funannotate runs without GeneMark. |
With GeneMark on, the run stops before any job starts when genemark_dir is not absolute, holds no
executable gmes_petap.pl, or ~/.gm_key is missing. The step genemark_check also tests the
licence key before gene prediction
(The licence check before gene prediction).
FunFlux v2 was tested with GeneMark-ES on, and with mode: off on one public genome
(Validation on public genomes).
tiberius¶
The tiberius block switches the Tiberius gene finder on or off and pins its model.
parameters:
tiberius:
mode: on # on | off
model_sha256: 4a309a630574f395d82d747dcf64716704dab056db534e427ae0cec1b7410e20
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
mode |
on |
on (also true, yes, 1, and an empty value), off (also false, no, 0, none, and null in quotes) |
all | With on, Tiberius predicts genes (step tiberius_prediction) before funannotate predict, which adds them to its evidence (--other_gff <file>:1). With off, Tiberius does not run, its model is not downloaded, and links.tiberius_model_link is not read. Tiberius is independent of GeneMark-ES, and both can be on. |
model_sha256 |
the checksum of the fungi model of 8 February 2026 |
64 hexadecimal characters (capitals are accepted) | Tiberius on | The SHA-256 that the file at links.tiberius_model_link must have, checked before it is unpacked. The address carries no version number. When its authors replace the model, the run stops until you accept the new file by putting its checksum (sha256sum <archive>) here. |
Tiberius needs about 16 GB of memory, so switch it off on a computer with less free memory. What it does, and how its genes are combined with the others, is described under Tiberius.
signalp6¶
The signalp6 block sets whether and how SignalP 6 runs.
parameters:
signalp6:
mode: off # off | fast | slow | slow-sequential
archive_sha256:
torch_num_threads: 8
batch_size: 10
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
mode |
off |
off, fast, slow, slow-sequential (off also as empty, false, no, 0, none or null) |
all | Any value but off installs SignalP 6 from files.signalp6_archive once per output folder, predicts the signal peptides of the predicted proteins, and passes them to funannotate annotate --signalp. The archive must hold the model of the mode (table below). |
archive_sha256 |
empty | 64 hexadecimal characters | SignalP on | Compared with the SHA-256 of the archive before installing, by the step that installs SignalP 6 (install_signalp6) and not by the dry run. sha256sum <archive> prints it. |
torch_num_threads |
8, or resources.threads when that is smaller |
an integer ≥ 1. A value above resources.threads is lowered to it, with a NOTE |
SignalP on | The threads of signalp6_annotation, passed as --torch_num_threads. |
batch_size |
10 | an integer ≥ 1 | SignalP on | --bsize, the number of proteins that SignalP 6 processes together. Raise it only after checking memory use. |
Each mode needs its own model in the archive:
mode |
The archive must hold |
|---|---|
fast |
distilled_model_signalp6.pt |
slow |
ensemble_model_signalp6.pt |
slow-sequential |
sequential_models_signalp6 |
Choose the mode that matches the archive you downloaded, because a fast archive works only with
fast. The speed and memory of the three modes, from the SignalP 6 README, are given under
SignalP 6. FunFlux v2 was tested with fast.
See Functional annotation.
amr¶
The amr block switches the AMR screen (the resistance-mutation screen) on or off, and sets the
genetic code of its mitochondrial run and the checksums of its downloads.
parameters:
amr:
chroquetas: off # off | on
mito_genetic_code: auto
chroquetas_script_sha256: d8961a0d311be57d4a9939bd9e4d90dbc796589b3298dd1835359ed776abfce3
chroquetas_db_sha256: 6f89ecb3117110aad85b8b6ca7b8a3d3715cb5984b6cb75450a6cda5633d16e7
In the AMR screen, rule amr_chroquetas runs ChroQueTas on every genome. For each sample it writes
05.amr/{sample}/amr_summary.tsv, with one row per target protein of the species, each with the
mutations of the FungAMR database found in it and a verdict on resistance. It also writes amr_positions.tsv,
every position compared. The species is column 2 of the
annotation table.
Switching the AMR screen on accepts a non-commercial licence
ChroQueTas and its database are licensed CC BY-NC-ND 4.0, non-commercial use only. FunFlux
downloads them at run time and does not ship them, and on is your acceptance of that licence
(Antifungal resistance mutations).
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
chroquetas |
off |
off (also empty, false, no, 0, none, null), on (also true, yes, 1) |
all | With on, ChroQueTas and its database are downloaded once per output folder (step chroquetas_db), every sample is screened (step amr_chroquetas) and gets 05.amr/{sample}/amr_summary.tsv, and MultiQC shows the AMR table. links.chroquetas_link is then required. With off, neither step runs, and the link is not read. |
mito_genetic_code |
auto |
auto (any case, or an empty value), or the number of an NCBI genetic code, 1-6, 9-16 or 21-33 (7, 8 and 17-20 are not NCBI codes, and miniprot refuses them) |
AMR on | The genetic code of the second ChroQueTas run, on the mitochondrial genome, where cytochrome b is encoded. That run is made only for the 15 species whose database entry includes cytochrome b. With auto, the code is chosen per sample: code 3 (yeast mitochondrial) for the four Saccharomycetaceae of the database (Saccharomyces cerevisiae, S. paradoxus, Nakaseomyces glabratus, Kluyveromyces marxianus), and code 4 (mold mitochondrial) for every other species. A number sets that code for every sample. The nuclear run always uses the code ChroQueTas chooses for the species (Two runs). |
chroquetas_script_sha256 |
the checksum of bin/ChroQueTas.sh at the template address |
64 hexadecimal characters (capitals are accepted) | AMR on | The SHA-256 that the downloaded script must have, checked before anything runs it. |
chroquetas_db_sha256 |
the checksum of FungAMR_db/db-v20250811.tgz at the template address |
64 hexadecimal characters (capitals are accepted) | AMR on | The SHA-256 that the downloaded database archive must have, checked before it is unpacked. |
The template address names one commit, so the files behind it do not change. To use another
version, change the link and both checksums together (sha256sum <file> prints them). A wrong value
stops the run with [FunFlux] parameters.amr.<key>: ..., for example
[FunFlux] parameters.amr.mito_genetic_code: must be auto or the number of an NCBI genetic code: 1-6, 9-16 or 21-33 (got: <value>).
Every dry run prints one line, AMR screen: ChroQueTas on (licence CC BY-NC-ND 4.0: non-commercial use).
or AMR screen: off.
A change re-runs the following steps:
| Change | Re-runs |
|---|---|
mito_genetic_code |
amr_chroquetas and MultiQC |
links.chroquetas_link, chroquetas_script_sha256 or chroquetas_db_sha256 |
chroquetas_db, then amr_chroquetas of every sample |
| the species, column 2 of the annotation table | also the gene prediction and everything after it, because funannotate reads the species too |
The amr keys and the link re-run only the AMR steps and the report, while a new species
re-runs the whole annotation.
longread and hybrid¶
These two blocks hold the long-read settings: the assembler, the ONT adapter trimming, Filtlong,
Medaka and hifiasm, and in hybrid mode also the Filtlong guidance.
parameters:
longread:
assembler: hifiasm # hifiasm | flye
flye_input_mode: auto # auto | nano-raw | nano-hq
medaka_model: auto
medaka_model_fallback_auto: false
ont_adapter: detect # detect | off | the sequence to trim
filtlong:
min_length: 1000
keep_percent: 90
length_weight: 10
target_bases:
hifiasm:
genome_size:
bloom_filter_bits: 0
purge_dups: auto
homozygous_coverage: auto
telomere_motif:
hybrid:
# the same keys as longread, plus:
short_read_guidance: false
filtlong_split: 1000
The long-read settings sit in the block named after the mode, parameters.longread in longread
mode and parameters.hybrid in hybrid mode. Each block is read only in its own mode. The same
keys at the top of parameters, where FunFluxL and FunFluxL+ kept their long-read settings, stop
the run in every mode.
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
assembler |
hifiasm |
hifiasm, flye |
longread, hybrid |
One assembler for the whole run. Flye does not repeat its assembly byte for byte from run to run. |
flye_input_mode |
auto |
auto, nano-raw, nano-hq, while pacbio-hifi stops the run |
longread, hybrid |
The Flye read mode of ONT samples. auto gives --nano-hq, or --nano-raw when medaka_model names a model containing fast. PacBio samples always get --pacbio-hifi. Ignored with hifiasm, with a NOTE when it is set. |
medaka_model |
auto |
auto (also empty or an unquoted null, true, yes, on, 1), false for no Medaka (also no, off, 0, none, null in quotes), or any other text, taken as a model name |
longread, hybrid |
Medaka polishing of ONT samples. PacBio samples never use Medaka. auto takes the model from the basecaller tag in the first 100 reads of the raw FASTQ (exactly one tag must be present) and needs network access once. The model is checked before the assembler starts. |
medaka_model_fallback_auto |
false |
true, false |
longread, hybrid |
When a named model is not valid, try auto instead of stopping. |
ont_adapter |
detect |
detect (also empty), off (also false, no, none), or a sequence of 20 to 200 letters A, C, G and T |
longread, hybrid |
Removes the ONT sequencing adapter, and the barcode that follows it, from the read ends of ONT samples with fastplong before Filtlong. detect works the sequence out from the reads and leaves reads that are already trimmed as they are; a sequence is trimmed as written. A short unit repeated end to end (a telomere repeat, for example) stops the run, and a sequence under 50 bp gets a NOTE. PacBio samples are never trimmed (Adapter trimming). |
filtlong.min_length |
1000 | an integer ≥ 1 | longread, hybrid |
Filtlong --min_length, in bp. |
filtlong.keep_percent |
90 | a number above 0 and at most 100 | longread, hybrid |
--keep_percent, the share of the bases kept, best reads first. |
filtlong.length_weight |
10 | a number above 0 | longread, hybrid |
--length_weight. Higher values favour longer reads. |
filtlong.target_bases |
empty | empty or 0 for no cap, or a size such as 1500000000 or 1.5g |
longread, hybrid |
--target_bases, a cap on the bases kept, for very deep runs. With Flye and very deep ONT reads, set it to about 100 times the genome size (Flye). |
hifiasm.genome_size |
empty | empty or 0, or a size such as 40000000 or 40m |
longread, hybrid |
--hg-size, the haploid genome size. When it is empty, hifiasm infers the depth itself. |
hifiasm.bloom_filter_bits |
0 | an integer from 0 to 63 | longread, hybrid |
-f, where 0 suits small fungal genomes. |
hifiasm.purge_dups |
auto |
auto (also empty), or 0 to 3 |
longread, hybrid |
-l, how strongly duplicated haplotigs are purged. auto keeps hifiasm's own choice. |
hifiasm.homozygous_coverage |
auto |
auto (also empty), or an integer ≥ 1 |
longread, hybrid |
--hom-cov, the read depth of the homozygous peak. |
hifiasm.telomere_motif |
empty | DNA or IUPAC letters, such as CCCTAA |
longread, hybrid |
--telo-m. Set it only when the organism's telomere repeat is known. |
short_read_guidance |
false |
true, false |
hybrid |
With true, Filtlong scores each long read of an ONT sample against the selected pairs, the Illumina pairs properly paired on the screened guide assembly (-1, -2). With false, every sample gets the plain filter of longread mode. PacBio samples are never guided. |
filtlong_split |
1000 when the key is missing | an integer ≥ 1, or empty or null to score but never cut |
hybrid |
With guidance, adds --trim --split <N>, so that a read is cut where the Illumina reads stop supporting it for N bp. Not used when short_read_guidance is false, and a number other than 1000 then gets a NOTE. |
PacBio samples are not guided, because cutting accurate HiFi reads where the Illumina coverage has
a gap would throw away their length. Filtlong's README advises against a short-read reference
unless you are confident in the quality of the short reads, since long reads that span a region the
short reads miss can score low. That is why the guidance is off by default.
short_read_guidance: true turns it on, and filtlong_split: null then keeps the scoring without
cutting.
The Filtlong defaults are sized for ONT reads and provisional for PacBio HiFi. hifiasm always runs
with --primary. Every dry run prints the decisions for each sample, and
One technology per sample lists what differs
between ONT and PacBio HiFi samples.
See Long reads, Hybrid, The Medaka model and Filtlong guidance in hybrid mode.
contigs¶
The contigs block has one key, which switches the screen on for supplied assemblies.
| Key | Default | Allowed values | Modes | What it does |
|---|---|---|---|---|
screen |
false |
true, false |
contigs (checked in every mode) |
With true, the contamination and mitochondrion screen runs on the supplied FASTA. It needs directories.blast_db, and adds contigs_filt.fasta, the contaminants/ and mitochondria/ folders, contigs_all.fasta and contigs_mitochondrial.fasta to the outputs. With false there is no screen, and contigs_final.fasta is the FASTA after the contig filter. With SPAdes-style headers the filter keeps the contigs of at least 500 bp and 2x coverage, and other headers are only cut at the first space or tab. With false, a NOTE also warns that a mitochondrial genome in contigs_final.fasta would be annotated as nuclear. |
Assemblies from a sequencing provider usually still contain the mitochondrial genome. See Pre-assembled contigs.
Annotation parameter table¶
The annotation parameter table gives FunFlux the species, the protein evidence and the AUGUSTUS
model of each sample. It is a tab-separated text file, named by files.annotation_params, with
three or four columns (the fourth is optional) and one row per sample.
| Column | Content | Used as |
|---|---|---|
1 sample |
the sample name, as found in the input folder | the link between the row and the sample |
2 species |
the species name, such as Fusarium graminearum |
funannotate predict -s, the organism of the GenBank files and of the .sqn submission file. With spaces turned into _ and _{sample} appended, it is the stem of funannotate's file names (Fusarium_graminearum_SAMPLE1.gbk). With the AMR screen on, it is also the species looked up in the FungAMR database (The species). |
3 proteins |
path of a protein FASTA of related fungi, such as the RefSeq proteome of a species of the same genus (how to download one) | gene evidence, as funannotate predict --protein_evidence <file> <funannotate_db>/uniprot_sprot.fasta |
4 augustus_species |
optional: the name of a stored AUGUSTUS model, or empty, or - |
a name gives funannotate predict --augustus_species <name>, and AUGUSTUS uses that model as it is, without training on this genome. Empty or -, or no fourth column at all, means that AUGUSTUS is trained on the genome's BUSCO genes, the long way with prediction.augustus_optimize |
#sample species proteins augustus_species
SAMPLE1 Fusarium graminearum /path/to/fusarium_proteins.faa -
ARSEF3097 Beauveria bassiana /path/to/beauveria_bassiana_proteins.faa fusarium_graminearum
The first row trains AUGUSTUS on the genome (the default), and the second uses the stored
fusarium_graminearum model as it is.
FunFlux checks the table before any job starts:
- Lines starting with
#and blank lines are skipped, and spaces around each field are removed. Column names are not read, so the position decides. The shipped exampleconfig/annotation_parameters.tsv, for instance, calls the fourth columnmodel. - Every data line, including a line for a sample outside the batch, has three or four tab-separated
fields, and no sample name appears twice. Columns separated by spaces give, for example,
[FunFlux] files.annotation_params: line 2 has 1 tab-separated columns; expected 3 or 4 (sample, species, proteins and, optionally, augustus_species). - Every sample of the batch has a row, and its protein file exists and is not empty. A relative path is read from the launch folder. The protein files of samples outside the batch are not checked, so one table can serve several batches.
A named AUGUSTUS model must be one of the stored models, the folder names in
<funannotate_db>/trained_species/. The default funannotate database holds 166 of them, including
fusarium_graminearum, aspergillus_nidulans, botrytis_cinerea and neurospora_crassa. With
FUNANNOTATE_DB set, funannotate species lists them. Capitals count. When the name is checked
depends on whether the database is on disk yet, and every dry run prints the choice for each
sample:
| The funannotate database | The name is checked | The dry-run line, for example |
|---|---|---|
| is on disk | before any job starts | AUGUSTUS: SAMPLE1 uses the stored model fusarium_graminearum. |
| is not downloaded yet | by rule augustus_model_check, right after the database is unpacked, with its log in logs/augustus_model_check_{sample}.log |
SAMPLE1 names the stored model fusarium_graminearum (checked once the database is unpacked), and a sample with an empty column 4 gets the same (checked once the database is unpacked) |
A name that is not in the database stops the run, at the latest right after the database
is unpacked. The message gives the closest names, for example
[FunFlux] files.annotation_params: sample 'SAMPLE1' names the AUGUSTUS model 'fusarium_graminaerum', which is not a trained species of the funannotate database at '<db>'. Did you mean 'fusarium_graminearum'? ....
With column 4 empty, AUGUSTUS is trained on the genome and needs at least 200 BUSCO models for it (The AUGUSTUS model). If the database holds a model stored earlier under the sample's own name, funannotate uses that instead, and a NOTE says so. Which of the two to choose is discussed on Gene prediction. A changed row re-runs gene prediction and every annotation step of that sample.
Coming from a v1 configuration¶
A v1 configuration stops at once, because it has no mode. Start from the v2 template and carry
your values over. Coming from v1 lists every key that was renamed,
moved or removed, and every v1 value that now stops the run.