X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Fio%2Fwriters%2FPhylogenyWriter.java;h=6d490c503f3732a5f08d8317022101448aa96569;hb=c956545c704f53df5c8711ede20e786641bfc7be;hp=616ed5c6f13fbb165c7a29f8f0cf27386ca53eba;hpb=c6c5bb81268853e40676be495619a0b4b072ab45;p=jalview.git diff --git a/forester/java/src/org/forester/io/writers/PhylogenyWriter.java b/forester/java/src/org/forester/io/writers/PhylogenyWriter.java index 616ed5c..6d490c5 100644 --- a/forester/java/src/org/forester/io/writers/PhylogenyWriter.java +++ b/forester/java/src/org/forester/io/writers/PhylogenyWriter.java @@ -21,7 +21,7 @@ // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA // // Contact: phylosoft @ gmail . com -// WWW: www.phylosoft.org/forester +// WWW: https://sites.google.com/site/cmzmasek/home/software/forester package org.forester.io.writers; @@ -41,6 +41,7 @@ import org.forester.io.parsers.nexus.NexusConstants; import org.forester.io.parsers.phyloxml.PhyloXmlMapping; import org.forester.phylogeny.Phylogeny; import org.forester.phylogeny.PhylogenyNode; +import org.forester.phylogeny.PhylogenyNode.NH_CONVERSION_SUPPORT_VALUE_STYLE; import org.forester.phylogeny.data.PhylogenyDataUtil; import org.forester.phylogeny.iterators.PhylogenyNodeIterator; import org.forester.phylogeny.iterators.PostOrderStackObject; @@ -71,9 +72,8 @@ public final class PhylogenyWriter { private PhylogenyNode _root; private boolean _has_next; private Stack _stack; - private boolean _simple_nh; private boolean _nh_write_distance_to_parent; - private boolean _write_conf_values_in_branckets_in_nh; + NH_CONVERSION_SUPPORT_VALUE_STYLE _nh_conversion_support_style; private boolean _indent_phyloxml; private int _node_level; private int _phyloxml_level; @@ -81,7 +81,7 @@ public final class PhylogenyWriter { public PhylogenyWriter() { setIndentPhyloxml( INDENT_PHYLOXML_DEAFULT ); - setWriteConfidenceValuesInBracketsInNH( false ); + setNhConversionSupportStyle( NH_CONVERSION_SUPPORT_VALUE_STYLE.NONE ); } private void appendPhylogenyLevelPhyloXml( final Writer writer, final Phylogeny tree ) throws IOException { @@ -201,10 +201,6 @@ public final class PhylogenyWriter { return _saw_comma; } - private boolean isSimpleNH() { - return _simple_nh; - } - private boolean isWriteDistanceToParentInNH() { return _nh_write_distance_to_parent; } @@ -306,10 +302,6 @@ public final class PhylogenyWriter { _saw_comma = saw_comma; } - private void setSimpleNH( final boolean simple_nh ) { - _simple_nh = simple_nh; - } - private void setStack( final Stack stack ) { _stack = stack; } @@ -323,62 +315,53 @@ public final class PhylogenyWriter { } public void toNewHampshire( final List trees, - final boolean simple_nh, final boolean write_distance_to_parent, final File out_file, final String separator ) throws IOException { final Iterator it = trees.iterator(); final StringBuffer sb = new StringBuffer(); while ( it.hasNext() ) { - sb.append( toNewHampshire( it.next(), simple_nh, write_distance_to_parent ) ); + sb.append( toNewHampshire( it.next(), write_distance_to_parent ) ); sb.append( separator ); } writeToFile( sb, out_file ); } public StringBuffer toNewHampshire( final Phylogeny tree, - final boolean simple_nh, final boolean nh_write_distance_to_parent, - final boolean write_conf_values_in_branckets_in_nh ) throws IOException { + final NH_CONVERSION_SUPPORT_VALUE_STYLE svs ) throws IOException { setOutputFormt( FORMAT.NH ); - setWriteConfidenceValuesInBracketsInNH( write_conf_values_in_branckets_in_nh ); - setSimpleNH( simple_nh ); + setNhConversionSupportStyle( svs ); setWriteDistanceToParentInNH( nh_write_distance_to_parent ); return getOutput( tree ); } - public StringBuffer toNewHampshire( final Phylogeny tree, - final boolean simple_nh, - final boolean nh_write_distance_to_parent ) throws IOException { + public StringBuffer toNewHampshire( final Phylogeny tree, final boolean nh_write_distance_to_parent ) + throws IOException { setOutputFormt( FORMAT.NH ); - setSimpleNH( simple_nh ); setWriteDistanceToParentInNH( nh_write_distance_to_parent ); return getOutput( tree ); } - public void toNewHampshire( final Phylogeny tree, - final boolean simple_nh, - final boolean write_distance_to_parent, - final File out_file ) throws IOException { - writeToFile( toNewHampshire( tree, simple_nh, write_distance_to_parent ), out_file ); + public void toNewHampshire( final Phylogeny tree, final boolean write_distance_to_parent, final File out_file ) + throws IOException { + writeToFile( toNewHampshire( tree, write_distance_to_parent ), out_file ); } public void toNewHampshire( final Phylogeny tree, - final boolean simple_nh, final boolean write_distance_to_parent, - final boolean use_brackets_for_confidence, + final NH_CONVERSION_SUPPORT_VALUE_STYLE svs, final File out_file ) throws IOException { - writeToFile( toNewHampshire( tree, simple_nh, write_distance_to_parent, use_brackets_for_confidence ), out_file ); + writeToFile( toNewHampshire( tree, write_distance_to_parent, svs ), out_file ); } public void toNewHampshire( final Phylogeny[] trees, - final boolean simple_nh, final boolean write_distance_to_parent, final File out_file, final String separator ) throws IOException { final StringBuffer sb = new StringBuffer(); for( final Phylogeny element : trees ) { - sb.append( toNewHampshire( element, simple_nh, write_distance_to_parent ) ); + sb.append( toNewHampshire( element, write_distance_to_parent ) ); sb.append( separator ); } writeToFile( sb, out_file ); @@ -414,27 +397,26 @@ public final class PhylogenyWriter { writeToFile( sb, out_file ); } - public void toNexus( final File out_file, final Phylogeny tree, final boolean write_conf_values_in_branckets_in_nh ) + public void toNexus( final File out_file, final Phylogeny tree, final NH_CONVERSION_SUPPORT_VALUE_STYLE svs ) throws IOException { final Writer writer = new BufferedWriter( new PrintWriter( out_file ) ); final List trees = new ArrayList( 1 ); trees.add( tree ); writeNexusStart( writer ); writeNexusTaxaBlock( writer, tree ); - writeNexusTreesBlock( writer, trees, write_conf_values_in_branckets_in_nh ); + writeNexusTreesBlock( writer, trees, svs ); writer.flush(); writer.close(); } - public StringBuffer toNexus( final Phylogeny tree, final boolean write_conf_values_in_branckets_in_nh ) - throws IOException { + public StringBuffer toNexus( final Phylogeny tree, final NH_CONVERSION_SUPPORT_VALUE_STYLE svs ) throws IOException { final StringWriter string_writer = new StringWriter(); final Writer writer = new BufferedWriter( string_writer ); final List trees = new ArrayList( 1 ); trees.add( tree ); writeNexusStart( writer ); writeNexusTaxaBlock( writer, tree ); - writeNexusTreesBlock( writer, trees, write_conf_values_in_branckets_in_nh ); + writeNexusTreesBlock( writer, trees, svs ); writer.flush(); writer.close(); return string_writer.getBuffer(); @@ -482,6 +464,13 @@ public final class PhylogenyWriter { writer.close(); } + public void toPhyloXML( final Phylogeny phy, final int phyloxml_level, final File out_file ) throws IOException { + final Writer writer = new BufferedWriter( new PrintWriter( out_file ) ); + toPhyloXML( writer, phy, phyloxml_level ); + writer.flush(); + writer.close(); + } + public void toPhyloXML( final Writer writer, final List trees, final int phyloxml_level, @@ -552,12 +541,10 @@ public final class PhylogenyWriter { } PhylogenyDataUtil.appendOpen( getWriter(), PhyloXmlMapping.CLADE ); } - if ( indentation != null ) { - PhyloXmlNodeWriter.toPhyloXml( getWriter(), node, getPhyloXmlLevel(), indentation.toString() ); - } - else { - PhyloXmlNodeWriter.toPhyloXml( getWriter(), node, getPhyloXmlLevel(), "" ); - } + PhyloXmlNodeWriter.toPhyloXml( getWriter(), + node, + getPhyloXmlLevel(), + indentation != null ? indentation.toString() : "" ); if ( node.isExternal() ) { getWriter().write( ForesterUtil.LINE_SEPARATOR ); if ( indentation != null ) { @@ -570,18 +557,16 @@ public final class PhylogenyWriter { getBuffer().append( node.toNewHampshireX() ); } else if ( getOutputFormt() == FORMAT.NH ) { - getBuffer().append( node.toNewHampshire( isSimpleNH(), - isWriteDistanceToParentInNH(), - isWriteConfidenceValuesInBracketsInNH() ) ); + getBuffer().append( node.toNewHampshire( isWriteDistanceToParentInNH(), getNhConversionSupportStyle() ) ); } } - private boolean isWriteConfidenceValuesInBracketsInNH() { - return _write_conf_values_in_branckets_in_nh; + private NH_CONVERSION_SUPPORT_VALUE_STYLE getNhConversionSupportStyle() { + return _nh_conversion_support_style; } - private void setWriteConfidenceValuesInBracketsInNH( final boolean write_conf_values_in_branckets_in_nh ) { - _write_conf_values_in_branckets_in_nh = write_conf_values_in_branckets_in_nh; + private void setNhConversionSupportStyle( final NH_CONVERSION_SUPPORT_VALUE_STYLE nh_conversion_support_style ) { + _nh_conversion_support_style = nh_conversion_support_style; } private void writeOpenClade( final PhylogenyNode node ) throws IOException { @@ -594,7 +579,15 @@ public final class PhylogenyWriter { if ( isIndentPhyloxml() ) { getWriter().write( createIndentation().toString() ); } - PhylogenyDataUtil.appendOpen( getWriter(), PhyloXmlMapping.CLADE ); + if ( node.isCollapse() ) { + PhylogenyDataUtil.appendOpen( getWriter(), + PhyloXmlMapping.CLADE, + PhyloXmlMapping.NODE_COLLAPSE, + "true" ); + } + else { + PhylogenyDataUtil.appendOpen( getWriter(), PhyloXmlMapping.CLADE ); + } } else if ( ( getOutputFormt() == FORMAT.NHX ) || ( getOutputFormt() == FORMAT.NH ) ) { getBuffer().append( "(" ); @@ -609,44 +602,24 @@ public final class PhylogenyWriter { } if ( tree != null ) { reset( writer, tree ); - boolean rerootable = true; String unit = ""; String type = ""; - String rooted = "false"; - if ( tree.isRooted() ) { - rooted = "true"; - } - if ( !tree.isRerootable() ) { - rerootable = false; - } if ( !ForesterUtil.isEmpty( tree.getDistanceUnit() ) ) { unit = tree.getDistanceUnit(); } if ( !ForesterUtil.isEmpty( tree.getType() ) ) { type = tree.getType(); } - if ( rerootable ) { - PhylogenyDataUtil.appendOpen( writer, - PhyloXmlMapping.PHYLOGENY, - PhyloXmlMapping.PHYLOGENY_IS_ROOTED_ATTR, - rooted, - PhyloXmlMapping.PHYLOGENY_BRANCHLENGTH_UNIT_ATTR, - unit, - PhyloXmlMapping.PHYLOGENY_TYPE_ATTR, - type ); - } - else { - PhylogenyDataUtil.appendOpen( writer, - PhyloXmlMapping.PHYLOGENY, - PhyloXmlMapping.PHYLOGENY_IS_ROOTED_ATTR, - rooted, - PhyloXmlMapping.PHYLOGENY_BRANCHLENGTH_UNIT_ATTR, - unit, - PhyloXmlMapping.PHYLOGENY_TYPE_ATTR, - type, - PhyloXmlMapping.PHYLOGENY_IS_REROOTABLE_ATTR, - "false" ); - } + PhylogenyDataUtil.appendOpen( writer, + PhyloXmlMapping.PHYLOGENY, + PhyloXmlMapping.PHYLOGENY_IS_ROOTED_ATTR, + tree.isRooted() + "", + PhyloXmlMapping.PHYLOGENY_BRANCHLENGTH_UNIT_ATTR, + unit, + PhyloXmlMapping.PHYLOGENY_TYPE_ATTR, + type, + PhyloXmlMapping.PHYLOGENY_IS_REROOTABLE_ATTR, + tree.isRerootable() + "" ); appendPhylogenyLevelPhyloXml( writer, tree ); while ( isHasNext() ) { next(); @@ -737,7 +710,7 @@ public final class PhylogenyWriter { public static void writeNexusTreesBlock( final Writer writer, final List trees, - final boolean write_conf_values_in_branckets_in_nh ) throws IOException { + final NH_CONVERSION_SUPPORT_VALUE_STYLE svs ) throws IOException { writer.write( NexusConstants.BEGIN_TREES ); writer.write( ForesterUtil.LINE_SEPARATOR ); int i = 1; @@ -761,7 +734,7 @@ public final class PhylogenyWriter { else { writer.write( "[&U]" ); } - writer.write( phylogeny.toNewHampshire( false, write_conf_values_in_branckets_in_nh ) ); + writer.write( phylogeny.toNewHampshire( svs ) ); writer.write( ForesterUtil.LINE_SEPARATOR ); i++; }