- final PhylogenyNode newnode = source.copyNodeDataShallow();
- if ( !source.isExternal() ) {
- for( int i = 0; i < source.getNumberOfDescendants(); ++i ) {
- newnode.setChildNode( i, PhylogenyMethods.copySubTreeShallow( source.getChildNode( i ) ) );
- }
- }
- return newnode;
- }
- }
-
- public static void deleteExternalNodesNegativeSelection( final Set<Integer> to_delete, final Phylogeny phy ) {
- phy.clearHashIdToNodeMap();
- for( final Integer id : to_delete ) {
- phy.deleteSubtree( phy.getNode( id ), true );
- }
- phy.clearHashIdToNodeMap();
- phy.externalNodesHaveChanged();
- }
-
- public static void deleteExternalNodesNegativeSelection( final String[] node_names_to_delete, final Phylogeny p )
- throws IllegalArgumentException {
- for( int i = 0; i < node_names_to_delete.length; ++i ) {
- if ( ForesterUtil.isEmpty( node_names_to_delete[ i ] ) ) {
- continue;
- }
- List<PhylogenyNode> nodes = null;
- nodes = p.getNodes( node_names_to_delete[ i ] );
- final Iterator<PhylogenyNode> it = nodes.iterator();
- while ( it.hasNext() ) {
- final PhylogenyNode n = it.next();
- if ( !n.isExternal() ) {
- throw new IllegalArgumentException( "attempt to delete non-external node \""
- + node_names_to_delete[ i ] + "\"" );
- }
- p.deleteSubtree( n, true );
- }
- }
- p.clearHashIdToNodeMap();
- p.externalNodesHaveChanged();
- }
-
- public static void deleteExternalNodesPositiveSelection( final Set<Taxonomy> species_to_keep, final Phylogeny phy ) {
- // final Set<Integer> to_delete = new HashSet<Integer>();
- for( final PhylogenyNodeIterator it = phy.iteratorExternalForward(); it.hasNext(); ) {
- final PhylogenyNode n = it.next();
- if ( n.getNodeData().isHasTaxonomy() ) {
- if ( !species_to_keep.contains( n.getNodeData().getTaxonomy() ) ) {
- //to_delete.add( n.getNodeId() );
- phy.deleteSubtree( n, true );
- }
- }
- else {
- throw new IllegalArgumentException( "node " + n.getId() + " has no taxonomic data" );
- }
- }
- phy.clearHashIdToNodeMap();
- phy.externalNodesHaveChanged();
- }
-
- public static List<String> deleteExternalNodesPositiveSelection( final String[] node_names_to_keep,
- final Phylogeny p ) {
- final PhylogenyNodeIterator it = p.iteratorExternalForward();
- final String[] to_delete = new String[ p.getNumberOfExternalNodes() ];
- int i = 0;
- Arrays.sort( node_names_to_keep );
- while ( it.hasNext() ) {
- final String curent_name = it.next().getName();
- if ( Arrays.binarySearch( node_names_to_keep, curent_name ) < 0 ) {
- to_delete[ i++ ] = curent_name;