veryfasttree(1)
β¨ NAME β¨
Welcome to the veryfasttree(1) manual π It's a User Commands page, so it's all about the command-line tool.
VeryFastTree is all about speeding up the estimation of phylogenetic trees for large alignments through parallelization and vectorization strategies π¦
β¨ DESCRIPTION β¨
Okay so VeryFastTree is a super efficient, highly optimized take on the FastTree-2 tool π It's inspired by FastTree-2 and built to infer approximately-maximum-likelihood phylogenetic trees from nucleotide or protein sequence alignments π§¬
It was made for big alignments, so it leans on parallelization and vectorization to level up performance and scalability. The result is that you can build trees in a fraction of the time it used to take ππ₯
Bestie, it keeps FastTree-2's integrity. VeryFastTree keeps the same phases, methods, and heuristics for estimating trees, so its topological accuracy is equivalent to FastTree-2 π«Ά And here's the big win: unlike the parallel version of FastTree-2, VeryFastTree guarantees deterministic results, so there are no sneaky variations in the output π
Transitioning is lowkey effortless. VeryFastTree uses the exact same command line arguments as FastTree-2, so you just swap FastTree-2 for VeryFastTree, keep the same set of options, and your analyses get a major glow-up β¨
VeryFastTree is more accurate than PhyML 3 with default settings, and much more accurate than the distance-matrix methods that are traditionally used for large alignments π For models, it uses the Jukes-Cantor or generalized time-reversible (GTR) models of nucleotide evolution, plus the JTT (Jones-Taylor-Thornton 1992) model of amino acid evolution πΈ To handle rates varying across sites, it gives each site a single rate, which is the "CAT" approximation π Lastly, to check how reliable each split in the tree is, it computes local support values with the Shimodaira-Hasegawa test. These are the same as PhyML 3's "SH-like local supports" π
β¨ SYNOPSIS β¨
Here's how you actually call it:
VeryFastTree protein_alignment > tree
VeryFastTree -nt nucleotide_alignment > tree
VeryFastTree -nt -gtr < nucleotide_alignment > tree
It accepts alignments in NEXUS, Fasta, Fastq or Phylip interleaved formats, and they can be compressed with ZLib and libBZ2 π¦
Common options
These are the greatest hits you'll use most π
-quietβ shhh, don't report information to you while it runs π€«-noprβ skip the progress indicator-log logfileβ save intermediate trees, settings, and model details-fastestβ speeds up the neighbor joining phase and reduces memory usage. It's recommended for more than 50,000 sequences π-n <number>β analyze multiple alignments (phylip format only). Use this for global bootstrap, with seqboot and CompareToBootstrap.pl π-nosupportβ don't compute support values-intree newick_fileβ set the starting tree(s)-intree1 newick_fileβ use this one starting tree for all the alignments. It's a faster move for global bootstrap on huge alignments π-pseudoβ use pseudocounts, which are recommended for highly gapped sequences π«§-gtrβ the generalized time-reversible model (nucleotide alignments only) π§¬-wagβ the Whelan-And-Goldman 2001 model (amino acid alignments only)- sequence names and quote names in the output tree (fasta input only; VeryFastTree will not be able to read these trees back in β οΈ
-nomlβ turn off maximum-likelihood-nomeβ turn off minimum-evolution NNIs and SPRs. It's recommended if you're running additional ML NNIs with-intreeπ-nome -mllenβ used with-intreeto optimize branch lengths for a fixed topology-cat #β specify the number of rate categories of sites (default 20). Or use-nocatfor constant rates π-gammaβ after optimizing the tree under the CAT approximation, rescale the lengths to optimize the Gamma20 likelihood-constraints constraintAlignmentβ constrain the topology search. The constraintAlignment should have 1s or 0s to indicate splits π-threads <number>(Env:OMP_NUM_THREADS) β the number of threads (n) used in the parallel execution π§΅-double-precisionβ use double precision arithmetic. It's the same as compiling FastTree-2 with-DUSE_DOUBLEπ-ext nameβ speeds up computations by enabling the vector extensions. Available: AUTO (default), NONE, SSE, SSE3, AVX, AVX2, AVX512 or CUDA β‘-expertβ see even more options π
Detailed usage for VeryFastTree
Here's the full, extra-long combo breakdown π§Ύ
VeryFastTree [-nt] [-n 100] [-quote] [-pseudo | -pseudo 1.0] [-boot 1000
| -nosupport] [-intree starting_trees_file | -intree1
starting_tree_file] [-quiet | -nopr] [-nni 10] [-spr 2] [-noml | -mllen
| -mlnni 10] [-mlacc 2] [-cat 20 | -nocat] [-gamma] [-slow | -fastest]
[-2nd | -no2nd] [-slownni] [-seed 1253] [-top | -notop] [-topm 1.0
[-close 0.75] [-refresh 0.8]] [-gtr] [-gtrrates ac ag at cg ct gt]
[-gtrfreq A C G T] [ -lg | -wag | -trans transitionmatrixfile ] [-matrix
Matrix | -nomatrix] [-nj | -bionj] [ -constraints constraintAlignment [
-constraintWeight 100.0 ] ] [-log logfile] [ alignment_file ] [ -threads
1 ] [ -threads-level 3 [ -threads-ptw 20 ] [-threads-verbose] [
-double-precision ] [ -ext AUTO ] [ -fastexp 0 ] [ -disk-computing ] [
-disk-computing-path ./ ] [ -disk-dynamic-limit inf ] [
-relative-progress ] [ -out output_newick_file | > newick_tree]
or
VeryFastTree [-nt] [-matrix Matrix | -nomatrix] [-rawdist] -makematrix
[alignment] [-n 100] > phylip_distance_matrix
VeryFastTree supports NEXUS, Fasta, Fastq or Phylip interleaved formats π
VeryFastTree supports files compressed with ZLib and libBZ2 π¦
By default, VeryFastTree expects protein alignments. If you're working with nucleotides, add -nt π§¬
If you don't give it an alignment file, VeryFastTree reads standard input instead π
β― part 2 is coming up next, bestie π¦
β¨ Support value options β¨
Okay so by default, VeryFastTree works out local support values by resampling the site likelihoods 1,000 times and running the Shimodaira Hasegawa test π
. If you use -nome, it'll compute minimum-evolution bootstrap supports instead. Either way, the support values are proportions from 0 to 1 π¦.
-nomeβ tells it to compute minimum-evolution bootstrap supports πΈ-nosupportβ turns support values off completely π-boot <number>β uses just n resamples β¨-nobootβ means no resamples, so don't use them at all π«Ά-seed <number>β sets the seed used to initialize the random number generator π²
π¦ Searching for the best join π¦
By default, VeryFastTree combines the 'visible set' of fast neighbor-joining with local hill-climbing, just like relaxed neighbor-joining does. It's giving efficiency π₯
-slowβ exhaustive search, like NJ or BIONJ but with different gap handling. Heads up though,-slowtakes half an hour instead of 8 seconds for 1,250 proteins π-fastestβ searches only the visible set (the top hit for each node). Unlike the original fast neighbor-joining,-fastestupdatesvisible(C)after joining A and B ifjoin(AB,C)is better thanjoin(C,visible(C)). It also updates out-distances in a very lazy way.-fastestturns-2ndon as well, so if you want to avoid that, use-fastest -no2ndπ
π Top-hit heuristics π
By default, VeryFastTree uses a top-hit list to speed up the search β‘
-top 0.01β sets the top-hit list size to 1.0 if it is less than 0.01 π-notop(or-slow) β turns this feature off so it compares all leaves to each other, and all new joined nodes to each other π-topm 1.0β sets the top-hit list size toparameter*sqrt(N). VeryFastTree estimates the top m hits of a leaf from the top2*mhits of a 'close' neighbor. "Close" meansd(seed,close) < 0.75 * d(seed, hit of rank 2*m). It also updates the top-hits as joins proceed π§-close 0.75β modifies the close heuristic. Lower is more conservative π-refresh 0.8β compares a joined node to all other nodes if its top-hit list is less than 80% of the desired length, or if the age of the top-hit list islog2(m)or greater π-2ndor-no2ndβ turns the 2nd-level top hits heuristic on or off. This reduces memory usage and running time, but it may lead to marginal reductions in tree quality. (By default,-fastestturns on-2nd.) π
πΈ Join options πΈ
-njβ regular (unweighted) neighbor-joining, and it's the default π-bionjβ weighted joins as in BIONJ. VeryFastTree will also weight joins during NNIs π¦
π Constrained topology search options π
-constraints alignmentfileβ an alignment with values of0,1, and-. Not all sequences need to be present. A column of 0s and 1s defines a constrained split. Some constraints may be violated, so checkviolating constraints:in standard error π-constraintWeight wβ how strongly the constraints get weighted. A value of1means a penalty of1in tree length for violating a constraint. Default:100.0π
π Optimizations π
-threads <number>(Env:OMP_NUM_THREADS) β the number of threads used in parallel execution. If this option isn't set, the value comes from the environment variableOMP_NUM_THREADS. It's the same approach FastTree-2 follows. Ifn=1, VeryFastTree behaves the same way as FastTree-2 compiled without the-DOPENMPflag π§΅-threads-level <number>β the degree of parallelization, in[0 - 4]. Here's the breakdown bestie:0: VeryFastTree uses the same parallelization strategy as FastTree-2, plus some new parallel blocks.1: VeryFastTree uses parallel blocks that need additional memory for computation.2: VeryFastTree accelerates the rounds of ML NNIs using its tree partitioning method.3(default): VeryFastTree performs more computations without preserving sequential order.4: VeryFastTree accelerates the rounds of SPR steps using its tree partitioning method. This can only be used with datasets larger than2^sprlength + 2π₯
Note: Each level includes the previous ones, and computation at level 2 and above is performed in a different tree traverse order. So the result may change, but it's still correct π«Ά
-threads-mode <number>β in[0 - 1], changes the mode of parallelization. If level is 0, VeryFastTree uses non-deterministic parts, some inspired by FastTree-2 but improved. If level is 1 (default), VeryFastTree only uses deterministic parallelization. Since version 4.0, deterministic algorithms are at least faster than non-deterministic ones, so deterministic is the preferred choice π-threads-ptw <number>β (Partitioning Tendency Window) sets the size of the partitioning tendency window used by the tree partitioning algorithm to decide when to stop searching. The window stores the last solutions and checks whether a better one can be found. Increasing the value lets the algorithm explore the tree deeper and potentially find better solutions. The default value is20π§-threads-verboseβ shows the subtrees assigned to the threads and the theoretical speedup, but only withverbose > 0π-double-precisionβ uses double precision arithmetic. It's equivalent to compiling FastTree-2 with-DUSE_DOUBLEπ-ext nameβ speeds up computations by enabling vector extensions. Available options:AUTO(default),NONE,SSE,SSE3,AVX,AVX2,AVX512, orCUDAβ‘-fastexp <number>β in[0 - 3], selects an alternative implementation for the exponential functionexp(x), which has a big impact on performance. The options are:0: built-in math library with double precision (default)1: built-in math library with simple precision (not recommended with the-double-precisionoption)2: fast implementation that computes an approximation ofexp(x)using double precision3: fast implementation that computes an approximation ofexp(x)using simple precision (not recommended with the-double-precisionoption) π
-disk-computingβ if there isn't enough available RAM for the computation, disk gets used to store extra data when it wasn't needed.
Warning: Using disk to perform the computation will substantially increase the execution time π
-disk-computing-path pathβ works like-disk-computing, but lets you use a custom path folder to store data π-disk-dynamic-computingβ by default, disk computing only creates files for static data in RAM, so there's no significant performance impact as long as you have available RAM. This option reduces memory usage even further by storing dynamic data on disk. But even if there's enough RAM, it will hurt performance because of the constant creation and deletion of files π-disk-dynamic-limit <number>β-disk-dynamic-computingcan exceed the limit of the memory-mapped file system. If 'memory mapping fails' errors pop up, setting a limit will fix it. In Linux, you can check the limit withsysctl vm.max_map_count. It's important not to use the exact value, and to leave a small margin for other operations that need this feature π-relative-progressβ shows the relative time to the previous step rather than the absolute time in the progress report β±οΈ
π₯ Deprecated π₯
Heads up: these options are deprecated, so they're not it anymore.
-logdistβ uses logarithmic distances. It's now on by default and obsolete π ββοΈ-exactmlβ exact posterior distributions. It's now on by default and obsolete π ββοΈ-mlexactβ exact posterior distributions. It's now on by default and obsolete π ββοΈ
For more information, check out https://github.com/citiususc/veryfasttree or http://www.microbesonline.org/fasttree/ πΈ
And that's the whole page, bestie! π«Ά Brought to you by the Univ. of Santiago de Compostela, dated June 2023 πβ¨
π¦ where this page comes from
- debian trixie: veryfasttree 4.0.4+dfsg-2 Β· GPL-3.0-only
- ubuntu questing: veryfasttree 4.0.4+dfsg-2
- ubuntu resolute: veryfasttree 4.0.5+dfsg-2 Β· GPL-3.0-only
- ubuntu stonking: veryfasttree 4.0.5+dfsg-2 Β· GPL-3.0-only
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms