iqtree / decenttree

Fast Neighbor-Joining and other distance-based methods for phylogenetics
GNU General Public License v2.0
10 stars 6 forks source link

DecentTree

Introduction

DecentTree is a cross-platform command-line program and also a C++ library for inferring phylogenetic trees (in newick format) from distance matrices (supplied in phylip distance matrix formats), or alignments (supplied in fasta format), using well-known algorithms, such as Neighbour Joining, BIONJ and UPGMA.

If you use DecentTree in a publication, please cite:

W. Wang, J. Barbetti, T.K.F Wong, B. Thornlow, R. Corbett-Detig, Y. Turakhia, R. Lanfear, B.Q. Minh (2023) DecentTree: scalable Neighbour-Joining for the genomic era. Bioinformatics, 39, btad536. https://doi.org/10.1093/bioinformatics/btad536

The distance-based tree reconstruction in DecentTree was originally derived from IQ-TREE2 and and then optimized and parallelized for large datasets with more than 10,000 sequences.

Key Features

DecentTree implements several distance-based phylogenetic algorithms:

It includes vectorized versions of NJ, BIONJ, and UNJ. It also includes optimized versions of UPGMA, NJ and BIONJ, all of which use the same techniques as RapidNJ (Simonsen, et al., 2008). All the algorithms are implemented in header files, as template classes, allowing the caller to choose between single or double precision, all implement a standard interface, accepting either Phylip distance matrix files or in-memory matrices, and all are parallelized using OpenMP.

The vectorized versions make use of the VectorClass library. The command-line application allows users to select the algorithm and thread count. DecentTree also makes use of custom vectorized sequence comparison functions (which also available via headers), that are called in parallel, to calculate distance matrices.

The (header only) template classes can be used in other projects. (For full functionality it will be necessary to link with OpenMP - for parallelization - and compile with Agner Fog's VectorClass library - for vectorization).

More Detailed Information

For additional documentation, see:

Acknowledgements and references

Distance Matrix Algorithms

Other components