elynx-tree- Handle phylogenetic trees
Copyright(c) Dominik Schrempf 2021
Safe HaskellNone



Creation date: Sat Jul 18 13:15:49 2020.

A topology, as it is used in phylogenetics is a Topology with unique leaf labels, and the order of the topologies in the sub-forest is considered to be meaningless.

NOTE: The functions in this module are defined using the functions in ELynx.Tree.Phylogeny. This induces a runtime overhead, but greatly reduces the probability of additional bugs.



equal :: (Eq a, Ord a) => Topology a -> Topology a -> Either String Bool Source #

The equality check is slow because the order of children is considered to be arbitrary.

Return Left if a topology does not have unique leaves.

equal' :: Eq a => Topology a -> Topology a -> Bool Source #

Same as equal, but assume that leaves are unique.

intersect :: Ord a => [Topology a] -> Either String [Topology a] Source #

Intersection of topologies.

| See intersect.

bifurcating :: Topology a -> Bool Source #

Check if topology is bifurcating.

| See intersect.

outgroup :: (Default a, Ord a) => Set a -> Topology a -> Either String (Topology a) Source #

Root topology using an outgroup.

See outgroup.

midpoint :: Default a => Topology a -> Either String (Topology a) Source #

Root topology at the midpoint.

See midpoint.

Use depth to measure topology height.

If the midpoint is ambiguous because the sum of the left and right depths is odd, the depth of the left sub-topology will be set to be one node greater than the one of the right sub-topology.

roots :: Default a => Topology a -> Either String [Topology a] Source #

For a rooted tree with a bifurcating root node, get all possible rooted trees.

See roots.