@Override /** * Not a deep copy. * */ public PhylogenyData copy() { validate(); return new BinaryCharacters( getPresentCharacters(), getGainedCharacters(), getLostCharacters(), getType(), getPresentCount(), getGainedCount(), getLostCount() ); }
@Override public StringBuffer asSimpleText() { return asText(); }
@Override public StringBuffer asText() { validate(); final StringBuffer sb = new StringBuffer(); sb.append( "present [" ); sb.append( getPresentCount() ); sb.append( "]: " ); sb.append( getPresentCharactersAsStringBuffer() ); sb.append( ForesterUtil.LINE_SEPARATOR ); sb.append( "gained [ " ); sb.append( getGainedCount() ); sb.append( "]: " ); sb.append( getGainedCharactersAsStringBuffer() ); sb.append( ForesterUtil.LINE_SEPARATOR ); sb.append( "lost [" ); sb.append( getLostCount() ); sb.append( "]: " ); sb.append( getLostCharactersAsStringBuffer() ); return sb; }
public String[] getGainedCharactersAsStringArray() { return sortedSetToStringArray( getGainedCharacters() ); }
public StringBuffer getLostCharactersAsStringBuffer() { return sortedSetToStringBuffer( getLostCharacters(), " " ); }
@Override public void toPhyloXML( final Writer writer, final int level, final String indentation ) throws IOException { validate(); writer.write( ForesterUtil.LINE_SEPARATOR ); writer.write( indentation ); PhyloXmlMapping.BINARY_CHARACTERS, PhyloXmlMapping.BINARY_CHARACTERS_TYPE_ATTR, getType(), PhyloXmlMapping.BINARY_CHARACTERS_GAINED_COUNT_ATTR, getGainedCount() != COUNT_DEFAULT ? String.valueOf( getGainedCount() ) : "", PhyloXmlMapping.BINARY_CHARACTERS_LOST_COUNT_ATTR, getLostCount() != COUNT_DEFAULT ? String.valueOf( getLostCount() ) : "", PhyloXmlMapping.BINARY_CHARACTERS_PRESENT_COUNT_ATTR, getPresentCount() != COUNT_DEFAULT ? String.valueOf( getPresentCount() ) : "" ); final String my_ind = indentation + PhylogenyWriter.PHYLO_XML_INTENDATION_BASE; if ( getGainedCharacters().size() > 0 ) { writer.write( ForesterUtil.LINE_SEPARATOR ); writer.write( my_ind ); PhylogenyDataUtil.appendOpen( writer, PhyloXmlMapping.BINARY_CHARACTERS_GAINED ); addCharacters( my_ind, writer, getGainedCharactersAsStringArray() ); writer.write( ForesterUtil.LINE_SEPARATOR ); writer.write( my_ind ); PhylogenyDataUtil.appendClose( writer, PhyloXmlMapping.BINARY_CHARACTERS_GAINED ); if ( getLostCharacters().size() > 0 ) { writer.write( ForesterUtil.LINE_SEPARATOR ); writer.write( my_ind ); PhylogenyDataUtil.appendOpen( writer, PhyloXmlMapping.BINARY_CHARACTERS_LOST ); addCharacters( my_ind, writer, getLostCharactersAsStringArray() );
if ( t3_rt.getNode( "node bb" ).getNodeData().getBinaryCharacters().getGainedCharacters().size() != 3 ) { return false; if ( t3_rt.getNode( "node bb" ).getNodeData().getBinaryCharacters().getPresentCharacters().size() != 2 ) { return false; if ( t3_rt.getNode( "node bb" ).getNodeData().getBinaryCharacters().getLostCharacters().size() != 1 ) { return false; if ( !t3_rt.getNode( "node bb" ).getNodeData().getBinaryCharacters().getType().equals( "domains" ) ) { return false; if ( ( ( BinaryCharacters ) t3_rt.getNode( "node bb" ).getNodeData().getBinaryCharacters().copy() ) .getLostCount() != BinaryCharacters.COUNT_DEFAULT ) { return false; if ( t3_rt.getNode( "node b" ).getNodeData().getBinaryCharacters().getGainedCount() != 1 ) { return false; if ( t3_rt.getNode( "node b" ).getNodeData().getBinaryCharacters().getGainedCharacters().size() != 1 ) { return false; if ( t3_rt.getNode( "node b" ).getNodeData().getBinaryCharacters().getLostCount() != 3 ) { return false; if ( t3_rt.getNode( "node b" ).getNodeData().getBinaryCharacters().getLostCharacters().size() != 3 ) { return false; if ( t3_rt.getNode( "node b" ).getNodeData().getBinaryCharacters().getPresentCount() != 2 ) {
private void validate() { if ( ( getPresentCount() != COUNT_DEFAULT ) && ( getPresentCharacters().size() > 0 ) && ( getPresentCount() != getPresentCharacters().size() ) ) { throw new RuntimeException( "present characters size and count are unequal" ); } if ( ( getGainedCount() != COUNT_DEFAULT ) && ( getGainedCharacters().size() > 0 ) && ( getGainedCount() != getGainedCharacters().size() ) ) { throw new RuntimeException( "gained characters size and count are unequal" ); } if ( ( getLostCount() != COUNT_DEFAULT ) && ( getLostCharacters().size() > 0 ) && ( getLostCount() != getLostCharacters().size() ) ) { throw new RuntimeException( "lost characters size and count are unequal" ); } }
private static SortedSet<String> getAllExternalPresentAndGainedCharacters( final PhylogenyNode node ) { final SortedSet<String> chars = new TreeSet<String>(); final List<PhylogenyNode> descs = node.getAllExternalDescendants(); for( final PhylogenyNode desc : descs ) { chars.addAll( desc.getNodeData().getBinaryCharacters().getGainedCharacters() ); chars.addAll( desc.getNodeData().getBinaryCharacters().getPresentCharacters() ); } return chars; } }
public void addLostCharacter( final String binary_character ) { if ( getPresentCharacters().contains( binary_character ) ) { throw new IllegalArgumentException( "attempt to add binary character [" + binary_character + "] to lost characters but is already listed as present" ); } if ( getGainedCharacters().contains( binary_character ) ) { throw new IllegalArgumentException( "attempt to add binary character [" + binary_character + "] to lost characters but is already listed as gained" ); } getLostCharacters().add( binary_character ); }
public void addGainedCharacter( final String binary_character ) { if ( getLostCharacters().contains( binary_character ) ) { throw new IllegalArgumentException( "attempt to add binary character [" + binary_character + "] to gained characters but is already listed as lost" ); } getGainedCharacters().add( binary_character ); }
public String[] getLostCharactersAsStringArray() { return sortedSetToStringArray( getLostCharacters() ); }
public StringBuffer getGainedCharactersAsStringBuffer() { return sortedSetToStringBuffer( getGainedCharacters(), " " ); }
public void addPresentCharacter( final String binary_character ) { if ( getLostCharacters().contains( binary_character ) ) { throw new IllegalArgumentException( "attempt to add binary character [" + binary_character + "] to present characters but is already listed as lost" ); } getPresentCharacters().add( binary_character ); }
public static void main( final String args[] ) { if ( args.length != 2 ) { System.err.println(); System.err.println( "shared_chars_in_ext_nodes: wrong number of arguments" ); System.err.println( "Usage: \"shared_chars_in_ext_nodes <intree> <node name>" ); System.err.println(); System.exit( -1 ); } final File infile = new File( args[ 0 ] ); final String node_name = args[ 1 ]; Phylogeny phy = null; try { final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance(); phy = factory.create( infile, org.forester.io.parsers.util.ParserUtils .createParserDependingOnFileType( infile, true ) )[ 0 ]; } catch ( final Exception e ) { System.err.println( e + "\nCould not read " + infile + "\n" ); System.exit( -1 ); } final SortedSet<String> a = phy.getNode( node_name ).getNodeData().getBinaryCharacters().getGainedCharacters(); for( final PhylogenyNodeIterator it = phy.iteratorExternalForward(); it.hasNext(); ) { final PhylogenyNode n = it.next(); final SortedSet<String> b = n.getNodeData().getBinaryCharacters().getGainedCharacters(); final SortedSet<String> a_copy = copy( a ); a_copy.retainAll( b ); final double ratio = ( double ) a_copy.size() / b.size(); System.out.println( n.getName() + "\t\"" + a_copy.size() + "/" + b.size() + "\"\t" + ratio ); } }
bc = new BinaryCharacters( present, gained, lost, type, present_count, gained_count, lost_count ); bc = new BinaryCharacters( present, gained, lost, type );
for( final PhylogenyNodeIterator it = p.iteratorPostorder(); it.hasNext(); ) { final PhylogenyNode n = it.next(); if ( n.getNodeData().getBinaryCharacters().getLostCharacters().contains( c ) ) { if ( n.getNodeData().isHasTaxonomy() && !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getScientificName() ) ) {
new_data.setBinaryCharacters( ( BinaryCharacters ) getBinaryCharacters().copy() );
private static SortedSet<String> getAllExternalPresentAndGainedCharacters( final PhylogenyNode node ) { final SortedSet<String> chars = new TreeSet<String>(); final List<PhylogenyNode> descs = node.getAllExternalDescendants(); for( final PhylogenyNode desc : descs ) { chars.addAll( desc.getNodeData().getBinaryCharacters().getGainedCharacters() ); chars.addAll( desc.getNodeData().getBinaryCharacters().getPresentCharacters() ); } return chars; } }