"rio" work
[jalview.git] / forester / java / src / org / forester / rio / TestRIO.java
1
2 package org.forester.rio;
3
4 import org.forester.datastructures.IntMatrix;
5 import org.forester.io.parsers.nhx.NHXParser;
6 import org.forester.phylogeny.Phylogeny;
7 import org.forester.phylogeny.PhylogenyMethods;
8 import org.forester.phylogeny.PhylogenyMethods.PhylogenyNodeField;
9 import org.forester.phylogeny.factories.ParserBasedPhylogenyFactory;
10 import org.forester.phylogeny.factories.PhylogenyFactory;
11 import org.forester.rio.RIO.REROOTING;
12 import org.forester.sdi.SDIutil.ALGORITHM;
13 import org.forester.sdi.SDIutil.TaxonomyComparisonBase;
14 import org.forester.util.ForesterUtil;
15
16 public final class TestRIO {
17
18     private final static String PATH_TO_TEST_DATA = System.getProperty( "user.dir" ) + ForesterUtil.getFileSeparator()
19                                                           + "test_data" + ForesterUtil.getFileSeparator();
20
21     public static boolean test() {
22         if ( !testRIO_GSDIR() ) {
23             return false;
24         }
25         return true;
26     }
27
28     private static boolean testRIO_GSDIR() {
29         try {
30             final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
31             final NHXParser nhx = new NHXParser();
32             nhx.setReplaceUnderscores( false );
33             nhx.setIgnoreQuotes( true );
34             nhx.setTaxonomyExtraction( NHXParser.TAXONOMY_EXTRACTION.YES );
35             final String gene_trees_1_str = "(((((MOUSE,RAT),HUMAN),CAEEL),YEAST),ARATH);"
36                     + "((((MOUSE,RAT),HUMAN),(ARATH,YEAST)),CAEEL);" + "((MOUSE,RAT),(((ARATH,YEAST),CAEEL),HUMAN));"
37                     + "(((((MOUSE,HUMAN),RAT),CAEEL),YEAST),ARATH);" + "((((HUMAN,MOUSE),RAT),(ARATH,YEAST)),CAEEL);";
38             final Phylogeny[] gene_trees_1 = factory.create( gene_trees_1_str, nhx );
39             final String species_trees_1_str = "(((((MOUSE,RAT),HUMAN),CAEEL),YEAST),ARATH);";
40             final Phylogeny species_tree_1 = factory.create( species_trees_1_str, new NHXParser() )[ 0 ];
41             species_tree_1.setRooted( true );
42             PhylogenyMethods.transferNodeNameToField( species_tree_1, PhylogenyNodeField.TAXONOMY_CODE, true );
43             //Archaeopteryx.createApplication( species_trees_1 );
44             RIO rio = RIO.executeAnalysis( gene_trees_1,
45                                            species_tree_1,
46                                            ALGORITHM.GSDIR,
47                                            REROOTING.BY_ALGORITHM,
48                                            "",
49                                            true,
50                                            false );
51             if ( rio.getAnalyzedGeneTrees().length != 5 ) {
52                 return false;
53             }
54             if ( rio.getExtNodesOfAnalyzedGeneTrees() != 6 ) {
55                 return false;
56             }
57             if ( rio.getGSDIRtaxCompBase() != TaxonomyComparisonBase.CODE ) {
58                 return false;
59             }
60             if ( rio.getRemovedGeneTreeNodes().size() != 0 ) {
61                 return false;
62             }
63             IntMatrix m = RIO.calculateOrthologTable( rio.getAnalyzedGeneTrees(), true );
64             // System.out.println( m.toString() );
65             if ( !m.getRowAsString( 0, ',' ).equals( "ARATH,5,5,5,5,5,5" ) ) {
66                 return false;
67             }
68             if ( !m.getRowAsString( 1, ',' ).equals( "CAEEL,5,5,5,5,5,5" ) ) {
69                 return false;
70             }
71             if ( !m.getRowAsString( 2, ',' ).equals( "HUMAN,5,5,5,5,3,5" ) ) {
72                 return false;
73             }
74             if ( !m.getRowAsString( 3, ',' ).equals( "MOUSE,5,5,5,5,3,5" ) ) {
75                 return false;
76             }
77             if ( !m.getRowAsString( 4, ',' ).equals( "RAT,5,5,3,3,5,5" ) ) {
78                 return false;
79             }
80             if ( !m.getRowAsString( 5, ',' ).equals( "YEAST,5,5,5,5,5,5" ) ) {
81                 return false;
82             }
83             //
84             final Phylogeny[] gene_trees_2 = factory.create( gene_trees_1_str, nhx );
85             final String species_trees_2_str = "((((MOUSE,RAT,HUMAN),CAEEL),YEAST),ARATH);";
86             final Phylogeny species_tree_2 = factory.create( species_trees_2_str, new NHXParser() )[ 0 ];
87             species_tree_2.setRooted( true );
88             PhylogenyMethods.transferNodeNameToField( species_tree_2, PhylogenyNodeField.TAXONOMY_CODE, true );
89             rio = RIO.executeAnalysis( gene_trees_2, species_tree_2 );
90             m = RIO.calculateOrthologTable( rio.getAnalyzedGeneTrees(), true );
91             // System.out.println( m.toString() );
92             if ( !m.getRowAsString( 0, ',' ).equals( "ARATH,5,5,5,5,5,5" ) ) {
93                 return false;
94             }
95             if ( !m.getRowAsString( 1, ',' ).equals( "CAEEL,5,5,5,5,5,5" ) ) {
96                 return false;
97             }
98             if ( !m.getRowAsString( 2, ',' ).equals( "HUMAN,5,5,5,5,5,5" ) ) {
99                 return false;
100             }
101             if ( !m.getRowAsString( 3, ',' ).equals( "MOUSE,5,5,5,5,5,5" ) ) {
102                 return false;
103             }
104             if ( !m.getRowAsString( 4, ',' ).equals( "RAT,5,5,5,5,5,5" ) ) {
105                 return false;
106             }
107             if ( !m.getRowAsString( 5, ',' ).equals( "YEAST,5,5,5,5,5,5" ) ) {
108                 return false;
109             }
110         }
111         catch ( final Exception e ) {
112             e.printStackTrace( System.out );
113             return false;
114         }
115         return true;
116     }
117
118     public static void main( final String[] args ) {
119         if ( !testRIO_GSDIR() ) {
120             System.out.println( "testRIO GSDIR failed" );
121         }
122         else {
123             System.out.println( "OK" );
124         }
125     }
126 }