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