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
JavaScript
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;
;