public GSDIR( final Phylogeny gene_tree,\r
final Phylogeny species_tree,\r
final boolean strip_gene_tree,\r
- final boolean strip_species_tree ) throws SDIException {\r
+ final boolean strip_species_tree,\r
+ final boolean transfer_taxonomy ) throws SDIException {\r
final NodesLinkingResult nodes_linking_result = GSDI.linkNodesOfG( gene_tree,\r
species_tree,\r
strip_gene_tree,\r
for( final PhylogenyBranch branch : gene_tree_branches_post_order ) {\r
reRoot( branch, gene_tree );\r
PhylogenyMethods.preOrderReId( species_tree );\r
- \r
final GSDIsummaryResult gsdi_result = GSDI.geneTreePostOrderTraversal( gene_tree,\r
true,\r
min_duplications_sum );\r
min_duplications_sum = gsdi_result.getDuplicationsSum();\r
speciations_sum = gsdi_result.getSpeciationsSum();\r
_min_duplications_sum_gene_tree = gene_tree.copy();\r
+ if ( transfer_taxonomy ) {\r
+ transferTaxonomy( _min_duplications_sum_gene_tree );\r
+ }\r
}\r
else if ( gsdi_result.getDuplicationsSum() == min_duplications_sum ) {\r
final List<Phylogeny> l = new ArrayList<Phylogeny>();\r
final int index = getIndexesOfShortestTree( l ).get( 0 );\r
if ( index == 1 ) {\r
_min_duplications_sum_gene_tree = gene_tree.copy();\r
+ if ( transfer_taxonomy ) {\r
+ transferTaxonomy( _min_duplications_sum_gene_tree );\r
+ }\r
}\r
}\r
_duplications_sum_stats.addValue( gsdi_result.getDuplicationsSum() );\r
throw new IllegalArgumentException( "reRoot( Branch b ): b is not a branch." );\r
}\r
}\r
+\r
+ private final static void transferTaxonomy( final Phylogeny gt ) {\r
+ for( final PhylogenyNodeIterator it = gt.iteratorPostorder(); it.hasNext(); ) {\r
+ GSDI.transferTaxonomy( it.next() );\r
+ }\r
+ }\r
}\r