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