iham-parsers
Version:
orthoxml, phyloxml and newick parsers for the iHam widget
44 lines (40 loc) • 2.11 kB
JavaScript
const hogvis = require("../index.js");
const chai = require('chai'), expect = chai.expect;
const fs = require('fs');
const parse_orthoxml = hogvis.parse_orthoxml, tree_utils = hogvis.tree_tool;
const get_hogs_at_level_from_per_species = function (per_species, lev) {
var hogs = undefined;
Object.keys(per_species).forEach(function (species) {
if (per_species[species][lev] !== undefined) {
if (!hogs) hogs = Array.from({length: per_species[species][lev].length}, () => []);
for (let i = 0; i < per_species[species][lev].length; i++) {
hogs[i].push.apply(hogs[i], per_species[species][lev][i]);
}
}
});
for (let i=0; i<hogs.length; i++){ hogs[i].sort();}
hogs.sort((x, y) => {
let diff = x.length - y.length;
if (diff !== 0) return diff;
return Math.min(x) - Math.min(y);
});
return hogs;
};
describe('consistencey of per_species if loaded via augmented or spec conform orthoxml', () => {
it('family p53 Aug 2020 release', () => {
var sptree = fs.readFileSync(__dirname + "/augmented_vs_specconform/speciestree.phyloxml").toString();
var spec_xml = fs.readFileSync(__dirname + '/augmented_vs_specconform/spec_p53.orthoxml');
var spec_data = parse_orthoxml(sptree, spec_xml);
var augm_xml = fs.readFileSync(__dirname + '/augmented_vs_specconform/augmented_p53.orthoxml');
var augm_data = parse_orthoxml(sptree, augm_xml, {augmented: true});
expect(spec_data.tree).to.eql(augm_data.tree);
var levels = Object.keys(tree_utils.extractParentRelations(spec_data.tree));
levels.forEach(function(lev){
let spec_ = get_hogs_at_level_from_per_species(spec_data.per_species, lev);
let augm_ = get_hogs_at_level_from_per_species(augm_data.per_species, lev);
expect(spec_).to.eql(augm_);
console.log("maches for "+lev+": len["+ spec_.map(x=>x.length)+"] vs len["+ augm_.map(x=>x.length)+"]");
});
//expect(spec_data.per_species).to.eql(augm_data.per_species);
})
});