+ final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
+ final Phylogeny p0 = factory.create( "(((A,B,C),D),(E,(F,G)))R", new NHXParser() )[ 0 ];
+ //Archaeopteryx.createApplication( p0 );
+ final Set<PhylogenyNode> ex = new HashSet<PhylogenyNode>();
+ ex.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ ex.add( PhylogenyNode.createInstanceFromNhxString( "B" ) );
+ ex.add( PhylogenyNode.createInstanceFromNhxString( "C" ) );
+ ex.add( PhylogenyNode.createInstanceFromNhxString( "D" ) );
+ ex.add( PhylogenyNode.createInstanceFromNhxString( "E" ) );
+ ex.add( PhylogenyNode.createInstanceFromNhxString( "F" ) );
+ ex.add( PhylogenyNode.createInstanceFromNhxString( "G" ) );
+ ex.add( PhylogenyNode.createInstanceFromNhxString( "X" ) );
+ ex.add( PhylogenyNode.createInstanceFromNhxString( "Y" ) );
+ final TreeSplitMatrix s0 = new TreeSplitMatrix( p0, false, ex );
+ // System.out.println( s0.toString() );
+ //
+ Set<PhylogenyNode> query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "B" ) );
+ if ( s0.match( query_nodes ) ) {
+ return false;
+ }
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "B" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "C" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "D" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "E" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "F" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "G" ) );
+ if ( !s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "B" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "C" ) );
+ if ( !s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "D" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "E" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "F" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "G" ) );
+ if ( !s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "B" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "C" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "D" ) );
+ if ( !s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "E" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "F" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "G" ) );
+ if ( !s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "F" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "G" ) );
+ if ( !s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "E" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "D" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "C" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "B" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ if ( !s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "F" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "G" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "E" ) );
+ if ( !s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "F" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "G" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "E" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "D" ) );
+ if ( !s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "F" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ if ( s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "E" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "B" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "C" ) );
+ if ( s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "F" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "G" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "E" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "D" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "C" ) );
+ if ( s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "B" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "D" ) );
+ if ( s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "D" ) );
+ if ( s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "B" ) );
+ if ( s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "C" ) );
+ if ( s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "E" ) );
+ if ( s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "F" ) );
+ if ( s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "G" ) );
+ if ( s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "F" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "G" ) );
+ if ( s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "B" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "D" ) );
+ if ( s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "E" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "D" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ if ( s0.match( query_nodes ) ) {
+ return false;
+ }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "E" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "D" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "A" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "G" ) );
+ if ( s0.match( query_nodes ) ) {
+ return false;
+ }
+ /////////
+ // query_nodes = new HashSet<PhylogenyNode>();
+ // query_nodes.add( new PhylogenyNode( "X" ) );
+ // query_nodes.add( new PhylogenyNode( "Y" ) );
+ // query_nodes.add( new PhylogenyNode( "A" ) );
+ // query_nodes.add( new PhylogenyNode( "B" ) );
+ // query_nodes.add( new PhylogenyNode( "C" ) );
+ // query_nodes.add( new PhylogenyNode( "D" ) );
+ // query_nodes.add( new PhylogenyNode( "E" ) );
+ // query_nodes.add( new PhylogenyNode( "F" ) );
+ // query_nodes.add( new PhylogenyNode( "G" ) );
+ // if ( !s0.match( query_nodes ) ) {
+ // return false;
+ // }
+ // query_nodes = new HashSet<PhylogenyNode>();
+ // query_nodes.add( new PhylogenyNode( "X" ) );
+ // query_nodes.add( new PhylogenyNode( "Y" ) );
+ // query_nodes.add( new PhylogenyNode( "A" ) );
+ // query_nodes.add( new PhylogenyNode( "B" ) );
+ // query_nodes.add( new PhylogenyNode( "C" ) );
+ // if ( !s0.match( query_nodes ) ) {
+ // return false;
+ // }
+ // //
+ // query_nodes = new HashSet<PhylogenyNode>();
+ // query_nodes.add( new PhylogenyNode( "X" ) );
+ // query_nodes.add( new PhylogenyNode( "Y" ) );
+ // query_nodes.add( new PhylogenyNode( "D" ) );
+ // query_nodes.add( new PhylogenyNode( "E" ) );
+ // query_nodes.add( new PhylogenyNode( "F" ) );
+ // query_nodes.add( new PhylogenyNode( "G" ) );
+ // if ( !s0.match( query_nodes ) ) {
+ // return false;
+ // }
+ // //
+ // query_nodes = new HashSet<PhylogenyNode>();
+ // query_nodes.add( new PhylogenyNode( "X" ) );
+ // query_nodes.add( new PhylogenyNode( "Y" ) );
+ // query_nodes.add( new PhylogenyNode( "A" ) );
+ // query_nodes.add( new PhylogenyNode( "B" ) );
+ // query_nodes.add( new PhylogenyNode( "C" ) );
+ // query_nodes.add( new PhylogenyNode( "D" ) );
+ // if ( !s0.match( query_nodes ) ) {
+ // return false;
+ // }
+ // //
+ // query_nodes = new HashSet<PhylogenyNode>();
+ // query_nodes.add( new PhylogenyNode( "X" ) );
+ // query_nodes.add( new PhylogenyNode( "Y" ) );
+ // query_nodes.add( new PhylogenyNode( "E" ) );
+ // query_nodes.add( new PhylogenyNode( "F" ) );
+ // query_nodes.add( new PhylogenyNode( "G" ) );
+ // if ( !s0.match( query_nodes ) ) {
+ // return false;
+ // }
+ // //
+ // query_nodes = new HashSet<PhylogenyNode>();
+ // query_nodes.add( new PhylogenyNode( "X" ) );
+ // query_nodes.add( new PhylogenyNode( "Y" ) );
+ // query_nodes.add( new PhylogenyNode( "F" ) );
+ // query_nodes.add( new PhylogenyNode( "G" ) );
+ // if ( !s0.match( query_nodes ) ) {
+ // return false;
+ // }
+ //
+ query_nodes = new HashSet<PhylogenyNode>();
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "X" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "Y" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "E" ) );
+ query_nodes.add( PhylogenyNode.createInstanceFromNhxString( "G" ) );
+ if ( s0.match( query_nodes ) ) {