Copyright | (c) Dominik Schrempf 2021 |
---|---|

License | GPL-3.0-or-later |

Maintainer | dominik.schrempf@gmail.com |

Stability | unstable |

Portability | portable |

Safe Haskell | None |

Language | Haskell2010 |

Creation date: Thu Jan 17 14:16:34 2019.

Non-negativity of lengths is not completely ensured. See the documentation of
`Length`

.

## Synopsis

- data Length
- toLength :: Double -> Either String Length
- toLengthUnsafe :: Double -> Length
- class HasMaybeLength e where
- getMaybeLength :: e -> Maybe Length

- class HasMaybeLength e => HasLength e where
- height :: HasLength e => Tree e a -> Length
- rootHeight :: HasLength e => Tree e a -> Length
- distancesOriginLeaves :: HasLength e => Tree e a -> [Length]
- totalBranchLength :: HasLength e => Tree e a -> Length
- normalizeBranchLengths :: HasLength e => Tree e a -> Tree e a
- normalizeHeight :: HasLength e => Tree e a -> Tree e a
- ultrametric :: HasLength e => Tree e a -> Bool
- makeUltrametric :: HasLength e => Tree e a -> Tree e a

# Non-negative length

Non-negative length.

However, non-negativity is only checked with `toLength`

, and negative values
can be obtained using the `Num`

and related instances.

Safe conversion is roughly 50 percent slower.

benchmarking length/length sum foldl' with safe conversion time 110.4 ms (109.8 ms .. 111.0 ms) 1.000 R² (1.000 R² .. 1.000 R²) mean 110.2 ms (110.0 ms .. 110.6 ms) std dev 501.8 μs (359.1 μs .. 730.0 μs) benchmarking length/length sum foldl' num instance time 89.37 ms (85.13 ms .. 94.27 ms) 0.996 R² (0.992 R² .. 1.000 R²) mean 86.53 ms (85.63 ms .. 88.52 ms) std dev 2.239 ms (1.069 ms .. 3.421 ms) benchmarking length/double sum foldl' time 85.47 ms (84.88 ms .. 86.42 ms) 1.000 R² (0.999 R² .. 1.000 R²) mean 85.56 ms (85.26 ms .. 86.02 ms) std dev 611.9 μs (101.5 μs .. 851.7 μs)

#### Instances

toLengthUnsafe :: Double -> Length Source #

Do not check if value is negative.

class HasMaybeLength e where Source #

Class of data types that may have a length.

getMaybeLength :: e -> Maybe Length Source #

#### Instances

HasMaybeLength () Source # | |

Defined in ELynx.Tree.Length getMaybeLength :: () -> Maybe Length Source # | |

HasMaybeLength Length Source # | |

Defined in ELynx.Tree.Length | |

HasMaybeLength Support Source # | |

Defined in ELynx.Tree.Export.Newick | |

HasMaybeLength PhyloExplicit Source # | |

Defined in ELynx.Tree.Phylogeny | |

HasMaybeLength Phylo Source # | |

Defined in ELynx.Tree.Phylogeny |

class HasMaybeLength e => HasLength e where Source #

Class of data types with measurable and modifiable length.

getLength :: e -> Length Source #

setLength :: Length -> e -> e Source #

modifyLength :: (Length -> Length) -> e -> e Source #

#### Instances

HasLength Length Source # | |

HasLength PhyloExplicit Source # | |

Defined in ELynx.Tree.Phylogeny getLength :: PhyloExplicit -> Length Source # setLength :: Length -> PhyloExplicit -> PhyloExplicit Source # modifyLength :: (Length -> Length) -> PhyloExplicit -> PhyloExplicit Source # |

height :: HasLength e => Tree e a -> Length Source #

The maximum distance between origin and leaves.

The height includes the branch length of the stem.

rootHeight :: HasLength e => Tree e a -> Length Source #

The maximum distance between root node and leaves.

# Functions on trees

distancesOriginLeaves :: HasLength e => Tree e a -> [Length] Source #

Distances from the origin of a tree to the leaves.

The distances include the branch length of the stem.