For representing phylogenetic trees; the trees represent the phylogeny of some some kind of sequence feature, protein or nucleotide, or actual organism taxonomy trees.
This module also has the ability to easily create multiple trees, to easily create super trees, to retrieve nodes easily from different levels in a tree without recursion (nested sets), and the ability to associate trees with algorithms (referencing the Chado Companalysis Module).
This module relies heavily on the Sequence module. In particular, all the leaf nodes in a tree correspond to features; these will usually be features of type SO:protein or SO:polypeptide (but other trees are possible - e.g. intron trees). If it is desirable to store multiple alignments for each non-leaf node, then each node can be mapped to a feature of type SO:match. Please refer to the sequence module docs for details on storing multiple alignments.
Each node can have a feature attached; this ‘feature’ is the multiple alignment for non-leaf nodes. It is these features that are annotated rather than annotating the nodes themselves. This has lots of advantages - we can piggyback off of the sequence module and reuse the tables there the leaf nodes may have annotations already attached - for example, GO associations. In fact, it is even possible to annotate ranges along an alignment - this would entail creating a new feature which has a featureloc on the alignment feature.
The nested set tree implementation by way of Joe Celko; see the excellent introduction by Aaron Mackey at http://www.oreillynet.com/pub/a/network/2002/11/27/bioconf.html.
Should there be an additional table, phylonode_relationshipprop? This table would Increase the detail with which one can describe the edges between phylonodes, and these details could include such things as bootstrapping details or divergence times. The current thinking is that such a table should be created but input from the Chado designers would be useful here.
See the page on the related Organism module.
This is the most pervasive element in the phylogeny module, cataloging the “phylonodes” of tree graphs. Edges are implied by the parent_phylonode_id reflexive closure. For all nodes in a nested set implementation the left and right index will be *between* the parents left and right indexes. See http://www.oreillynet.com/pub/a/network/2002/11/27/bioconf.html for details on a method of assigning values to the left and right indices.
FK | Name | Type | Description |
---|---|---|---|
phylonode_id | serial | PRIMARY KEY | |
phylotree_id | integer | UNIQUE#1 UNIQUE#2 NOT NULL | |
parent_phylonode_id | integer | Root phylonode can have null parent_phylonode_id value. |
|
left_idx | integer | UNIQUE#1 NOT NULL | |
right_idx | integer | UNIQUE#2 NOT NULL | |
type_id | integer | Type: e.g. root, interior, leaf. |
|
feature_id | integer | Phylonodes can have optional features attached to them e.g. a protein or nucleotide sequence usually attached to a leaf of the phylotree for non-leaf nodes, the feature may be a feature that is an instance of SO:match; this feature is the alignment of all leaf features beneath it. |
|
label | character varying(255) | ||
distance | double precision |
phylonode Structure
Tables referencing this one via Foreign Key Constraints:
For example, for orthology, paralogy group identifiers; could also be used for NCBI taxonomy; for sequences, refer to phylonode_feature, feature associated dbxrefs.
FK | Name | Type | Description |
---|---|---|---|
phylonode_dbxref_id | serial | PRIMARY KEY | |
phylonode | phylonode_id | integer | UNIQUE#1 NOT NULL |
dbxref | dbxref_id | integer | UNIQUE#1 NOT NULL |
phylonode_dbxref Structure
This linking table should only be used for nodes in taxonomy trees; it provides a mapping between the node and an organism. One node can have zero or one organisms, one organism can have zero or more nodes (although typically it should only have one in the standard NCBI taxonomy tree).
FK | Name | Type | Description |
---|---|---|---|
phylonode_organism_id | serial | PRIMARY KEY | |
phylonode_id | integer | UNIQUE NOT NULL One phylonode cannot refer to >1 organism. |
|
organism_id | integer | NOT NULL |
phylonode_organism Structure
FK | Name | Type | Description |
---|---|---|---|
phylonode_pub_id | serial | PRIMARY KEY | |
phylonode | phylonode_id | integer | UNIQUE#1 NOT NULL |
pub | pub_id | integer | UNIQUE#1 NOT NULL |
phylonode_pub Structure
This is for relationships that are not strictly hierarchical; for example, horizontal gene transfer. Most phylogenetic trees are strictly hierarchical, nevertheless it is here for completeness.
FK | Name | Type | Description |
---|---|---|---|
phylonode_relationship_id | serial | PRIMARY KEY | |
phylonode | subject_id | integer | UNIQUE#1 NOT NULL |
phylonode | object_id | integer | UNIQUE#1 NOT NULL |
cvterm | type_id | integer | UNIQUE#1 NOT NULL |
rank | integer | ||
phylotree | phylotree_id | integer | NOT NULL |
phylonode_relationship Structure
FK | Name | Type | Description |
---|---|---|---|
phylonodeprop_id | serial | PRIMARY KEY | |
phylonode_id | integer | UNIQUE#1 NOT NULL | |
type_id | integer | UNIQUE#1 NOT NULL type_id could designate phylonode hierarchy relationships, for example: species taxonomy (kingdom, order, family, genus, species), "ortholog/paralog", "fold/superfold", etc. |
|
value | text | UNIQUE#1 NOT NULL DEFAULT ''::text | |
rank | integer | UNIQUE#1 NOT NULL |
phylonodeprop Structure
Global anchor for phylogenetic tree.
FK | Name | Type | Description |
---|---|---|---|
phylotree_id | serial | PRIMARY KEY | |
dbxref_id | integer | NOT NULL | |
name | character varying(255) | ||
type_id | integer | Type: protein, nucleotide, taxonomy, for example. The type should be any SO type, or "taxonomy". |
|
analysis_id | integer | ||
comment | text |
phylotree Structure
Tables referencing this one via Foreign Key Constraints:
Tracks citations global to the tree e.g. multiple sequence alignment supporting tree construction.
FK | Name | Type | Description |
---|---|---|---|
phylotree_pub_id | serial | PRIMARY KEY | |
phylotree | phylotree_id | integer | UNIQUE#1 NOT NULL |
pub | pub_id | integer | UNIQUE#1 NOT NULL |
phylotree_pub Structure