---
name: "mptp"
section: "1"
platform: "linux"
package: "mptp"
version: "0.2.5-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/mptp"
---

# mptp(1)

single-locus species delimitation

## NAME

mptp — single-locus species delimitation

## SYNOPSIS

Maximum-likelihood species delimitation:

**mptp** --ml (--single \| --multi) --tree\_file *newickfile*  --output\_file *outputfile* \[*options*\]

Species delimitation with support values:

**mptp** --mcmc *positive integer* (--single \| --multi) (--mcmc\_startnull \| --mcmc\_startrandom \| --mcmc\_startml) --mcmc\_log *positive integer* --tree\_file *newickfile* --output\_file *outputfile* \[*options*\]

## DESCRIPTION

Species is one of the fundamental units of comparison in virtually all subfields of biology, from systematics to anatomy, development, ecology, evolution, genetics and molecular biology. The aim of **mptp** is to offer an open source tool to infer species boundaries on a a given phylogenetic tree based on the Poisson Tree Process (PTP) and the Multiple Poisson Tree Process (mPTP) models.

**mptp** offers two methods for inferring species delimitation. First, a maximum-likelihood based method that uses a dynamic programming approach to infer an ML estimate. Second, an mcmc approach for sampling the space of possible delimitations providing the user with support values on the tree clades. Both approaches are available in two flavours: the PTP and the mPTP model. The PTP model is specified by using the *single* switch and the mPTP by using *multi*.

### Input

The input for **mptp** is a newick file that contains one phylogenetic tree, i.e., branches express the expected number of substitutions per alignment site.

### Options

**mptp** parses a large number of command-line options. For easier navigation, options are grouped below by theme.

General options:

- **--help**

  Display help text and exit.

- **--version**

  Output version information and exit.

- **--quiet**

  Suppress all output to stdout except for warnings and fatal error messages.

- **--tree\_file** *filename*

  Input newick file that contains a phylogenetic tree. Can be rooted or unrooted.

- **--output\_file** *filename*

  Specifies the prefix used for generating output files. For maximum-likelihood species delimitation two files will be created. First, *filename*.txt that contains the actual delimitation and *filename*.svg that contains an SVG figure of the computed delimitation. For mcmc analyses, a file *filename*.txt is created that contains the newick tree with supports values.

- **--outgroup** *comma-separated list of taxa*

  All computations for species delimitation are carried out on rooted trees. This option is used only (and is required) In case an unrooted tree was specified with the --tree\_file option. *mptp* roots the unrooted tree by splitting the branch leading to the most recent common ancestor (MRCA) of the comma-separated list of taxa into two branches of equal size and introducing a new node (the root of the new rooted tree) that connects these two branches.

- **--outgroup\_crop**

  Crops taxa specified with the --outgroup option from the the tree.

- **--min\_br** *real*

  Any branch lengths in the input tree smaller or equal than *real* are excluded (ignored) from the computations. In addition, for mcmc analyses, subtrees that exclusively consist of branch lengths smaller or equal to *real* are completely ignored from the proposals (support values for those clades are set to 0). (default: 0.0001)

- **--precision** *positive integer*

  Specifies the precision of the decimal part of floating point numbers on output (default: 7)

- **--minbr\_auto** *filename*

  Automatically detects the minimum branch length from the p-distances of the FASTA file *filename*.

- **--tree\_show**

  Show an ASCII version of the processed input tree (i.e. after it is rooted by, potentially cropping, the outgroup).

Maximum-likelihood estimations:

Estimating the maximum-likelihood delimitation is triggered by the switch --ml followed by --single (the PTP model) or --ml --multi (the mPTP model). Note that these two methods affect how options --output\_file behaves and can be controlled using the --min\_br switch. Both methods require a rooted phylogenetic tree, however an unrooted tree may be specified in conjunction with the option --outgroup. In this case, *mptp* roots it at that outgroup (see General options, --outgroup for more info). Note that both methods output an SVG depiction of the ML delimitation. See Visualization for more information on adjusting and fine-tuning the SVG output.

