patristic
Version:
Patristic Inference library for Node and Browser
1,033 lines (630 loc) • 24.8 kB
Markdown
<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
### Table of Contents
- [version][1]
- [Examples][2]
- [Branch][3]
- [Parameters][4]
- [addChild][5]
- [Parameters][6]
- [addParent][7]
- [Parameters][8]
- [ancestors][9]
- [clone][10]
- [consolidate][11]
- [copy][12]
- [count][13]
- [descendants][14]
- [depthOf][15]
- [Parameters][16]
- [distanceBetween][17]
- [Parameters][18]
- [distanceTo][19]
- [Parameters][20]
- [each][21]
- [Parameters][22]
- [eachAfter][23]
- [Parameters][24]
- [eachBefore][25]
- [Parameters][26]
- [eachChild][27]
- [Parameters][28]
- [excise][29]
- [fixDistances][30]
- [fixParenthood][31]
- [Parameters][32]
- [flip][33]
- [getAncestors][34]
- [Parameters][35]
- [getChild][36]
- [Parameters][37]
- [getDescendant][38]
- [Parameters][39]
- [getDescendants][40]
- [Parameters][41]
- [getLeafs][42]
- [getLeaves][43]
- [getMRCA][44]
- [Parameters][45]
- [getRoot][46]
- [hasChild][47]
- [Parameters][48]
- [hasDescendant][49]
- [Parameters][50]
- [hasLeaf][51]
- [Parameters][52]
- [invert][53]
- [isChildOf][54]
- [Parameters][55]
- [isConsistent][56]
- [isDescendantOf][57]
- [Parameters][58]
- [isLeaf][59]
- [isolate][60]
- [isRoot][61]
- [leafs][62]
- [leaves][63]
- [links][64]
- [normalize][65]
- [Parameters][66]
- [Examples][67]
- [path][68]
- [Parameters][69]
- [remove][70]
- [replace][71]
- [Parameters][72]
- [reroot][73]
- [Examples][74]
- [rotate][75]
- [Parameters][76]
- [setLength][77]
- [Parameters][78]
- [setParent][79]
- [Parameters][80]
- [simplify][81]
- [sort][82]
- [Parameters][83]
- [sources][84]
- [Parameters][85]
- [sum][86]
- [Parameters][87]
- [targets][88]
- [Parameters][89]
- [toJSON][90]
- [toMatrix][91]
- [toNewick][92]
- [Parameters][93]
- [toObject][94]
- [toString][95]
- [Parameters][96]
- [parseJSON][97]
- [Parameters][98]
- [parseMatrix][99]
- [Parameters][100]
- [parseNewick][101]
- [Parameters][102]
## version
The [SemVer][103] version string of the patristic library
Type: [String][104]
### Examples
```javascript
console.log(patristic.version);
```
## Branch
A class for representing Branches in trees.
It's written predominantly for phylogenetic trees (hence the
[Newick parser][105],
[neighbor-joining implementation][106], etc.), but could
conceivably be useful for representing other types of trees as well.
### Parameters
- `data` **[Object][107]?** An object containing data you wish to assign to
this Branch object. In particular, intended to overwrite the default
attributes of a Branch, namely `id`, `parent`, `length`, and `children`.
- `children`
### addChild
Adds a new child to this Branch
#### Parameters
- `data` **([Branch][108] \| [Object][107])** The new Branch, or data to attach to it. (optional, default `{}`)
Returns **[Branch][108]** The (possibly new) child Branch
### addParent
Adds a new parent to this Branch. This is a bit esoteric and generally not
recommended.
#### Parameters
- `data` **([Branch][108] \| [Object][107])** A Branch object, or the data to attach to one (optional, default `{}`)
- `siblings` **[Array][109]** An array of Branches to be the children of the new parent Branch (i.e. siblings of this Branch) (optional, default `[]`)
Returns **[Branch][108]** The Branch on which this was called
### ancestors
Returns an array of Branches from this Branch to the root.
[d3-hierarchy compatibility method.][110]
Type: [Array][109]
### clone
Returns a deep clone of the Branch on which it is called. Note that this does
not clone all descendants, rather than providing references to the existing
descendant Branches.
Returns **[Branch][108]** A clone of the Branch on which it is called.
### consolidate
All descendant Branches with near-zero length are excised
Returns **[Branch][108]** The Branch on which this method was called.
### copy
Returns a clone of the Branch on which it is called. Note that this also
clones all descendants, rather than providing references to the existing
descendant Branches. (For a shallow clone, see [Branch.clone][10].
Finally, the cloned Branch will become the root of the cloned tree, having a
parent of `null`.
[d3-hierarchy compatibility method.][111]
Returns **[Branch][108]** A clone of the Branch on which it is called.
### count
Sets the values of all nodes to be equal to the number of their descendants.
Returns **[Branch][108]** The Branch on which it was called
### descendants
Returns an array pf descendants, starting with this Branch.
[d3-hierarchy compatibility method.][112]
Type: [Array][109]
### depthOf
Returns the depth of a given child, relative to the Branch on which it is
called.
#### Parameters
- `descendant` **([Branch][108] \| [String][104])** A descendant Branch (or `id` string
thereof)
Returns **[Number][113]** The sum of the lengths of all Branches between the Branch on
which it is called and `descendant`. Throws an error if `descendant` is not a
descendant of this Branch.
### distanceBetween
Computes the patristic distance between `descendantA` and `descendantB`.
#### Parameters
- `descendantA` **[Branch][108]** The Branch from which you wish to compute
distance
- `descendantB` **[Branch][108]** The Branch to which you wish to compute distance
Returns **[number][113]** The patristic distance between the given descendants.
### distanceTo
Computes the patristic distance between `cousin` and the Branch on which
this method is called.
#### Parameters
- `cousin` **[Branch][108]** The Branch to which you wish to compute distance
Returns **[number][113]** The patristic distance between `cousin` and the Branch on
this method is called.
### each
Visits each Branch descended from the Branch on which it is called in
[Breadth First Search][114]
order and returns the Branch on which it was called.
#### Parameters
- `callback` **[Function][115]** The function to be run on each Branch
Returns **[Branch][108]** The Branch on which it was called.
### eachAfter
Visits each Branch descended from the Branch on which it is called in
[post-traversal order][116]
and returns the Branch on which it was called.
#### Parameters
- `callback` **[Function][115]** Function to run on each Branch
Returns **[Branch][108]** The Branch on which it was called
### eachBefore
Visits each Branch descended from the Branch on which it is called in
[pre-traversal order][117]
and returns the Branch on which it was called.
#### Parameters
- `callback` **[Function][115]** [description]
Returns **\[type]** [description]
### eachChild
Runs a function on each child of the Branch on which it is called.
#### Parameters
- `callback` **[Function][115]** The function to run on each child.
Returns **[Branch][108]** The Branch on which it was called.
### excise
Excises the Branch on which it is called and updates its parent and children.
Returns **[Branch][108]** The parent of the excised Branch.
### fixDistances
Sets the distance values (height and depth) for each Branch
Returns **[Branch][108]** The Branch on which it is called.
### fixParenthood
Repairs incorrect links by recurively confirming that children reference
their parents, and correcting those references if they do not.
If you need to call this, something has messed up the state of your tree
and you should be concerned about that. Just FYI. ¯\\_(ツ)_/¯
#### Parameters
- `nonrecursive` **[Boolean][118]** Should this just fix the children of the
Branch on which it is called, or all descendants?
Returns **[Branch][108]** The Branch on which it was called.
### flip
Reverses the order of (all of) the descendants of the Branch.
Returns **[Branch][108]** The Branch on which this was called.
### getAncestors
Returns an Array of all the ancestors of the Branch on which it is called.
Note that this does not include itself. For all ancestors and itself, see
[Branch.ancestors][9]
#### Parameters
- `includeSelf` **[Boolean][118]** Should the Branch on which this is called be
included in the results?
Returns **[Array][109]** Every Ancestor of the Branch on which it was called.
### getChild
Given an `childID`, returns the child with that id (or `undefined` if no such
child is present).
#### Parameters
- `childID` **[String][104]** the ID of the child to return.
Returns **([Branch][108] \| [undefined][119])** The desired child Branch, or `undefined` if the
child doesn't exist.
### getDescendant
Given an id string, returns the descendant Branch with that ID, or
`undefined` if it doesn't exist.
#### Parameters
- `id` **[String][104]** The id string of the Branch to find
Returns **([Branch][108] \| [undefined][119])** The descendant Branch, or `undefined` if it
doesn't exist
### getDescendants
Returns an array of all Branches which are descendants of this Branch
#### Parameters
- `includeSelf` **[Boolean][118]?** Is this not the Branch on which the user
called the function? This is used internally and should be ignored.
Returns **[Array][109]** An array of all Branches descended from this Branch
### getLeafs
Returns an array of all leaves which are descendants of this Branch.
Alias of [getLeaves][120] for people whose strong suit isn't spelling.
Returns **[Array][109]** An array of all leaves descended from this Branch
### getLeaves
Returns an array of all leaves which are descendants of this Branch
See also: [getLeafs][121]
Returns **[Array][109]** An array of all leaves descended from this Branch
### getMRCA
Traverses the tree upward until it finds the Most Recent Common Ancestor
(i.e. the first Branch for which both the Branch on which it was called and
`cousin` are descendants).
#### Parameters
- `cousin`
Returns **[Branch][108]** The Most Recent Common Ancestor of both the Branch on
which it was called and the `cousin`.
### getRoot
Traverses the tree upward until it finds the root Branch, and returns the
root.
Returns **[Branch][108]** The root Branch of the tree
### hasChild
Determines if a given Branch (or ID) is a child of this Branch
#### Parameters
- `child` **([Branch][108] \| [String][104])** The Branch (or the id thereof) to check for
Returns **[Boolean][118]**
### hasDescendant
Checks to see if `descendant` is a descendant of the Branch on which this
method is called.
#### Parameters
- `descendant` **([Branch][108] \| [String][104])** Either the descendant Branch or its'
`id`.
Returns **[Boolean][118]** True if `descendant` is descended from the Branch from
which this is called, otherwise false.
### hasLeaf
Checks to see if a Branch has a descendant leaf.
#### Parameters
- `leaf`
Returns **[Boolean][118]** True if leaf is both a leaf and a descendant of the
Branch on which this method is called, False otherwise.
### invert
Swaps the branch on which it is called with its parent. This method is
probably only useful as an internal component of [Branch.reroot][73].
Returns **[Branch][108]** The Branch object on which it was called.
### isChildOf
Returns whether the Branch on which it is called is a child of a given parent
(or parent ID).
#### Parameters
- `parent` **([Branch][108] \| [String][104])** A Branch (or ID thereof) to test for
paternity of this Branch.
Returns **[Boolean][118]** True is `parent` is the parent of this Branch, false
otherwise.
### isConsistent
Tests whether this and each descendant Branch holds correct links to both
its parent and its children.
Returns **[Boolean][118]** True if consistent, otherwise false
### isDescendantOf
Returns whether a given Branch is an ancestor of the Branch on which this
method is called. Uses recursive tree-climbing.
#### Parameters
- `ancestor` **[Branch][108]** The Branch to check for ancestorhood
Returns **[Boolean][118]** If this Branch is descended from `ancestor`
### isLeaf
Returns a boolean indicating if this Branch is a leaf (i.e. has no
children).
Returns **[Boolean][118]** True is this Branch is a leaf, otherwise false.
### isolate
Returns a boolean indicating whether or not this Branch is olate.
...Just kidding!
Isolates a Branch and its subtree (i.e. removes everything above it, making
it the root Branch). Similar to [Branch.remove][70], only it returns
the Branch on which it is called.
Returns **[Branch][108]** The Branch object on which it was called.
### isRoot
Returns a boolean indicating if this Branch is the root of a tree (i.e. has
no parents).
Returns **[Boolean][118]** True if this Branch is the root, otherwise false.
### leafs
Returns the array of leaf nodes in traversal order; leaves are nodes with no
children. Alias of [Branch.getLeaves][120] \`cuz spelling is hard.
Type: [Array][109]
### leaves
Returns the array of leaf nodes in traversal order; leaves are nodes with no
children. Alias of [Branch.getLeaves][120].
[d3-hierarchy compatibility method.][122]
Type: [Array][109]
### links
Returns an Array of links, which are plain javascript objects containing a
`source` attribute (which is a reference to the parent Branch) and a `target`
attribute (which is a reference to the child Branch).
[d3-hierarchy compatibility method][123]
Returns **[Array][109]** An array of plain Javascript objects
### normalize
Normalizes this and all descendant Branches `value` attributes to between
`newmin` and `newmax`. Note that normalize can function as its own inverse
when passed an original range. For example:
#### Parameters
- `newmin` **[Number][113]** The desired minimum value.
- `newmax` **[Number][113]** The desired maximum value.
#### Examples
```javascript
tree.normalize().normalize(1, tree.getDescendants().length + 1);
```
Returns **[Branch][108]** The Branch on which it was called.
### path
Gets the path from this Branch to `target`. If this Branch and `target` are
the same, returns an array containing only the Branch on which it is called.
#### Parameters
- `target` **[Branch][108]** A Branch object
Returns **[Array][109]** An ordered Array of Branches following the path between this
Branch and `target`
### remove
Removes a Branch and its subtree from the tree. Similar to
[Branch.isolate][60], only it returns the root Branch of the tree
from which this Branch is removed.
Returns **[Branch][108]** The root of the remaining tree.
### replace
Removes a Branch and its subtree from the tree, and replaces it.
#### Parameters
- `replacement` **[Branch][108]** The branch to replace the branch on which the
method is called.
Returns **[Branch][108]** The root of the modified tree.
### reroot
Reroots a tree on this Branch. Use with caution, this returns the new root,
which should typically supplant the existing root Branch object, but does
not replace that root automatically.
#### Examples
```javascript
tree = tree.children[0].children[0].reroot();
```
Returns **[Branch][108]** The new root Branch, which is the Branch on which this was
called
### rotate
Reverses the order of the children of the branch on which it is called.
#### Parameters
- `recursive`
Returns **[Branch][108]** The Branch on which this was called.
### setLength
Set the length of a Branch
#### Parameters
- `length` **[number][113]** The new length to assign to the Branch
Returns **[Branch][108]** The Branch object on which this was called
### setParent
Sets the parent of the Branch on which it is called.
#### Parameters
- `parent` **[Branch][108]** The Branch to set as parent
Returns **[Branch][108]** The Branch on which this method was called.
### simplify
Collapses each descendant Branch with exactly one child into a single
continuous branch.
Returns **[Branch][108]** The Branch on which this method was called.
### sort
Sorts the Tree from the branch on which it is called downward.
#### Parameters
- `comparator` **[Function][115]?** A Function taking two Branches and returning
a numberic value. For details, see [MDN Array.sort][124]
Returns **[Branch][108]** The Branch on which it was called
### sources
Determines whether this Branch is likelier to be a source of `cousin`, or
if `cousin` is a source of this Branch.
#### Parameters
- `cousin` **[Branch][108]** The other Branch to test
Returns **[Boolean][118]** True if this might be the source of cousin, otherwise
false.
### sum
Computes the value of each Branch according to some valuator function
#### Parameters
- `value` **[Function][115]** A Function taking a Branch and returning a
(numeric?) value.
Returns **[Branch][108]** The Branch on which it was called.
### targets
Determines whether this Branch is likelier to be a target of `cousin`, or
if `cousin` is a target of this Branch.
#### Parameters
- `cousin` **[Branch][108]** The other Branch to test
Returns **[Boolean][118]** True if this might be the target of cousin, otherwise
false.
### toJSON
toJSON is an alias for [toObject][125], enabling the safe use of
`JSON.stringify` on Branch objects (in spite of their circular references).
Type: [Function][115]
Returns **[Object][107]** A serializable Object
### toMatrix
Computes a matrix of all patristic distances between all leaves which are
descendants of the Branch on which this method is called.
Returns **[Object][107]** An Object containing a matrix (an Array of Arrays) and
Array of `id`s corresponding to the rows (and columns) of the matrix.
### toNewick
Returns the Newick representation of this Branch and its descendants.
#### Parameters
- `nonterminus` **[Boolean][118]** Is this not the terminus of the
Newick Tree? This should be falsy when called by a user (i.e. you). It's
used internally to decide whether or not in include a semicolon in the
returned string. (optional, default `falsy`)
Returns **[String][104]** The [Newick][126]
representation of the Branch.
### toObject
Returns a simple Javascript object version of this Branch and its
descendants. This is useful in cases where you want to serialize the tree
(e.g. `JSON.stringify(tree)`) but can't because the tree contains circular
references (for simplicity, elegance, and performance reasons, each Branch
tracks both its children and its parent).
Returns **[Object][107]** A serializable bare Javascript Object representing this
Branch and its descendants.
### toString
Returns a valid JSON-string version of this Branch and its descendants.
#### Parameters
- `replacer` **[Function][115]** A replacer function to [pass to `JSON.stringify`][127].
- `width`
- `space` **([Number][113] \| [String][104])** A string or number of spaces to use for
indenting the output. See [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Parameters][127]
for additional details.
Returns **[Object][107]** A valid JSON string representing this Branch and its
descendants.
## parseJSON
Parses a hierarchical JSON string (or Object) as a Branch object.
### Parameters
- `json` **([String][104] \| [Object][107])** A json string (or Javascript Object)
representing hierarchical data.
- `idLabel` **[String][104]** The key used in the objects of `json` to
indicate their identifiers. (optional, default `"id"`)
- `lengthLabel` **[String][104]** The key used in the objects of `json`
to indicate their length. (optional, default `'length'`)
- `childrenLabel` **[String][104]** The key used in the objects of
`json` to indicate their children. (optional, default `` `children` ``)
Returns **[Branch][108]** The Branch representing the root of the hierarchy
represented by `json`.
## parseMatrix
Parses a matrix of distances and returns the root Branch of the output tree.
This is adapted from Maciej Korzepa's [neighbor-joining][128],
which is released for modification under the [MIT License][129].
### Parameters
- `matrix` **[Array][109]** An array of `n` arrays of length `n`
- `labels` **[Array][109]** An array of `n` strings, each corresponding to the
values in `matrix`.
Returns **[Branch][108]** A Branch object representing the root Branch of the tree
inferred by neighbor joining on `matrix`.
## parseNewick
Parses a Newick String and returns a Branch object representing the root
of the output Tree.
This is adapted Jason Davies' [newick.js][130],
which is released for modification under [the MIT License][129].
### Parameters
- `newick` **[string][104]** A Newick String
Returns **[Branch][108]** A Branch representing the root of the output tree
[1]: #version
[2]: #examples
[3]: #branch
[4]: #parameters
[5]: #addchild
[6]: #parameters-1
[7]: #addparent
[8]: #parameters-2
[9]: #ancestors
[10]: #clone
[11]: #consolidate
[12]: #copy
[13]: #count
[14]: #descendants
[15]: #depthof
[16]: #parameters-3
[17]: #distancebetween
[18]: #parameters-4
[19]: #distanceto
[20]: #parameters-5
[21]: #each
[22]: #parameters-6
[23]: #eachafter
[24]: #parameters-7
[25]: #eachbefore
[26]: #parameters-8
[27]: #eachchild
[28]: #parameters-9
[29]: #excise
[30]: #fixdistances
[31]: #fixparenthood
[32]: #parameters-10
[33]: #flip
[34]: #getancestors
[35]: #parameters-11
[36]: #getchild
[37]: #parameters-12
[38]: #getdescendant
[39]: #parameters-13
[40]: #getdescendants
[41]: #parameters-14
[42]: #getleafs
[43]: #getleaves
[44]: #getmrca
[45]: #parameters-15
[46]: #getroot
[47]: #haschild
[48]: #parameters-16
[49]: #hasdescendant
[50]: #parameters-17
[51]: #hasleaf
[52]: #parameters-18
[53]: #invert
[54]: #ischildof
[55]: #parameters-19
[56]: #isconsistent
[57]: #isdescendantof
[58]: #parameters-20
[59]: #isleaf
[60]: #isolate
[61]: #isroot
[62]: #leafs
[63]: #leaves
[64]: #links
[65]: #normalize
[66]: #parameters-21
[67]: #examples-1
[68]: #path
[69]: #parameters-22
[70]: #remove
[71]: #replace
[72]: #parameters-23
[73]: #reroot
[74]: #examples-2
[75]: #rotate
[76]: #parameters-24
[77]: #setlength
[78]: #parameters-25
[79]: #setparent
[80]: #parameters-26
[81]: #simplify
[82]: #sort
[83]: #parameters-27
[84]: #sources
[85]: #parameters-28
[86]: #sum
[87]: #parameters-29
[88]: #targets
[89]: #parameters-30
[90]: #tojson
[91]: #tomatrix
[92]: #tonewick
[93]: #parameters-31
[94]: #toobject
[95]: #tostring
[96]: #parameters-32
[97]: #parsejson
[98]: #parameters-33
[99]: #parsematrix
[100]: #parameters-34
[101]: #parsenewick
[102]: #parameters-35
[103]: https://semver.org/
[104]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
[105]: #parseNewick
[106]: #parseMatrix
[107]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
[108]: #branch
[109]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array
[110]: https://github.com/d3/d3-hierarchy#node_ancestors
[111]: https://github.com/d3/d3-hierarchy#node_copy
[112]: https://github.com/d3/d3-hierarchy#node_descendants
[113]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
[114]: https://en.wikipedia.org/wiki/Breadth-first_search
[115]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function
[116]: https://en.wikipedia.org/wiki/Tree_traversal#Post-order
[117]: https://en.wikipedia.org/wiki/Tree_traversal#Pre-order
[118]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean
[119]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined
[120]: #getLeaves
[121]: #getLeafs
[122]: https://github.com/d3/d3-hierarchy#node_leaves
[123]: https://github.com/d3/d3-hierarchy#node_links
[124]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Description
[125]: #toObject
[126]: https://en.wikipedia.org/wiki/Newick_format
[127]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Parameters
[128]: https://github.com/biosustain/neighbor-joining
[129]: https://opensource.org/licenses/MIT
[130]: https://github.com/jasondavies/newick.js/blob/master/src/newick.js