Skip to content

A Node.js package for making phylogenetic trees from gnomic genotypes

Notifications You must be signed in to change notification settings

biosustain/gnomic-phylogeny

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gnomic-phylogeny

Gnomic-phylogeny is an NPM package for generating distance matrix or phylogenetic trees based on Gnomic - grammar for describing genotypes and phenotypes of microbial strains.

Installation

To install Neighbor-joining package with NPM use: npm install neighbor-joining

Description

Gnomic-phylogeny operates on gnomic Genotype objects. It has two main functions:

  • buildDistanceMatrix(gnomicGenotypes) - generates two dimensional array containing distances between genotypes
  • buildPhylogeneticTree(taxa, gnomicGenotypes, newick=false) - generates a phylogenetic tree as an object or a string in Newick format. First, the function calls buildDistanceMatrix function and then it uses Neighbour-joining NPM library to create a phylogenetic tree. To get more

Currently, features and plasmids are distinguished only by looking at their name property. The following table presents the approach used to calculate the distance between two genotypes.

Genotype 1 Genotype 2 Distance
feature A inserted deleted 2
inserted N/A 1
N/A inserted 1
N/A N/A 0
inserted inserted 0
deleted deleted 0
plasmid B inserted N/A 1
N/A inserted 1
N/A N/A 0
inserted inserted 0

Example

var Genotype = require("gnomic-grammar").Genotype;
var _gnomicPhylogeny = require("gnomic-phylogeny");
var buildDistanceMatrix = _gnomicPhylogeny.buildDistanceMatrix;
var buildPhylogeneticTree = _gnomicPhylogeny.buildDistanceMatrix;
var taxa = [
            { name: "A",
              genotype: "p1{geneA geneB}::cc+ geneC>geneD" },
            { name: "B",
              genotype: "geneC>geneD" },
            { name: "C",
              genotype: "p1{geneA geneF} geneC>geneE" },
            { name: "D",
              genotype: "p2{geneG geneC} +geneG" }
        ];
var gnomicGenotypes = taxa.map(d => d.genotype).map(Genotype.parse);
var D = buildDistanceMatrix(gnomicGenotypes);
var treeObject = buildPhylogeneticTree(taxa, gnomicGenotypes);
var treeNewick = buildPhylogeneticTree(taxa, gnomicGenotypes, true);

As a result, D, treeObject and treeNewick will keep the following information:

D:

[[0, 1, 2, 5],
 [1, 0, 3 ,4],
 [2, 3, 0, 5],
 [5, 4, 5, 0]]

treeObject:

{
    "taxon": null,
    "length": null,
    "children": [{
        "taxon": null,
        "length": 1.75,
        "children": [{
            "taxon": null,
            "length": 0.5,
            "children": [{
                "taxon": {
                    "name": "A",
                    "genotype": "p1{geneA geneB}::cc+ geneC>geneD"
                },
                "length": 0.5,
                "children": []
            }, {
                "taxon": {
                    "name": "B",
                    "genotype": "geneC>geneD"
                },
                "length": 0.5,
                "children": []
            }]
        }, {
            "taxon": {
                "name": "C",
                "genotype": "p1{geneA geneF} geneC>geneE"
            },
            "length": 1.5,
            "children": []
        }]
    }, {
        "taxon": {
            "name": "D",
            "genotype": "p2{geneG geneC} +geneG"
        },
        "length": 1.75,
        "children": []
    }]
}

treeNewick:

"(((A:0.5,B:0.5):0.5,C:1.5):1.75,D:1.75);"

About

A Node.js package for making phylogenetic trees from gnomic genotypes

Resources

Stars

Watchers

Forks

Packages

No packages published