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