Godon is codon models software written in Go.
Godon development was supported Swiss National Science Foundation
(grant numbers CR32I3_143768, IZLRZ3_163872).
What is special about Godon
-
Godon supports rate variation (see the
manuscript). There are three
models which support rate variation: branch-site (model BSG
), M8
(model M8
) and M0 (model M0G
). You need to specify the number of
discrete categories. Otherwise, there will be no rate variation in
the model. Use --ncat-site-rate
or --ncat-codon-rate
for
site rate variation and
codon rate variation
respectively.
-
Godon supports state aggregation (option --aggregate
). See the
paper for the
details. For the paper, we used v0.5 (39bf774). Since then
likelihood computations code were substantially changed.
-
A heuristic to avoid LRT statistics overestimation, which often
causes false positives in
PAML. Also
corrects for LRT underestimation. Use godon test
to enable.
-
A heuristic for fast branch-length estimation via M0 (--m0-tree
).
-
Multiple optimizers available:
L-BFGS-B,
downhill simplex,
simulated annealing,
SQP,
and others via NLopt.
-
Markov chain Monte Carlo support (Metropolis-Hastings
algorithm).
-
Export to machine-readable
JSON format.
-
Multithreading support (unlike PAML).
-
Starting point specification (only some parameters in PAML) and
randomization (disabled in PAML).
-
Testing multiple branches in one run for the branch-site model.
-
Wide range of models:
M0, M1a,
M2a, M7, M8, and
branch-site.
-
Support for various genetic codes.
-
Checkpoints: in case your long computation was interrupted it
is possible to continue. You need to specify checkpoint file to
use this (--checkpoint
). Warning: this might affect
reproducibility when it comes to random number generator.
Support
You can ask questions at the
bioinformatics stackexchange site.
Do not forget to use the [godon]
tag. Use issues
to report bugs.
Installation
The software was tested on GNU/Linux and Mac OS X.
You can fetch the latest statically compiled binary for GNU/Linux from
the downloads section; do not forget to make it executable prior to
running (chmod +x godon-master-linux-gnu-x86_64
).
Compiling from source
Requirements:
Once you have got all of that you can run:
$ bin/install.sh
Ubuntu 16.04 installation
-
Install Go v1.7 or later. You can start by installing Go v1.6 and
then updating using godeb.
-
Install dependencies:
sudo apt-get install git libnlopt-dev libopenblas-dev build-essentials gfortran
-
Install Gonum BLAS:
CGO_LDFLAGS="-lopenblas" go install github.com/gonum/blas/cgo
-
(Optional) If your Go is older than v1.7 install
go-lbfsg.
-
Install godon:
bin/install.sh
Mac OS X installation using Homebrew
- Install Homebrew.
- Install dependentices:
brew install go gcc nlopt
(may take more
than an hour).
- If you don't have git, install it as well:
brew install git
.
- Install godon:
curl -L https://bitbucket.org/Davydov/godon/raw/master/bin/install.sh | CC=gcc-7 bash
. You need to use gcc from Homebrew, in this case
gcc-7
.
- (Optional) Add the binary directory of Go to the
PATH
variable.
E.g., put export PATH=$PATH:$HOME/go/bin
into your
~/.bash_profile
.
Mac OS X installation (old)
-
Make sure you have C compiler, build tools and gfortran.
-
Install Go (1.7 or later).
-
Install NLopt.
-
Get Godon source code with go get -d bitbucket.org/Davydov/godon/godon
.
-
Install godon. Depending on the installation, you may need to
specify paths to nlopt library and include files and to the fortran
library libgfortran
(on the test system it was
/usr/local/Cellar/gcc/6.2.0/lib/gcc/6
). Run:
CGO_CFLAGS="-I/path/to/nlopt/include" CGO_LDFLAGS="-L/path/to/libgfortran -L/path/to/nlopt/lib" $GOPATH/src/bitbucket.org/Davydov/godon/bin/install.sh
Running
Don't forget to check out the tutorial.
You can find sample datasets in godon/cmodel/testdata
.
You can tell Godon to run a pair of models (M8 vs. M8a or branch-site
H1 vs. H0). In this case, if the foreground branch for the branch-site
model is not labeled with #1
, Godon will test all the branches. To
force this behavior even in the presence of #1
labeled branch, use
--all-branches
. You can exclude terminal branches with
--no-leaves
. You can use branch lengths estimated with M0 using
--m0-tree
.
#!bash
$ godon test BS --m0-tree --all-branches EMGT00050000008747.Drosophila.002.fst EMGT00050000008747.Drosophila.002.nwk
Perform likelihood maximization using L-BFGS-B optimizer for the
Branch-Site model without optimizing the branch lengths (use only a
single CPU).
#!bash
$ godon -p 1 -n BS EMGT00050000000025.Drosophila.001.fst EMGT00050000000025.Drosophila.001.nwk
Run MCMC using M0 model with the downhill simplex optimization.
#!bash
$ godon -m mh M0 EMGT00050000000025.Drosophila.001.fst EMGT00050000000025.Drosophila.001.nwk
repository contents
bin
installation script
bio
reads fasta and translates genetic code
cmodel
codon models
codon
working with codon and transition matrices
godon
is MCMC sampler/maximum likelihood for M0 and branchsite
model
misc
various utilities
optimize
is the MCMC & downhill simplex and other algorithms implementation
dist
functions related to discrete distributions, initially ported from PAML
tree
is tree manipulation library
codon
codon_frequency.go
— F0, F3X4
codon_sequences.go
— codon alignment class
ematrix.go
— matrix class which remembers its eigen
decomposition
matrix.go
— transition matrix routines
cmodel
aggregation.go
— codon aggregation code
branch_site.go
— branch site model
M0.go
— M0 model
model.go
— tree + alignment model base class
tools.go
— misc helper functions
cmodel tests
likelihood_test.go
— likelihood test (compare with codeml)
mcmc_test.go
— MCMC benchmark
mcmcpar_test.go
— test that likelihood is consistent during
chain evaluation
optimize
adaptive.go
— adaptive parameter class
lbfgsb.go
— L-BFGS-B optimizer
mh.go
— metropolis hastings & simulated annealing
implementations
nlopt_callback.go
— NLopt callback wrapper
nlopt.go
— NLopt wrapper
optimizer.go
— Optimizer and Optimizable intefaces
parameter.go
— float64 parameter class
prior.go
— prior functions
proposal.go
— proposal functions
simplex.go
— simplex method
utils.go
— helper functions
misc
brexp
exports branch lengths and node labels in various
formats
brmatch
matches branch labels between two trees
norm
is a sampler for multiple normal distributions model