gnomic-phylogeny

1.0.5 • Public • Published

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);"

Package Sidebar

Install

npm i gnomic-phylogeny

Weekly Downloads

3

Version

1.0.5

License

ISC

Last publish

Collaborators

  • maciejkorzepa