47 currentBlock_ = iterator_->nextBlock();
49 if (!currentBlock_->hasProperty(treePropertyRead_))
50 throw Exception(
"TreeManipulationMafIterator::analyseCurrentBlock_(). No property available for " + treePropertyRead_);
52 TreeTemplate<Node>* tree =
new TreeTemplate<Node>(
dynamic_cast<const Tree&
>(currentBlock_->getProperty(treePropertyRead_)));
53 manipulateTree_(tree);
54 currentBlock_->setProperty(treePropertyWrite_, tree);
55 }
catch (bad_cast& e) {
56 throw Exception(
"TreeManipulationMafIterator::analyseCurrentBlock_(). A property was found for '" + treePropertyRead_ +
"' but does not appear to contain a phylogenetic tree.");
65 vector<Node*> leaves = tree->getLeaves();
67 bool outgroupFound =
false;
68 for (
size_t i = 0; i < leaves.size() && !outgroupFound; ++i) {
70 MafSequence::splitNameIntoSpeciesAndChromosome(leaves[i]->getName(), species, chr);
71 if (species == outgroupSpecies_) {
77 throw Exception(
"NewOutgroupTreeMafIterator::analyseCurrentBlock_(). No ougroup species was found in the attached tree.");
78 tree->newOutGroup(outgroup);
84 vector<Node*> leaves = tree->getLeaves();
85 for (
size_t i = 0; i < leaves.size(); ++i) {
87 MafSequence::splitNameIntoSpeciesAndChromosome(leaves[i]->getName(), species, chr);
88 if (species == species_) {
89 TreeTemplateTools::dropSubtree(*tree, leaves[i]);
MafBlock * analyseCurrentBlock_()
void manipulateTree_(TreeTemplate< Node > *tree)
void manipulateTree_(TreeTemplate< Node > *tree)