+ try {
+ final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
+ if ( species_tree_in_phyloxml ) {
+ species_tree = factory.create( species_tree_file, new PhyloXmlParser() )[ 0 ];
+ }
+ else {
+ final PhylogenyParser p = ParserUtils.createParserDependingOnFileType( species_tree_file, true );
+ if ( REPLACE_UNDERSCORES_IN_NH_SPECIES_TREE && ( p instanceof NHXParser ) ) {
+ ( ( NHXParser ) p ).setReplaceUnderscores( true );
+ }
+ species_tree = factory.create( species_tree_file, p )[ 0 ];
+ final TaxonomyComparisonBase comp_base = GSDI.determineTaxonomyComparisonBase( gene_tree );
+ switch ( comp_base ) {
+ case SCIENTIFIC_NAME:
+ try {
+ PhylogenyMethods
+ .transferNodeNameToField( species_tree,
+ PhylogenyMethods.PhylogenyNodeField.TAXONOMY_SCIENTIFIC_NAME,
+ true );
+ }
+ catch ( final PhyloXmlDataFormatException e ) {
+ ForesterUtil.fatalError( gsdi.PRG_NAME,
+ "Failed to transfer general node name to scientific name, in ["
+ + species_tree_file + "]: " + e.getMessage() );
+ }
+ break;
+ case CODE:
+ try {
+ PhylogenyMethods
+ .transferNodeNameToField( species_tree,
+ PhylogenyMethods.PhylogenyNodeField.TAXONOMY_CODE,
+ true );
+ }
+ catch ( final PhyloXmlDataFormatException e ) {
+ ForesterUtil.fatalError( gsdi.PRG_NAME,
+ "Failed to transfer general node name to taxonomy code, in ["
+ + species_tree_file + "]: " + e.getMessage() );
+ }
+ break;
+ case ID:
+ try {
+ PhylogenyMethods.transferNodeNameToField( species_tree,
+ PhylogenyMethods.PhylogenyNodeField.TAXONOMY_ID,
+ true );
+ }
+ catch ( final PhyloXmlDataFormatException e ) {
+ ForesterUtil.fatalError( gsdi.PRG_NAME,
+ "Failed to transfer general node name to taxonomy id, in ["
+ + species_tree_file + "]: " + e.getMessage() );
+ }
+ break;
+ default:
+ ForesterUtil.fatalError( gsdi.PRG_NAME, "unable to determine comparison base" );
+ }
+ }
+ }
+ catch ( final IOException e ) {
+ ForesterUtil.fatalError( gsdi.PRG_NAME, "Failed to read species tree from [" + species_tree_file + "]: "
+ + e.getMessage() );
+ }