File: reroot.cpp

package info (click to toggle)
iqtree 2.0.7%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 14,620 kB
  • sloc: cpp: 142,571; ansic: 57,789; sh: 275; python: 242; makefile: 95
file content (33 lines) | stat: -rw-r--r-- 965 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <fstream>
#include <iostream>

#include <terraces/advanced.hpp>
#include <terraces/parser.hpp>
#include <terraces/rooting.hpp>
#include <terraces/trees.hpp>

int main(int argc, char** argv) try {
	if (argc != 3) {
		std::cerr << "Usage: " << argv[0] << " <tree-file> <occurrence file>" << std::endl;
		return 1;
	}
	auto data_file = std::ifstream{argv[2]};
	const auto data = terraces::parse_bitmatrix(data_file);

	auto tree_file = std::ifstream{argv[1]};
	auto tree_string = std::string{};
	std::getline(tree_file, tree_string);
	auto tree = terraces::parse_nwk(tree_string, data.indices);
	auto comp_taxon = terraces::find_comprehensive_taxon(data.matrix);

	if (comp_taxon == terraces::none) {
		std::cerr << "Cannot find a comprehensive taxon for the tree\n";
		return 1;
	}

	terraces::reroot_at_taxon_inplace(tree, comp_taxon);

	std::cout << as_newick(tree, data.names);
} catch (std::exception& e) {
	std::cerr << "Error: " << e.what() << "\n";
}