+ System.out.println( " Options" );
+ System.out.println( " -" + GT_FIRST + "=<first> : first gene tree to analyze (0-based index)" );
+ System.out.println( " -" + GT_LAST + "=<last> : last gene tree to analyze (0-based index)" );
+ System.out.println( " -" + REROOTING_OPT
+ + "=<re-rooting>: re-rooting method for gene trees, possible values or 'none', 'midpoint'," );
+ System.out.println( " or 'outgroup' (default: by minizming duplications)" );
+ System.out.println( " -" + OUTGROUP
+ + "=<outgroup> : for rooting by outgroup, name of outgroup (external gene tree node)" );
+ System.out
+ .println( " -" + RETURN_SPECIES_TREE + "=<outfile> : to write the (stripped) species tree to file" );
+ System.out.println( " -" + RETURN_BEST_GENE_TREE
+ + "=<outfile> : to write (one) minimal duplication gene tree to file" );
+ System.out
+ .println( " -"
+ + TRANSFER_TAXONOMY_OPTION
+ + " : to transfer taxonomic data from species tree to returned minimal duplication gene tree\n"
+ + " (if -" + RETURN_BEST_GENE_TREE + " option is used)" );
+ System.out.println( " -" + USE_SDIR
+ + " : to use SDIR instead of GSDIR (faster, but non-binary species trees are" );
+ System.out.println( " disallowed, as are most options)" );
+ System.out.println();
+ System.out.println( " Formats" );
+ System.out
+ .println( " The gene trees, as well as the species tree, ideally are in phyloXML (www.phyloxml.org) format," );
+ System.out
+ .println( " but can also be in New Hamphshire (Newick) or Nexus format as long as species information can be" );
+ System.out
+ .println( " extracted from the gene names (e.g. \"HUMAN\" from \"BCL2_HUMAN\") and matched to a single species" );
+ System.out.println( " in the species tree." );
+ System.out.println();
+ System.out.println( " Examples" );
+ System.out.println( " \"rio gene_trees.nh species.xml outtable.tsv log.txt\"" );
+ System.out.println();
+ System.out.println( " More information: http://code.google.com/p/forester/wiki/RIO" );
+ System.out.println();
+ System.exit( -1 );
+ }
+
+ private static void writeLogFile( final File logfile,
+ final RIO rio,
+ final File species_tree_file,
+ final File gene_trees_file,
+ final File outtable,
+ final String prg_name,
+ final String prg_v,
+ final String prg_date,
+ final String f ) throws IOException {
+ final EasyWriter out = ForesterUtil.createEasyWriter( logfile );
+ out.println( prg_name );
+ out.println( "version : " + prg_v );
+ out.println( "date : " + prg_date );
+ out.println( "based on: " + f );
+ out.println( "----------------------------------" );
+ out.println( "Gene trees : " + gene_trees_file );
+ out.println( "Species tree : " + species_tree_file );
+ out.println( "All vs all orthology table : " + outtable );
+ out.flush();
+ out.println( rio.getLog().toString() );
+ out.close();
+ System.out.println( "Wrote log to \"" + logfile + "\"" );
+ }
+
+ private static void writeTable( final File table_outfile, final int gene_trees_analyzed, final IntMatrix m )
+ throws IOException {
+ final EasyWriter w = ForesterUtil.createEasyWriter( table_outfile );
+ final java.text.DecimalFormat df = new java.text.DecimalFormat( "0.###" );
+ df.setDecimalSeparatorAlwaysShown( false );
+ for( int i = 0; i < m.size(); ++i ) {
+ w.print( "\t" );
+ w.print( m.getLabel( i ) );
+ }
+ w.println();
+ for( int x = 0; x < m.size(); ++x ) {
+ w.print( m.getLabel( x ) );
+ for( int y = 0; y < m.size(); ++y ) {
+ w.print( "\t" );
+ if ( x == y ) {
+ if ( m.get( x, y ) != gene_trees_analyzed ) {
+ ForesterUtil.unexpectedFatalError( "diagonal value is off" );
+ }
+ w.print( "-" );
+ }
+ else {
+ w.print( df.format( ( ( double ) m.get( x, y ) ) / gene_trees_analyzed ) );
+ }
+ }
+ w.println();
+ }
+ w.close();
+ System.out.println( "Wrote table to \"" + table_outfile + "\"" );
+ }
+
+ private static void writeTree( final Phylogeny p, final File f, final String comment ) throws IOException {
+ final PhylogenyWriter writer = new PhylogenyWriter();
+ writer.toPhyloXML( f, p, 0 );
+ System.out.println( comment + " \"" + f + "\"" );