funannotate is a pipeline for genome annotation (built specifically for fungi, but will also work with higher eukaryotes). Installation, usage, and more information can be found at http://funannotate.readthedocs.io
funannotate v1 and funannotate2
There are two versions of funannotate. This repository is funannotate v1. funannotate2 is a complete rewrite. One goal of the rewrite was to reduce dependencies. funannotate2 is released and works. Its documentation is at funannotate2.readthedocs.io. The two programs are not drop-in replacements for each other. Their commands and databases are different. For example, funannotate2 uses the
funannotate2command and theFUNANNOTATE2_DBvariable. It does not have the v1updateorcomparecommands. funannotate v1 is still developed and maintained. Release 1.9.0 is the current release. See issue #1187 for the discussion.
You can use docker to run funannotate. The image is published on the GitHub Container Registry and is rebuilt for each release: ghcr.io/nextgenusfs/funannotate:v1.9.0 (the tags 1.9.0 and latest point to the same release). It contains funannotate, the Rust-optimized EVM, PASA and Trinity, and MariaDB for PASA. It does not contain the funannotate databases, the eggNOG database, GeneMark or SignalP (see licensing below). Download the databases once with funannotate setup and mount that folder into the container. I've also written a bash script that runs the image and detects the user and volume bindings; it uses the image above and mounts $FUNANNOTATE_DB when that variable is set. This route can be achieved with:
# download/pull the release image from the GitHub Container Registry
$ docker pull ghcr.io/nextgenusfs/funannotate:v1.9.0
# Apptainer/Singularity
$ apptainer pull funannotate-1.9.0.sif docker://ghcr.io/nextgenusfs/funannotate:v1.9.0
# download bash wrapper script (optional)
$ wget -O funannotate-docker https://raw.githubusercontent.com/nextgenusfs/funannotate/master/funannotate-docker
# might need to make this executable on your system
$ chmod +x /path/to/funannotate-docker
# assuming it is in your PATH, now you can run this script as if it were the funannotate executable script
$ export FUNANNOTATE_DB=/path/to/funannotate_db # made with `funannotate setup`
$ funannotate-docker test -t predict --cpus 12
This section covers building the release image yourself. The published image
(ghcr.io/nextgenusfs/funannotate:v1.9.0, above) is built from the same Dockerfile;
it replaces the older nextgenusfs/funannotate Docker Hub image (1.8.x). It packages
the rust_EVM_trinity_PASA branch (Rust-optimized PASA/EVidenceModeler/
Trinity forks) via Dockerfile (release) / Dockerfile.dev (iterative dev
builds), installed through conda-pack into /venv. Build it locally:
docker build -t funannotate-live -f Dockerfile .
or convert to a Singularity/Apptainer image for HPC use:
singularity build funannotate-live.sif docker-daemon://funannotate-live:latest
Environment variables baked into the image (all overridable at
container-runtime, either via docker run -e VAR=.../--env VAR=... or by
exporting on the host before singularity exec -- Singularity passes host
env through by default). FUNANNOTATE_DB and EGGNOG_DATA_DIR are both
placeholder subpaths under a common /opt/databases parent -- bind your own
data onto each subpath, or override the variables individually:
| Variable | Image default | Purpose |
|---|---|---|
FUNANNOTATE_DB |
/opt/databases/funannotate_db |
funannotate's core reference DBs. Bind your own onto this path, or override the variable to point elsewhere. |
EGGNOG_DATA_DIR |
/opt/databases/eggnog_db |
EggNOG-mapper DB (~50GB, not baked into the image -- same reason the upstream Docker image omits it, see docs/docker.rst). Bind your own copy onto this path. Without a real DB bound here, funannotate annotate's auto-run of emapper.py crashes rather than skipping cleanly (see docs/containers.rst). |
PASAHOME |
/venv/opt/pasa/src |
PASA install root. |
PERL5LIB |
includes PASA's SAMPLE_HOOKS + PerlLib |
Required for PASA's hook loader to resolve GFF3::GFF3_annot_retriever during funannotate update's annotation-comparison step -- without it, that step crashes with Error, couldn't resolve path for GFF3::GFF3_annot_retriever. |
EVM_HOME |
/venv/opt/evm |
EVidenceModeler install root. |
See docs/containers.rst for a full worked example (build, bind mounts,
Singularity usage on shared HPC storage, and known gotchas).
funannotate 1.9.0: the bioconda package is built separately and may be an older release than this one. For 1.9.0 follow docs/conda.rst (a conda environment for the external tools,
pip install funannotate, and scripts that build the Rust-optimized EVM, PASA and Trinity), or use the container image. The commands below install whatever version bioconda currently has.
The pipeline can be installed with conda (via bioconda):
#add appropriate channels
conda config --add channels defaults
conda config --add channels bioconda
conda config --add channels conda-forge
#then create environment
conda create -n funannotate "python>=3.6,<3.9" funannotate
If conda is taking forever to solve the environment, I would recommend giving mamba a try:
#install mamba into base environment
conda install -n base mamba
#then use mamba as drop in replacmeent
mamba create -n funannotate funannotate
If you want to use GeneMark-ES/ET you will need to install that manually following developers instructions: http://topaz.gatech.edu/GeneMark/license_download.cgi
Note that you will need to change the shebang line for all perl scripts in GeneMark to use /usr/bin/env perl.
You will then also need to add gmes_petap.pl to the $PATH or set the environmental variable $GENEMARK_PATH to the gmes_petap directory.
To install just the python funannotate package, you can do this with pip:
python -m pip install funannotate
To install the most updated code in master you can run:
python -m pip install git+https://github.com/nextgenusfs/funannotate.git
Jonathan M. Palmer, & Jason E. Stajich. (2020). Funannotate v1.8.1: Eukaryotic genome annotation (v1.8). Zenodo. https://doi.org/10.5281/zenodo.1134477
