+ private final static GSDIR analyzeConsensusTree( final File gene_trees_file,
+ final File species_tree_file,
+ final File outdir,
+ final File best_trees_indir,
+ final SortedMap<String, String> id_map,
+ final String best_trees_suffix )
+ throws IOException, FileNotFoundException, PhyloXmlDataFormatException, SDIException {
+ final File the_one = ForesterUtil.getMatchingFile( best_trees_indir,
+ gene_trees_file.getName(),
+ best_trees_suffix );
+ final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
+ final Phylogeny best_tree = factory.create( the_one, PhyloXmlParser.createPhyloXmlParserXsdValidating() )[ 0 ];
+ final Phylogeny species_tree = SDIutil
+ .parseSpeciesTree( best_tree, species_tree_file, false, true, TAXONOMY_EXTRACTION.NO );
+ PhylogenyMethods.deleteInternalNodesWithOnlyOneDescendent( species_tree );
+ best_tree.setRooted( true );
+ species_tree.setRooted( true );
+ if ( !best_tree.isCompletelyBinaryAllow3ChildrenAtRoot() ) {
+ throw new IOException( "gene tree matching to ["
+ + ForesterUtil.removeFileExtension( gene_trees_file.getName() ) + "] is not completely binary" );
+ }
+ final PhylogenyNodeIterator it = best_tree.iteratorExternalForward();
+ while ( it.hasNext() ) {
+ final PhylogenyNode n = it.next();
+ final String name = n.getName().trim();
+ if ( !ForesterUtil.isEmpty( name ) ) {
+ try {
+ ParserUtils.extractTaxonomyDataFromNodeName( n, TAXONOMY_EXTRACTION.AGGRESSIVE );
+ }
+ catch ( final PhyloXmlDataFormatException e ) {
+ // Ignore.
+ }
+ }
+ }
+ final GSDIR gsdir_for_best_tree = new GSDIR( best_tree, species_tree, true, true, true );
+ final Phylogeny result_gene_tree = gsdir_for_best_tree.getMinDuplicationsSumGeneTree();
+ result_gene_tree.setRerootable( false );
+ PhylogenyMethods.orderAppearance( result_gene_tree.getRoot(), true, true, DESCENDANT_SORT_PRIORITY.NODE_NAME );
+ final String outname = ForesterUtil.removeFileExtension( the_one.getName() );
+ final File outfile = new File( outdir.getCanonicalFile() + "/" + outname + RIOUtil.BEST_TREE_SUFFIX
+ + gsdir_for_best_tree.getMinDuplicationsSum() + ".xml" );
+ writeTree( result_gene_tree, outfile, null, id_map );
+ return gsdir_for_best_tree;
+ }
+