+ final public static void deleteNonOrthologousExternalNodes( final Phylogeny phy,
+ final PhylogenyNode n) {
+ if ( n.isInternal() ) {
+ throw new IllegalArgumentException( "node is not external" );
+ }
+
+ final ArrayList<PhylogenyNode> to_delete = new ArrayList<PhylogenyNode>();
+ for ( PhylogenyNodeIterator it = phy.iteratorExternalForward(); it.hasNext(); ) {
+ final PhylogenyNode i = it.next();
+ if ( !PhylogenyMethods.getEventAtLCA( n, i ).isSpeciation() ) {
+ to_delete.add( i );
+ }
+ }
+ for( PhylogenyNode d : to_delete ) {
+ phy.deleteSubtree( d, true );
+ }
+ phy.clearHashIdToNodeMap();
+ phy.externalNodesHaveChanged();
+
+ }
+
+
+