= Introduction = Under development! Documentation, tutorial, and examples for [http://www.phylosoft.org/forester/ forester]. Author: [http://www.cmzmasek.net/ Christian M Zmasek], Sanford-Burnham Medical Research Institute Copyright (C) 2011 Christian M Zmasek. All rights reserved. = Reading and writing of phylogenetic trees = This needs file "forester.jar" to be in the class-path. {{{ package examples; import java.io.File; import java.io.IOException; import org.forester.io.parsers.PhylogenyParser; import org.forester.io.writers.PhylogenyWriter; import org.forester.phylogeny.Phylogeny; import org.forester.util.ForesterUtil; public class Example0 { public static void main( final String[] args ) { // Reading-in of (a) tree(s) from a file. final File treefile = new File( "/path/to/tree.xml" ); PhylogenyParser parser = null; try { parser = ForesterUtil.createParserDependingOnFileType( treefile, true ); } catch ( final IOException e ) { e.printStackTrace(); } Phylogeny[] phys = null; try { phys = ForesterUtil.readPhylogenies( parser, treefile ); } catch ( final IOException e ) { e.printStackTrace(); } // Writing trees to a file. final File outfile = new File( "/path/to/out_tree.xml" ); try { final PhylogenyWriter writer = new PhylogenyWriter(); writer.toPhyloXML( phys, 0, outfile, ForesterUtil.LINE_SEPARATOR ); } catch ( final Exception e ) { e.printStackTrace(); } } } }}} = Reading of phylogenetic trees and displaying them with Archaeopteryx = This needs file "forester.jar" to be in the class-path. {{{ package examples; import java.io.File; import java.io.IOException; import org.forester.archaeopteryx.Archaeopteryx; import org.forester.io.parsers.PhylogenyParser; import org.forester.phylogeny.Phylogeny; import org.forester.util.ForesterUtil; public class Example1 { public static void main( final String[] args ) { // Reading-in of (a) tree(s) from a file. final File treefile = new File( "/path/to/tree.xml" ); PhylogenyParser parser = null; try { parser = ForesterUtil.createParserDependingOnFileType( treefile, true ); } catch ( final IOException e ) { e.printStackTrace(); } Phylogeny[] phys = null; try { phys = ForesterUtil.readPhylogenies( parser, treefile ); } catch ( final IOException e ) { e.printStackTrace(); } // Display of the tree(s) with Archaeopteryx. Archaeopteryx.createApplication( phys ); } } }}} = Creating a new tree and displaying it with Archaeopteryx = This needs file "forester.jar" to be in the class-path. {{{ package examples; import org.forester.archaeopteryx.Archaeopteryx; import org.forester.phylogeny.Phylogeny; import org.forester.phylogeny.PhylogenyNode; public class Example2 { public static void main( final String[] args ) { // Creating a new rooted tree with two external nodes. final Phylogeny phy = new Phylogeny(); final PhylogenyNode root = new PhylogenyNode(); final PhylogenyNode d1 = new PhylogenyNode(); final PhylogenyNode d2 = new PhylogenyNode(); root.setName( "root" ); d1.setName( "descendant 1" ); d2.setName( "descendant 2" ); root.addAsChild( d1 ); root.addAsChild( d2 ); phy.setRoot( root ); phy.setRooted( true ); // Displaying the newly created tree with Archaeopteryx. Archaeopteryx.createApplication( phy ); } } }}} = Using iterators to visit tree nodes in certain orders= This needs file "forester.jar" to be in the class-path. {{{ package examples; import org.forester.phylogeny.Phylogeny; import org.forester.phylogeny.PhylogenyNode; import org.forester.phylogeny.iterators.PhylogenyNodeIterator; public class Example3 { public static void main( final String[] args ) { // Creating a new rooted tree with four external nodes. final Phylogeny phy = new Phylogeny(); final PhylogenyNode root = new PhylogenyNode(); final PhylogenyNode d1 = new PhylogenyNode(); final PhylogenyNode d2 = new PhylogenyNode(); final PhylogenyNode d11 = new PhylogenyNode(); final PhylogenyNode d12 = new PhylogenyNode(); root.setName( "root" ); d1.setName( "1" ); d2.setName( "2" ); d11.setName( "1-1" ); d12.setName( "1-2" ); root.addAsChild( d1 ); root.addAsChild( d2 ); d2.addAsChild( d11 ); d2.addAsChild( d12 ); phy.setRoot( root ); phy.setRooted( true ); // Using a variety of iterators to visit the nodes of the newly created tree. System.out.println( "post-order:" ); for( final PhylogenyNodeIterator it = phy.iteratorPostorder(); it.hasNext(); ) { System.out.println( it.next().getName() ); } System.out.println( "pre-order:" ); for( final PhylogenyNodeIterator it = phy.iteratorPreorder(); it.hasNext(); ) { System.out.println( it.next().getName() ); } System.out.println( "level-order:" ); for( final PhylogenyNodeIterator it = phy.iteratorLevelOrder(); it.hasNext(); ) { System.out.println( it.next().getName() ); } System.out.println( "external nodes only:" ); for( final PhylogenyNodeIterator it = phy.iteratorExternalForward(); it.hasNext(); ) { System.out.println( it.next().getName() ); } } } }}}