Both methods ignore discard branch lengths of size smaller than the size specified using the --min\_br option. The PTP model then attempts to find a connected subgraph of the rooted tree that (a) contains the root, and (b) the sum of likelihoods of fitting the edges of that subgraph in one exponential distribution and the remaining  edges in another (exponential distribution) is maximized. With likelihood we mean the sums of the probability density function with the mean defined as the reciprocal of the average of edge lengths in the particular distribution.

- **--ml --single**

  Triggers the algorithm for computing an ML estimate of the delimitation using the PTP model.

- **--ml --multi**

  Triggers the algorithm for computing an ML estimate of the delimitation using the mPTP model.

- **--pvalue real**

  Only used with the PTP model (specified with --single). Sets the p-value for performing a likelihood ratio test. Note that, there is no likelihood ratio test for the mPTP model this test is not done. (default: 0.001)

MCMC method:

The MCMC method is triggered with the --mcmc switch combined with either --single (the PTP model) or --multi (the mPTP model).

Some more stuff to write

- **--mcmc positive integer --single**

  Triggers the algorithm for computing support values by taking the specified number of MCMC samples (delimitations) using the PTP model.

- **--mcmc positive integer --multi**

  Triggers the algorithm for computing support values by taking the specified number of MCMC samples (delimitations) using the mPTP model.

- **--mcmc\_sample positive integer**

  Sample only every n-th MCMC step.

- **--mcmc\_log**

  Log the scores (log-likelihood) for each MCMC sample in a file and create an SVG plot.

- **--mcmc\_burnin positive integer**

  Ignore all MCMC samples generated before the specified step. (default: 1)

- **--mcmc\_runs positive integer**

  Perform multiple MCMC runs. If more than 1 run is specified, mptp will generate one seed for each run based on the provided seed using the --seed switch. Output files will be generated for each run (default: 1)

- **--mcmc\_credible real**

  Specify the probability (0.0 to 1.0) for which to generate the credible interval i.e., the probability the true number of species will fall within the credible interval given the observed data. (default: 0.95)

- **--mcmc\_startnull**

  Start MCMC sampling from the null-model.

- **--mcmc\_startrandom**

  Start MCMC sampling from a random delimitation.

- **--mcmc\_startrandom**

  Start MCMC sampling from the ML delimitation.

- **--seed positive integer**

  Specifies the seed for the pseudo-random number generator. (default: randomly generated based on system time)

SVG Output:

The ML method generates one SVG file that visualizes the processed input tree (i.e. after it is rooted by, potentially cropping, the outgroup) and marks the subtrees corresponding to coalescent processes (the detected species groups) with red color, while the speciation process is colored green.

The MCMC method generates one SVG file per run visualizing the processed tree, and indicates the support value for each node, i.e., the percentage of MCMC samples (delimitations) in which the particular node was part of the speciation process.  A value of 1 means it was always in the speciation process while a value of 0 means it was always in a coalescent process. The tree branches are colored according to the support values of descendant nodes; a support of value of 0 is colored with red, 1 with black, and values in between are gradients of the two colors. Only support values above 0.5 are shown to avoid packed numbers in dense branching events. In addition, if --mcmc\_log is specified, an additional SVG image of log-likelihoods plots for each sampled delimitation is created.

- **--svg\_width positive integer**

  Sets the total width (including margins) of the SVG in pixels. (default: 1920)

- **--svg\_fontsize positive integer**

  Size of font in SVG image. (default: 12)

- **--svg\_tipspacing positive integer**

  Vertical space in pixels between taxa in SVG tree. (default: 20)

- **--svg\_legend\_ratio real**

  Ratio (value between 0.0 and 1.0) of total tree length to be displayed as legend line.  (default: 0.1)

- **--svg\_nolengend**

  Hide legend.

- **--svg\_marginleft positive integer**

  Left margin in pixels. (default: 20)

- **--svg\_marginright positive integer**

  Right margin in pixels. (default: 20)

- **--svg\_margintop positive integer**

  Top margin in pixels. (default: 20)

