+ 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 tableOutput( final File table_outfile, final RIO rio ) throws IOException, RIOException {
+ final IntMatrix m = RIO.calculateOrthologTable( rio.getAnalyzedGeneTrees(), true );
+ writeTable( table_outfile, rio, m );
+ }
+
+ 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();
+ ForesterUtil.programMessage( PRG_NAME, "wrote log to \"" + logfile + "\"" );
+ }
+
+ private static void writeTable( final File table_outfile, final RIO rio, 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 ) != rio.getAnalyzedGeneTrees().length ) {
+ ForesterUtil.unexpectedFatalError( PRG_NAME, "diagonal value is off" );
+ }
+ w.print( "-" );
+ }
+ else {
+ w.print( df.format( ( ( double ) m.get( x, y ) ) / rio.getAnalyzedGeneTrees().length ) );
+ }
+ }
+ w.println();
+ }
+ w.close();
+ ForesterUtil.programMessage( PRG_NAME, "wrote table to \"" + table_outfile + "\"" );