added AGRESSIVE tax extraction ^^
[jalview.git] / forester / java / src / org / forester / rio / TestRIO.java
1
2 package org.forester.rio;
3
4 import java.io.File;
5
6 import org.forester.datastructures.IntMatrix;
7 import org.forester.io.parsers.nhx.NHXParser;
8 import org.forester.phylogeny.Phylogeny;
9 import org.forester.phylogeny.PhylogenyMethods;
10 import org.forester.phylogeny.PhylogenyMethods.PhylogenyNodeField;
11 import org.forester.phylogeny.factories.ParserBasedPhylogenyFactory;
12 import org.forester.phylogeny.factories.PhylogenyFactory;
13 import org.forester.rio.RIO.REROOTING;
14 import org.forester.sdi.SDIutil.ALGORITHM;
15 import org.forester.sdi.SDIutil.TaxonomyComparisonBase;
16 import org.forester.util.ForesterUtil;
17
18 public final class TestRIO {
19
20     private final static String PATH_TO_TEST_DATA = System.getProperty( "user.dir" ) + ForesterUtil.getFileSeparator()
21                                                           + "test_data" + ForesterUtil.getFileSeparator();
22
23     public static void main( final String[] args ) {
24         if ( !testRIO_GSDIR() ) {
25             System.out.println( "testRIO GSDIR failed" );
26         }
27         if ( !testRIO_GSDIR_Iterating() ) {
28             System.out.println( "testRIO GSDIR iterating failed" );
29         }
30         else {
31             System.out.println( "OK" );
32         }
33     }
34
35     public static boolean test() {
36         if ( !testRIO_GSDIR() ) {
37             return false;
38         }
39         if ( !testRIO_GSDIR_Iterating() ) {
40             return false;
41         }
42         return true;
43     }
44
45     private static boolean testRIO_GSDIR_Iterating() {
46         try {
47             final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
48             final NHXParser nhx = new NHXParser();
49             nhx.setReplaceUnderscores( false );
50             nhx.setIgnoreQuotes( true );
51             nhx.setTaxonomyExtraction( NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
52             final String gene_trees_1_str = "(((((MOUSE,RAT),HUMAN),CAEEL),YEAST),ARATH);"
53                     + "((((MOUSE,RAT),HUMAN),(ARATH,YEAST)),CAEEL);" + "((MOUSE,RAT),(((ARATH,YEAST),CAEEL),HUMAN));"
54                     + "(((((MOUSE,HUMAN),RAT),CAEEL),YEAST),ARATH);" + "((((HUMAN,MOUSE),RAT),(ARATH,YEAST)),CAEEL);";
55             nhx.setSource( gene_trees_1_str );
56             final String species_trees_1_str = "(((((MOUSE,RAT),HUMAN),CAEEL),YEAST),ARATH);";
57             final Phylogeny species_tree_1 = factory.create( species_trees_1_str, new NHXParser() )[ 0 ];
58             species_tree_1.setRooted( true );
59             PhylogenyMethods.transferNodeNameToField( species_tree_1, PhylogenyNodeField.TAXONOMY_CODE, true );
60             //Archaeopteryx.createApplication( species_trees_1 );
61             RIO rio = RIO.executeAnalysis( nhx,
62                                            species_tree_1,
63                                            ALGORITHM.GSDIR,
64                                            REROOTING.BY_ALGORITHM,
65                                            "",
66                                            true,
67                                            false );
68             if ( rio.getExtNodesOfAnalyzedGeneTrees() != 6 ) {
69                 return false;
70             }
71             if ( rio.getGSDIRtaxCompBase() != TaxonomyComparisonBase.CODE ) {
72                 return false;
73             }
74             if ( rio.getRemovedGeneTreeNodes().size() != 0 ) {
75                 return false;
76             }
77             IntMatrix m = rio.getOrthologTable();
78             //System.out.println( m.toString() );
79             if ( !m.getRowAsString( 0, ',' ).equals( "ARATH,5,5,5,5,5,5" ) ) {
80                 return false;
81             }
82             if ( !m.getRowAsString( 1, ',' ).equals( "CAEEL,5,5,5,5,5,5" ) ) {
83                 return false;
84             }
85             if ( !m.getRowAsString( 2, ',' ).equals( "HUMAN,5,5,5,5,3,5" ) ) {
86                 return false;
87             }
88             if ( !m.getRowAsString( 3, ',' ).equals( "MOUSE,5,5,5,5,3,5" ) ) {
89                 return false;
90             }
91             if ( !m.getRowAsString( 4, ',' ).equals( "RAT,5,5,3,3,5,5" ) ) {
92                 return false;
93             }
94             if ( !m.getRowAsString( 5, ',' ).equals( "YEAST,5,5,5,5,5,5" ) ) {
95                 return false;
96             }
97             //
98             final String species_trees_2_str = "((((MOUSE,RAT,HUMAN),CAEEL),YEAST),ARATH);";
99             final Phylogeny species_tree_2 = factory.create( species_trees_2_str, new NHXParser() )[ 0 ];
100             species_tree_2.setRooted( true );
101             PhylogenyMethods.transferNodeNameToField( species_tree_2, PhylogenyNodeField.TAXONOMY_CODE, true );
102             rio = RIO.executeAnalysis( nhx, species_tree_2, ALGORITHM.GSDIR, REROOTING.BY_ALGORITHM, "", true, false );
103             m = rio.getOrthologTable();
104             // System.out.println( m.toString() );
105             if ( !m.getRowAsString( 0, ',' ).equals( "ARATH,5,5,5,5,5,5" ) ) {
106                 return false;
107             }
108             if ( !m.getRowAsString( 1, ',' ).equals( "CAEEL,5,5,5,5,5,5" ) ) {
109                 return false;
110             }
111             if ( !m.getRowAsString( 2, ',' ).equals( "HUMAN,5,5,5,5,5,5" ) ) {
112                 return false;
113             }
114             if ( !m.getRowAsString( 3, ',' ).equals( "MOUSE,5,5,5,5,5,5" ) ) {
115                 return false;
116             }
117             if ( !m.getRowAsString( 4, ',' ).equals( "RAT,5,5,5,5,5,5" ) ) {
118                 return false;
119             }
120             if ( !m.getRowAsString( 5, ',' ).equals( "YEAST,5,5,5,5,5,5" ) ) {
121                 return false;
122             }
123         }
124         catch ( final Exception e ) {
125             e.printStackTrace( System.out );
126             return false;
127         }
128         return true;
129     }
130
131     private static boolean testRIO_GSDIR() {
132         try {
133             final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
134             final NHXParser nhx = new NHXParser();
135             nhx.setReplaceUnderscores( false );
136             nhx.setIgnoreQuotes( true );
137             nhx.setTaxonomyExtraction( NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
138             //
139             final String gene_trees_00_str = "(MOUSE,RAT);(MOUSE,RAT);(MOUSE,RAT);(RAT,MOUSE);";
140             final Phylogeny[] gene_trees_00 = factory.create( gene_trees_00_str, nhx );
141             final String species_trees_00_str = "(MOUSE,RAT);";
142             final Phylogeny species_tree_00 = factory.create( species_trees_00_str, new NHXParser() )[ 0 ];
143             species_tree_00.setRooted( true );
144             PhylogenyMethods.transferNodeNameToField( species_tree_00, PhylogenyNodeField.TAXONOMY_CODE, true );
145             RIO rio = RIO.executeAnalysis( gene_trees_00,
146                                            species_tree_00,
147                                            ALGORITHM.GSDIR,
148                                            REROOTING.BY_ALGORITHM,
149                                            "",
150                                            true,
151                                            false );
152             if ( rio.getAnalyzedGeneTrees().length != 4 ) {
153                 return false;
154             }
155             if ( rio.getExtNodesOfAnalyzedGeneTrees() != 2 ) {
156                 return false;
157             }
158             if ( rio.getGSDIRtaxCompBase() != TaxonomyComparisonBase.CODE ) {
159                 return false;
160             }
161             if ( rio.getRemovedGeneTreeNodes().size() != 0 ) {
162                 return false;
163             }
164             IntMatrix m = RIO.calculateOrthologTable( rio.getAnalyzedGeneTrees(), true );
165             if ( !m.getRowAsString( 0, ',' ).equals( "MOUSE,4,4" ) ) {
166                 System.out.println( m.toString() );
167                 return false;
168             }
169             if ( !m.getRowAsString( 1, ',' ).equals( "RAT,4,4" ) ) {
170                 System.out.println( m.toString() );
171                 return false;
172             }
173             //
174             final String gene_trees_000_str = "(MOUSE1[&&NHX:S=MOUSE],MOUSE2[&&NHX:S=MOUSE]);(MOUSE1[&&NHX:S=MOUSE],MOUSE2[&&NHX:S=MOUSE])";
175             final Phylogeny[] gene_trees_000 = factory.create( gene_trees_000_str, nhx );
176             final String species_trees_000_str = "[&&NHX:S=MOUSE];";
177             final Phylogeny species_tree_000 = factory.create( species_trees_000_str, new NHXParser() )[ 0 ];
178             species_tree_000.setRooted( true );
179             rio = RIO.executeAnalysis( gene_trees_000,
180                                        species_tree_000,
181                                        ALGORITHM.GSDIR,
182                                        REROOTING.BY_ALGORITHM,
183                                        "",
184                                        true,
185                                        false );
186             if ( rio.getAnalyzedGeneTrees().length != 2 ) {
187                 return false;
188             }
189             if ( rio.getExtNodesOfAnalyzedGeneTrees() != 2 ) {
190                 return false;
191             }
192             if ( rio.getGSDIRtaxCompBase() != TaxonomyComparisonBase.SCIENTIFIC_NAME ) {
193                 return false;
194             }
195             if ( rio.getRemovedGeneTreeNodes().size() != 0 ) {
196                 return false;
197             }
198             m = RIO.calculateOrthologTable( rio.getAnalyzedGeneTrees(), true );
199             if ( !m.getRowAsString( 0, ',' ).equals( "MOUSE1,2,0" ) ) {
200                 System.out.println( m.toString() );
201                 return false;
202             }
203             if ( !m.getRowAsString( 1, ',' ).equals( "MOUSE2,0,2" ) ) {
204                 System.out.println( m.toString() );
205                 return false;
206             }
207             //
208             //
209             final String gene_trees_0000_str = "(MOUSE1[&&NHX:S=MOUSE],MOUSE2[&&NHX:S=MOUSE]);(MOUSE1[&&NHX:S=MOUSE],MOUSE2[&&NHX:S=MOUSE]);(MOUSE1[&&NHX:S=MOUSE],MOUSE2[&&NHX:S=MOUSE])";
210             final Phylogeny[] gene_trees_0000 = factory.create( gene_trees_0000_str, nhx );
211             final String species_trees_0000_str = "([&&NHX:S=MOUSE]);";
212             final Phylogeny species_tree_0000 = factory.create( species_trees_0000_str, new NHXParser() )[ 0 ];
213             species_tree_0000.setRooted( true );
214             rio = RIO.executeAnalysis( gene_trees_0000,
215                                        species_tree_0000,
216                                        ALGORITHM.GSDIR,
217                                        REROOTING.BY_ALGORITHM,
218                                        "",
219                                        true,
220                                        false );
221             if ( rio.getAnalyzedGeneTrees().length != 3 ) {
222                 return false;
223             }
224             if ( rio.getExtNodesOfAnalyzedGeneTrees() != 2 ) {
225                 return false;
226             }
227             if ( rio.getGSDIRtaxCompBase() != TaxonomyComparisonBase.SCIENTIFIC_NAME ) {
228                 return false;
229             }
230             if ( rio.getRemovedGeneTreeNodes().size() != 0 ) {
231                 return false;
232             }
233             m = RIO.calculateOrthologTable( rio.getAnalyzedGeneTrees(), true );
234             if ( !m.getRowAsString( 0, ',' ).equals( "MOUSE1,3,0" ) ) {
235                 System.out.println( m.toString() );
236                 return false;
237             }
238             if ( !m.getRowAsString( 1, ',' ).equals( "MOUSE2,0,3" ) ) {
239                 System.out.println( m.toString() );
240                 return false;
241             }
242             //
243             final String gene_trees_x_str = "(MOUSE1[&&NHX:S=MOUSE],MOUSE2[&&NHX:S=MOUSE])";
244             final Phylogeny[] gene_trees_x = factory.create( gene_trees_x_str, nhx );
245             final String species_trees_x_str = "[&&NHX:S=MOUSE];";
246             final Phylogeny species_tree_x = factory.create( species_trees_x_str, new NHXParser() )[ 0 ];
247             species_tree_x.setRooted( true );
248             rio = RIO.executeAnalysis( gene_trees_x,
249                                        species_tree_x,
250                                        ALGORITHM.GSDIR,
251                                        REROOTING.BY_ALGORITHM,
252                                        "",
253                                        true,
254                                        false );
255             if ( rio.getAnalyzedGeneTrees().length != 1 ) {
256                 return false;
257             }
258             if ( rio.getExtNodesOfAnalyzedGeneTrees() != 2 ) {
259                 return false;
260             }
261             if ( rio.getGSDIRtaxCompBase() != TaxonomyComparisonBase.SCIENTIFIC_NAME ) {
262                 return false;
263             }
264             if ( rio.getRemovedGeneTreeNodes().size() != 0 ) {
265                 return false;
266             }
267             m = RIO.calculateOrthologTable( rio.getAnalyzedGeneTrees(), true );
268             if ( !m.getRowAsString( 0, ',' ).equals( "MOUSE1,1,0" ) ) {
269                 System.out.println( m.toString() );
270                 return false;
271             }
272             if ( !m.getRowAsString( 1, ',' ).equals( "MOUSE2,0,1" ) ) {
273                 System.out.println( m.toString() );
274                 return false;
275             }
276             //
277             final String gene_trees_xx_str = "(MOUSE1[&&NHX:S=MOUSE],RAT1[&&NHX:S=RAT])";
278             final Phylogeny[] gene_trees_xx = factory.create( gene_trees_xx_str, nhx );
279             final String species_trees_xx_str = "([&&NHX:S=MOUSE],[&&NHX:S=RAT]);";
280             final Phylogeny species_tree_xx = factory.create( species_trees_xx_str, new NHXParser() )[ 0 ];
281             species_tree_xx.setRooted( true );
282             rio = RIO.executeAnalysis( gene_trees_xx,
283                                        species_tree_xx,
284                                        ALGORITHM.GSDIR,
285                                        REROOTING.BY_ALGORITHM,
286                                        "",
287                                        true,
288                                        false );
289             if ( rio.getAnalyzedGeneTrees().length != 1 ) {
290                 return false;
291             }
292             if ( rio.getExtNodesOfAnalyzedGeneTrees() != 2 ) {
293                 return false;
294             }
295             if ( rio.getGSDIRtaxCompBase() != TaxonomyComparisonBase.SCIENTIFIC_NAME ) {
296                 return false;
297             }
298             if ( rio.getRemovedGeneTreeNodes().size() != 0 ) {
299                 return false;
300             }
301             m = RIO.calculateOrthologTable( rio.getAnalyzedGeneTrees(), true );
302             if ( !m.getRowAsString( 0, ',' ).equals( "MOUSE1,1,1" ) ) {
303                 System.out.println( m.toString() );
304                 return false;
305             }
306             if ( !m.getRowAsString( 1, ',' ).equals( "RAT1,1,1" ) ) {
307                 System.out.println( m.toString() );
308                 return false;
309             }
310             //
311             final String gene_trees_1_str = "(((((MOUSE,RAT),HUMAN),CAEEL),YEAST),ARATH);"
312                     + "((((MOUSE,RAT),HUMAN),(ARATH,YEAST)),CAEEL);" + "((MOUSE,RAT),(((ARATH,YEAST),CAEEL),HUMAN));"
313                     + "(((((MOUSE,HUMAN),RAT),CAEEL),YEAST),ARATH);" + "((((HUMAN,MOUSE),RAT),(ARATH,YEAST)),CAEEL);";
314             final Phylogeny[] gene_trees_1 = factory.create( gene_trees_1_str, nhx );
315             final String species_trees_1_str = "(((((MOUSE,RAT),HUMAN),CAEEL),YEAST),ARATH);";
316             final Phylogeny species_tree_1 = factory.create( species_trees_1_str, new NHXParser() )[ 0 ];
317             species_tree_1.setRooted( true );
318             PhylogenyMethods.transferNodeNameToField( species_tree_1, PhylogenyNodeField.TAXONOMY_CODE, true );
319             rio = RIO.executeAnalysis( gene_trees_1,
320                                        species_tree_1,
321                                        ALGORITHM.GSDIR,
322                                        REROOTING.BY_ALGORITHM,
323                                        "",
324                                        true,
325                                        false );
326             if ( rio.getAnalyzedGeneTrees().length != 5 ) {
327                 return false;
328             }
329             if ( rio.getExtNodesOfAnalyzedGeneTrees() != 6 ) {
330                 return false;
331             }
332             if ( rio.getGSDIRtaxCompBase() != TaxonomyComparisonBase.CODE ) {
333                 return false;
334             }
335             if ( rio.getRemovedGeneTreeNodes().size() != 0 ) {
336                 return false;
337             }
338             m = RIO.calculateOrthologTable( rio.getAnalyzedGeneTrees(), true );
339             // System.out.println( m.toString() );
340             if ( !m.getRowAsString( 0, ',' ).equals( "ARATH,5,5,5,5,5,5" ) ) {
341                 return false;
342             }
343             if ( !m.getRowAsString( 1, ',' ).equals( "CAEEL,5,5,5,5,5,5" ) ) {
344                 return false;
345             }
346             if ( !m.getRowAsString( 2, ',' ).equals( "HUMAN,5,5,5,5,3,5" ) ) {
347                 return false;
348             }
349             if ( !m.getRowAsString( 3, ',' ).equals( "MOUSE,5,5,5,5,3,5" ) ) {
350                 return false;
351             }
352             if ( !m.getRowAsString( 4, ',' ).equals( "RAT,5,5,3,3,5,5" ) ) {
353                 return false;
354             }
355             if ( !m.getRowAsString( 5, ',' ).equals( "YEAST,5,5,5,5,5,5" ) ) {
356                 return false;
357             }
358             //
359             final Phylogeny[] gene_trees_2 = factory.create( gene_trees_1_str, nhx );
360             final String species_trees_2_str = "((((MOUSE,RAT,HUMAN),CAEEL),YEAST),ARATH);";
361             final Phylogeny species_tree_2 = factory.create( species_trees_2_str, new NHXParser() )[ 0 ];
362             species_tree_2.setRooted( true );
363             PhylogenyMethods.transferNodeNameToField( species_tree_2, PhylogenyNodeField.TAXONOMY_CODE, true );
364             rio = RIO.executeAnalysis( gene_trees_2, species_tree_2 );
365             m = RIO.calculateOrthologTable( rio.getAnalyzedGeneTrees(), true );
366             // System.out.println( m.toString() );
367             if ( !m.getRowAsString( 0, ',' ).equals( "ARATH,5,5,5,5,5,5" ) ) {
368                 return false;
369             }
370             if ( !m.getRowAsString( 1, ',' ).equals( "CAEEL,5,5,5,5,5,5" ) ) {
371                 return false;
372             }
373             if ( !m.getRowAsString( 2, ',' ).equals( "HUMAN,5,5,5,5,5,5" ) ) {
374                 return false;
375             }
376             if ( !m.getRowAsString( 3, ',' ).equals( "MOUSE,5,5,5,5,5,5" ) ) {
377                 return false;
378             }
379             if ( !m.getRowAsString( 4, ',' ).equals( "RAT,5,5,5,5,5,5" ) ) {
380                 return false;
381             }
382             if ( !m.getRowAsString( 5, ',' ).equals( "YEAST,5,5,5,5,5,5" ) ) {
383                 return false;
384             }
385             //
386             RIO r0 = RIO.executeAnalysis( new File( PATH_TO_TEST_DATA + "rio_mb_taxcode.run1.t" ),
387                                           new File( PATH_TO_TEST_DATA + "rio_tol_1.xml" ),
388                                           ALGORITHM.GSDIR,
389                                           REROOTING.BY_ALGORITHM,
390                                           "",
391                                           -1,
392                                           -1,
393                                           true,
394                                           false );
395             if ( r0.getGSDIRtaxCompBase() != TaxonomyComparisonBase.CODE ) {
396                 return false;
397             }
398             if ( r0.getAnalyzedGeneTrees().length != 201 ) {
399                 return false;
400             }
401             if ( r0.getExtNodesOfAnalyzedGeneTrees() != 6 ) {
402                 return false;
403             }
404             if ( r0.getIntNodesOfAnalyzedGeneTrees() != 5 ) {
405                 return false;
406             }
407             if ( r0.getRemovedGeneTreeNodes().size() != 0 ) {
408                 return false;
409             }
410             if ( ForesterUtil.roundToInt( r0.getDuplicationsStatistics().median() ) != 1 ) {
411                 return false;
412             }
413             m = RIO.calculateOrthologTable( r0.getAnalyzedGeneTrees(), true );
414             if ( !m.getRowAsString( 0, ',' ).equals( "A7SHU1_NEMVE,201,201,200,200,200,200" ) ) {
415                 System.out.println( m.getRowAsString( 0, ',' ) );
416                 return false;
417             }
418             if ( !m.getRowAsString( 1, ',' ).equals( "BCDO2_HUMAN,201,201,200,200,200,43" ) ) {
419                 System.out.println( m.getRowAsString( 1, ',' ) );
420                 return false;
421             }
422             if ( !m.getRowAsString( 2, ',' ).equals( "BCDO2_MOUSE,200,200,201,201,201,43" ) ) {
423                 System.out.println( m.getRowAsString( 2, ',' ) );
424                 return false;
425             }
426             if ( !m.getRowAsString( 3, ',' ).equals( "H2ZH97_CIOSA,200,200,201,201,201,201" ) ) {
427                 System.out.println( m.getRowAsString( 3, ',' ) );
428                 return false;
429             }
430             if ( !m.getRowAsString( 4, ',' ).equals( "Q1RLW1_DANRE,200,200,201,201,201,43" ) ) {
431                 System.out.println( m.getRowAsString( 4, ',' ) );
432                 return false;
433             }
434             if ( !m.getRowAsString( 5, ',' ).equals( "Q6DIN7_XENTR,200,43,43,201,43,201" ) ) {
435                 System.out.println( m.getRowAsString( 5, ',' ) );
436                 return false;
437             }
438             //
439             r0 = RIO.executeAnalysis( new File( PATH_TO_TEST_DATA + "rio_mb_taxid.run1.t" ),
440                                       new File( PATH_TO_TEST_DATA + "rio_tol_1.xml" ),
441                                       ALGORITHM.GSDIR,
442                                       REROOTING.BY_ALGORITHM,
443                                       "",
444                                       -1,
445                                       -1,
446                                       true,
447                                       false );
448             if ( r0.getGSDIRtaxCompBase() != TaxonomyComparisonBase.ID ) {
449                 return false;
450             }
451             if ( r0.getAnalyzedGeneTrees().length != 201 ) {
452                 return false;
453             }
454             if ( r0.getExtNodesOfAnalyzedGeneTrees() != 6 ) {
455                 return false;
456             }
457             if ( r0.getIntNodesOfAnalyzedGeneTrees() != 5 ) {
458                 return false;
459             }
460             if ( r0.getRemovedGeneTreeNodes().size() != 0 ) {
461                 return false;
462             }
463             if ( ForesterUtil.roundToInt( r0.getDuplicationsStatistics().median() ) != 1 ) {
464                 return false;
465             }
466             m = RIO.calculateOrthologTable( r0.getAnalyzedGeneTrees(), true );
467             if ( !m.getRowAsString( 0, ',' ).equals( "A7SHU1_45351,201,200,201,200,200,200" ) ) {
468                 System.out.println( m.getRowAsString( 0, ',' ) );
469                 return false;
470             }
471             //mouse
472             if ( !m.getRowAsString( 1, ',' ).equals( "BCDO2_10090,200,201,200,201,201,43" ) ) {
473                 System.out.println( m.getRowAsString( 1, ',' ) );
474                 return false;
475             }
476             //human
477             if ( !m.getRowAsString( 2, ',' ).equals( "BCDO2_9606,201,200,201,200,200,43" ) ) {
478                 System.out.println( m.getRowAsString( 2, ',' ) );
479                 return false;
480             }
481             if ( !m.getRowAsString( 3, ',' ).equals( "H2ZH97_51511,200,201,200,201,201,201" ) ) {
482                 System.out.println( m.getRowAsString( 3, ',' ) );
483                 return false;
484             }
485             if ( !m.getRowAsString( 4, ',' ).equals( "Q1RLW1_7955,200,201,200,201,201,43" ) ) {
486                 System.out.println( m.getRowAsString( 4, ',' ) );
487                 return false;
488             }
489             if ( !m.getRowAsString( 5, ',' ).equals( "Q6DIN7_8364,200,43,43,201,43,201" ) ) {
490                 System.out.println( m.getRowAsString( 5, ',' ) );
491                 return false;
492             }
493             r0 = RIO.executeAnalysis( new File( PATH_TO_TEST_DATA + "rio_mb_taxsn.run1.t" ),
494                                       new File( PATH_TO_TEST_DATA + "rio_tol_1.xml" ),
495                                       ALGORITHM.GSDIR,
496                                       REROOTING.BY_ALGORITHM,
497                                       "",
498                                       -1,
499                                       -1,
500                                       true,
501                                       false );
502             if ( r0.getGSDIRtaxCompBase() != TaxonomyComparisonBase.SCIENTIFIC_NAME ) {
503                 return false;
504             }
505             if ( r0.getAnalyzedGeneTrees().length != 201 ) {
506                 return false;
507             }
508             if ( r0.getExtNodesOfAnalyzedGeneTrees() != 6 ) {
509                 return false;
510             }
511             if ( r0.getIntNodesOfAnalyzedGeneTrees() != 5 ) {
512                 return false;
513             }
514             if ( r0.getRemovedGeneTreeNodes().size() != 0 ) {
515                 return false;
516             }
517             if ( ForesterUtil.roundToInt( r0.getDuplicationsStatistics().median() ) != 1 ) {
518                 return false;
519             }
520             m = RIO.calculateOrthologTable( r0.getAnalyzedGeneTrees(), true );
521             if ( !m.getRowAsString( 0, ',' ).equals( "A7SHU1_Nematostella_vectensis,201,201,200,200,200,200" ) ) {
522                 System.out.println( m.getRowAsString( 0, ',' ) );
523                 return false;
524             }
525             if ( !m.getRowAsString( 1, ',' ).equals( "BCDO2_Homo_sapiens,201,201,200,200,200,43" ) ) {
526                 System.out.println( m.getRowAsString( 1, ',' ) );
527                 return false;
528             }
529             if ( !m.getRowAsString( 2, ',' ).equals( "BCDO2_Mus_musculus,200,200,201,201,201,43" ) ) {
530                 System.out.println( m.getRowAsString( 2, ',' ) );
531                 return false;
532             }
533             if ( !m.getRowAsString( 3, ',' ).equals( "H2ZH97_Ciona_savignyi,200,200,201,201,201,201" ) ) {
534                 System.out.println( m.getRowAsString( 3, ',' ) );
535                 return false;
536             }
537             if ( !m.getRowAsString( 4, ',' ).equals( "Q1RLW1_Danio_rerio,200,200,201,201,201,43" ) ) {
538                 System.out.println( m.getRowAsString( 4, ',' ) );
539                 return false;
540             }
541             if ( !m.getRowAsString( 5, ',' ).equals( "Q6DIN7_Xenopus_tropicalis,200,43,43,201,43,201" ) ) {
542                 System.out.println( m.getRowAsString( 5, ',' ) );
543                 return false;
544             }
545             //
546             r0 = RIO.executeAnalysis( new File( PATH_TO_TEST_DATA + "rio_mb_taxsn.run1.t" ),
547                                       new File( PATH_TO_TEST_DATA + "rio_tol_1.xml" ),
548                                       ALGORITHM.GSDIR,
549                                       REROOTING.MIDPOINT,
550                                       "",
551                                       -1,
552                                       -1,
553                                       true,
554                                       false );
555             if ( r0.getGSDIRtaxCompBase() != TaxonomyComparisonBase.SCIENTIFIC_NAME ) {
556                 return false;
557             }
558             if ( r0.getAnalyzedGeneTrees().length != 201 ) {
559                 return false;
560             }
561             if ( r0.getExtNodesOfAnalyzedGeneTrees() != 6 ) {
562                 return false;
563             }
564             if ( r0.getIntNodesOfAnalyzedGeneTrees() != 5 ) {
565                 return false;
566             }
567             if ( r0.getRemovedGeneTreeNodes().size() != 0 ) {
568                 return false;
569             }
570             if ( ForesterUtil.roundToInt( r0.getDuplicationsStatistics().median() ) != 2 ) {
571                 return false;
572             }
573             m = RIO.calculateOrthologTable( r0.getAnalyzedGeneTrees(), true );
574             if ( !m.getRowAsString( 0, ',' ).equals( "A7SHU1_Nematostella_vectensis,201,94,93,160,93,93" ) ) {
575                 System.out.println( m.getRowAsString( 0, ',' ) );
576                 return false;
577             }
578             if ( !m.getRowAsString( 1, ',' ).equals( "BCDO2_Homo_sapiens,94,201,200,53,200,43" ) ) {
579                 System.out.println( m.getRowAsString( 1, ',' ) );
580                 return false;
581             }
582             if ( !m.getRowAsString( 2, ',' ).equals( "BCDO2_Mus_musculus,93,200,201,53,201,43" ) ) {
583                 System.out.println( m.getRowAsString( 2, ',' ) );
584                 return false;
585             }
586             if ( !m.getRowAsString( 3, ',' ).equals( "H2ZH97_Ciona_savignyi,160,53,53,201,53,53" ) ) {
587                 System.out.println( m.getRowAsString( 3, ',' ) );
588                 return false;
589             }
590             if ( !m.getRowAsString( 4, ',' ).equals( "Q1RLW1_Danio_rerio,93,200,201,53,201,43" ) ) {
591                 System.out.println( m.getRowAsString( 4, ',' ) );
592                 return false;
593             }
594             if ( !m.getRowAsString( 5, ',' ).equals( "Q6DIN7_Xenopus_tropicalis,93,43,43,53,43,201" ) ) {
595                 System.out.println( m.getRowAsString( 5, ',' ) );
596                 return false;
597             }
598             //
599             r0 = RIO.executeAnalysis( new File( PATH_TO_TEST_DATA + "rio_mb_taxsn.run1.t" ),
600                                       new File( PATH_TO_TEST_DATA + "rio_tol_1.xml" ),
601                                       ALGORITHM.GSDIR,
602                                       REROOTING.OUTGROUP,
603                                       "H2ZH97_Ciona_savignyi",
604                                       -1,
605                                       -1,
606                                       true,
607                                       false );
608             if ( r0.getGSDIRtaxCompBase() != TaxonomyComparisonBase.SCIENTIFIC_NAME ) {
609                 return false;
610             }
611             if ( r0.getAnalyzedGeneTrees().length != 201 ) {
612                 return false;
613             }
614             if ( r0.getExtNodesOfAnalyzedGeneTrees() != 6 ) {
615                 return false;
616             }
617             if ( r0.getIntNodesOfAnalyzedGeneTrees() != 5 ) {
618                 return false;
619             }
620             if ( r0.getRemovedGeneTreeNodes().size() != 0 ) {
621                 return false;
622             }
623             if ( ForesterUtil.roundToInt( r0.getDuplicationsStatistics().median() ) != 2 ) {
624                 return false;
625             }
626             m = RIO.calculateOrthologTable( r0.getAnalyzedGeneTrees(), true );
627             if ( !m.getRowAsString( 0, ',' ).equals( "A7SHU1_Nematostella_vectensis,201,201,200,0,200,200" ) ) {
628                 System.out.println( m.getRowAsString( 0, ',' ) );
629                 return false;
630             }
631             if ( !m.getRowAsString( 1, ',' ).equals( "BCDO2_Homo_sapiens,201,201,200,0,200,43" ) ) {
632                 System.out.println( m.getRowAsString( 1, ',' ) );
633                 return false;
634             }
635             if ( !m.getRowAsString( 2, ',' ).equals( "BCDO2_Mus_musculus,200,200,201,0,201,43" ) ) {
636                 System.out.println( m.getRowAsString( 2, ',' ) );
637                 return false;
638             }
639             if ( !m.getRowAsString( 3, ',' ).equals( "H2ZH97_Ciona_savignyi,0,0,0,201,0,0" ) ) {
640                 System.out.println( m.getRowAsString( 3, ',' ) );
641                 return false;
642             }
643             if ( !m.getRowAsString( 4, ',' ).equals( "Q1RLW1_Danio_rerio,200,200,201,0,201,43" ) ) {
644                 System.out.println( m.getRowAsString( 4, ',' ) );
645                 return false;
646             }
647             if ( !m.getRowAsString( 5, ',' ).equals( "Q6DIN7_Xenopus_tropicalis,200,43,43,0,43,201" ) ) {
648                 System.out.println( m.getRowAsString( 5, ',' ) );
649                 return false;
650             }
651             //
652             //
653             r0 = RIO.executeAnalysis( new File( PATH_TO_TEST_DATA + "rio_mb_taxsn.run1.t" ),
654                                       new File( PATH_TO_TEST_DATA + "rio_tol_1.xml" ),
655                                       ALGORITHM.GSDIR,
656                                       REROOTING.NONE,
657                                       null,
658                                       10,
659                                       19,
660                                       true,
661                                       false );
662             if ( r0.getGSDIRtaxCompBase() != TaxonomyComparisonBase.SCIENTIFIC_NAME ) {
663                 return false;
664             }
665             if ( r0.getAnalyzedGeneTrees().length != 10 ) {
666                 return false;
667             }
668             if ( r0.getExtNodesOfAnalyzedGeneTrees() != 6 ) {
669                 return false;
670             }
671             if ( r0.getIntNodesOfAnalyzedGeneTrees() != 5 ) {
672                 return false;
673             }
674             if ( r0.getRemovedGeneTreeNodes().size() != 0 ) {
675                 return false;
676             }
677             if ( ForesterUtil.roundToInt( r0.getDuplicationsStatistics().median() ) != 4 ) {
678                 return false;
679             }
680             m = RIO.calculateOrthologTable( r0.getAnalyzedGeneTrees(), true );
681             if ( !m.getRowAsString( 0, ',' ).equals( "A7SHU1_Nematostella_vectensis,10,0,0,10,0,0" ) ) {
682                 System.out.println( m.getRowAsString( 0, ',' ) );
683                 return false;
684             }
685             if ( !m.getRowAsString( 1, ',' ).equals( "BCDO2_Homo_sapiens,0,10,0,0,0,0" ) ) {
686                 System.out.println( m.getRowAsString( 1, ',' ) );
687                 return false;
688             }
689             if ( !m.getRowAsString( 2, ',' ).equals( "BCDO2_Mus_musculus,0,0,10,0,0,0" ) ) {
690                 System.out.println( m.getRowAsString( 2, ',' ) );
691                 return false;
692             }
693             if ( !m.getRowAsString( 3, ',' ).equals( "H2ZH97_Ciona_savignyi,10,0,0,10,0,0" ) ) {
694                 System.out.println( m.getRowAsString( 3, ',' ) );
695                 return false;
696             }
697             if ( !m.getRowAsString( 4, ',' ).equals( "Q1RLW1_Danio_rerio,0,0,0,0,10,0" ) ) {
698                 System.out.println( m.getRowAsString( 4, ',' ) );
699                 return false;
700             }
701             if ( !m.getRowAsString( 5, ',' ).equals( "Q6DIN7_Xenopus_tropicalis,0,0,0,0,0,10" ) ) {
702                 System.out.println( m.getRowAsString( 5, ',' ) );
703                 return false;
704             }
705             //
706             r0 = RIO.executeAnalysis( new File( PATH_TO_TEST_DATA + "rio_mb_taxcode_1.run1.t" ),
707                                       new File( PATH_TO_TEST_DATA + "rio_tol_1.xml" ),
708                                       ALGORITHM.GSDIR,
709                                       REROOTING.BY_ALGORITHM,
710                                       "",
711                                       -1,
712                                       -1,
713                                       true,
714                                       false );
715             if ( r0.getGSDIRtaxCompBase() != TaxonomyComparisonBase.CODE ) {
716                 return false;
717             }
718             if ( r0.getAnalyzedGeneTrees().length != 201 ) {
719                 return false;
720             }
721             if ( r0.getExtNodesOfAnalyzedGeneTrees() != 3 ) {
722                 return false;
723             }
724             if ( r0.getIntNodesOfAnalyzedGeneTrees() != 2 ) {
725                 return false;
726             }
727             if ( r0.getRemovedGeneTreeNodes().size() != 3 ) {
728                 return false;
729             }
730             if ( ForesterUtil.roundToInt( r0.getDuplicationsStatistics().median() ) != 0 ) {
731                 return false;
732             }
733             m = RIO.calculateOrthologTable( r0.getAnalyzedGeneTrees(), true );
734             if ( !m.getRowAsString( 0, ',' ).equals( "BCDO2_HUMAN,201,201,201" ) ) {
735                 System.out.println( m.getRowAsString( 0, ',' ) );
736                 return false;
737             }
738             if ( !m.getRowAsString( 1, ',' ).equals( "Q1RLW1_DANRE,201,201,201" ) ) {
739                 System.out.println( m.getRowAsString( 1, ',' ) );
740                 return false;
741             }
742             if ( !m.getRowAsString( 2, ',' ).equals( "Q6DIN7_XENTR,201,201,201" ) ) {
743                 System.out.println( m.getRowAsString( 2, ',' ) );
744                 return false;
745             }
746             //
747             //
748             r0 = RIO.executeAnalysis( new File( PATH_TO_TEST_DATA + "rio_mb_taxcode_2.run1.t" ),
749                                       new File( PATH_TO_TEST_DATA + "rio_tol_1.xml" ),
750                                       ALGORITHM.GSDIR,
751                                       REROOTING.BY_ALGORITHM,
752                                       "",
753                                       -1,
754                                       -1,
755                                       true,
756                                       false );
757             if ( r0.getGSDIRtaxCompBase() != TaxonomyComparisonBase.CODE ) {
758                 return false;
759             }
760             if ( r0.getAnalyzedGeneTrees().length != 201 ) {
761                 return false;
762             }
763             if ( r0.getExtNodesOfAnalyzedGeneTrees() != 6 ) {
764                 return false;
765             }
766             if ( r0.getIntNodesOfAnalyzedGeneTrees() != 5 ) {
767                 return false;
768             }
769             if ( r0.getRemovedGeneTreeNodes().size() != 0 ) {
770                 return false;
771             }
772             if ( ForesterUtil.roundToInt( r0.getDuplicationsStatistics().median() ) != 1 ) {
773                 return false;
774             }
775             m = RIO.calculateOrthologTable( r0.getAnalyzedGeneTrees(), true );
776             if ( !m.getRowAsString( 0, ',' ).equals( "A7SHU1_NEMVE&1,201,201,200,200,200,200" ) ) {
777                 System.out.println( m.getRowAsString( 0, ',' ) );
778                 return false;
779             }
780             if ( !m.getRowAsString( 1, ',' ).equals( "BCDO2_HUMAN+,201,201,200,200,200,43" ) ) {
781                 System.out.println( m.getRowAsString( 1, ',' ) );
782                 return false;
783             }
784             if ( !m.getRowAsString( 2, ',' ).equals( "BCDO2_MOUSE,200,200,201,201,201,43" ) ) {
785                 System.out.println( m.getRowAsString( 2, ',' ) );
786                 return false;
787             }
788             if ( !m.getRowAsString( 3, ',' ).equals( "CIOSA,200,200,201,201,201,201" ) ) {
789                 System.out.println( m.getRowAsString( 3, ',' ) );
790                 return false;
791             }
792             if ( !m.getRowAsString( 4, ',' ).equals( "Q1RLW1_DANRE/12-45,200,200,201,201,201,43" ) ) {
793                 System.out.println( m.getRowAsString( 4, ',' ) );
794                 return false;
795             }
796             if ( !m.getRowAsString( 5, ',' ).equals( "Q6DIN7_XENTR-LOUSE,200,43,43,201,43,201" ) ) {
797                 System.out.println( m.getRowAsString( 5, ',' ) );
798                 return false;
799             }
800             //
801         }
802         catch ( final Exception e ) {
803             e.printStackTrace( System.out );
804             return false;
805         }
806         return true;
807     }
808 }