UNPKG

alignment.js

Version:

A suite of reusable [React](http://reactjs.org/) components for creating a variety of visualizations involving [multiple sequence alignments](https://en.wikipedia.org/wiki/Multiple_sequence_alignment). [View the live demo here](http://alignment.hyphy.org/

61 lines (49 loc) 1.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _d = require("d3"); function sortFASTAAndNewick(sequence_data, tree, strict) { var i = 0; tree.traverse_and_compute(function (n) { var d = 1; if (!n.name) { n.name = "Node" + i++; } if (n.children && n.children.length) { d += (0, _d.max)(n.children, function (d) { return d["count_depth"]; }); } n["count_depth"] = d; }); tree.resortChildren(function (a, b) { return a["count_depth"] - b["count_depth"]; }); var ordered_leaf_names = tree.getTips().map(function (d) { return d.data.name; }); sequence_data.sort(function (a, b) { var a_index = ordered_leaf_names.indexOf(a.header), b_index = ordered_leaf_names.indexOf(b.header); return a_index - b_index; }); if (strict) { var number_of_leaves = ordered_leaf_names.length, lengths_agree = number_of_leaves == sequence_data.length; if (!lengths_agree) { throw "Different number of leaves and sequences!"; } sequence_data.forEach(function (record, index) { var leaf = ordered_leaf_names[index], header = record.header; if (leaf != header) { throw "Tree/alignment mismatch at ".concat(i, ": ").concat(leaf, "/").concat(header, "."); } }); } return tree; } var _default = sortFASTAAndNewick; exports["default"] = _default;