+ return s;
+ }
+
+ private final PhylogenyNode tryMapByRemovingOverlySpecificData( final Map<String, PhylogenyNode> species_to_node_map,
+ final String tax_str,
+ final String term ) {
+ final int i = tax_str.indexOf( term );
+ if ( i > 4 ) {
+ final String new_tax_str = tax_str.substring( 0, i ).trim();
+ final PhylogenyNode s = species_to_node_map.get( new_tax_str );
+ if ( s != null ) {
+ addScientificNamesMappedToReducedSpecificity( tax_str, new_tax_str );
+ }
+ return s;
+ }
+ return null;
+ }
+
+ private final void addScientificNamesMappedToReducedSpecificity( final String s1, final String s2 ) {
+ _scientific_names_mapped_to_reduced_specificity.add( s1 + " -> " + s2 );
+ }
+
+ public final SortedSet<String> getReMappedScientificNamesFromGeneTree() {
+ return _scientific_names_mapped_to_reduced_specificity;
+ }
+
+ public TaxonomyComparisonBase getTaxCompBase() {
+ return _tax_comp_base;
+ }
+
+ private void stripSpeciesTree( final List<PhylogenyNode> species_tree_ext_nodes ) {
+ for( final PhylogenyNode s : species_tree_ext_nodes ) {
+ if ( !_mapped_species_tree_nodes.contains( s ) ) {
+ _species_tree.deleteSubtree( s, true );
+ _stripped_species_tree_nodes.add( s );
+ }
+ }
+ _species_tree.clearHashIdToNodeMap();
+ _species_tree.externalNodesHaveChanged();
+ }
+
+ public List<PhylogenyNode> getStrippedSpeciesTreeNodes() {
+ return _stripped_species_tree_nodes;
+ }
+
+ private void stripGeneTree() {
+ for( final PhylogenyNode g : _stripped_gene_tree_nodes ) {
+ _gene_tree.deleteSubtree( g, true );
+ }
+ _gene_tree.clearHashIdToNodeMap();
+ _gene_tree.externalNodesHaveChanged();