- **--svg\_marginbottom positive integer**

  Top margin in pixels. (default: 20)

- **--svg\_inner\_radius positive integer**

  Radius of inner nodes in pixels. (default: 0)

## EXAMPLES

Compute the maximum likelihood estimate using the mPTP model by discarding all branches with length below or equal to 0.0001

**mptp** --ml --multi --min\_br 0.0001 --tree\_file *newick.txt* --output\_file *out*

Run an MCMC analysis of 100 million steps with the mPTP model, that logs every one million-th step, ignores the first 2 million steps and discards all branches with lengths smaller or equal to 0.0001. Use 777 as seed. The chain will start from the ML delimitation (default).

**mptp** --mcmc 100000000 --multi --min\_br 0.0001 --tree\_file *newick.txt* --output\_file *out* --mcmc\_log 1000000 --mcmc\_burnin 2000000 -seed 777

Perform an MCMC analysis of 5 runs, each of 100 million steps with the mPTP model, log every one million-th step, ignore the first 2 million steps, and detect the minimum branch length by specifying the FASTA file alignment.fa that contains the alignment. Use 777 as seed. Start each run from a random delimitation.

**mptp** --mcmc 100000000 --multi ---mcmc\_runs 5 --mcmc\_log 1000000 --minbr\_auto *alignment.fa* --tree\_file *newick.txt* --output\_file *out* --mcmc\_burnin 2000000 -seed 777 --mcmc\_startrandom

## AUTHORS

Implementation by Tomas Flouri, Sarah Lutteropp and Paschalia Kapli. Additional PTP and mPTP model authors include Kassian Kobert, Jiajie Zhang, Pavlos Pavlidis, and Alexandros Stamatakis.

## REPORTING BUGS

Submit suggestions and bug-reports at \<https://github.com/Pas-Kapli/mptp/issues\>, or e-mail Tomas Flouri \<Tomas.Flouri@h-its.org\>.

## AVAILABILITY

Source code and binaries are available at \<https://github.com/Pas-Kapli/mptp\>.

## COPYRIGHT

Copyright (C) 2015-2017, Tomas Flouri, Sarah Lutteropp, Paschalia Kapli

All rights reserved.

Contact: Tomas Flouri \<Tomas.Flouri@h-its.org\>, Scientific Computing, Heidelberg Insititute for Theoretical Studies, 69118 Heidelberg, Germany

This software is licensed under the terms of the GNU Affero General Public License version 3.

**GNU Affero General Public License version 3**

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program.  If not, see \<http://www.gnu.org/licenses/\>.

## VERSION HISTORY

New features and important modifications of **mptp** (short lived or minor bug releases may not be mentioned):

- **v0.1.0** released June 27th, 2016

  First public release.

- **v0.1.1** released July 15th, 2016

  Bug fix (now LRT test is not printed in output file when using --multi)

- **v.0.2.0** released September 27th, 2016

  Fixed floating point exception error when constructing random trees, caused from dividing by zero.  Changed allocation from malloc to calloc, as it caused unititialized variables when converting unrooted trees to rooted when using the MCMC method. Fixed sample size for the AIC with a correction for finite sample sizes.

- **v.0.2.1** released October 18th, 2016

  Updated ASV to consider only coalescent roots of ML delimitation. Removed assertion stopping mptp when using random starting delimitations for the MCMC method.

- **v0.2.2** released January 31st, 2017

  Fixed regular expressions to allow scientific notation for branch lengths when parsing trees.  Improved the accuracy of ASV score by also taking into account tips forming coalescent roots.  Fixed memory leaks that occur when parsing incorrectly formatted trees.

- **v0.2.3** released July 25th, 2017

  Replaced hsearch() with custom hashtable. Fixed minor output error messages.

- **v0.2.4** released May 14th, 2018

  If we do not manage to generate a random starting delimitation with the wanted number of species (randomly chosen), we use the currently generated delimitation instead.

- **v0.2.5** released Sep 9th, 2023

  Added likelihood ratio test for the multi method. Added implementation for the incomplete gamma function, and removed dependency for GNU scientific library.
