2 package org.forester.clade_analysis;
7 import org.forester.io.parsers.PhylogenyParser;
8 import org.forester.io.parsers.util.ParserUtils;
9 import org.forester.phylogeny.Phylogeny;
10 import org.forester.phylogeny.factories.ParserBasedPhylogenyFactory;
11 import org.forester.phylogeny.factories.PhylogenyFactory;
12 import org.forester.util.ForesterUtil;
14 public class CladeAnalysisTest {
16 private final static String PATH_TO_TEST_DATA = System.getProperty( "user.dir" ) + ForesterUtil.getFileSeparator()
17 + "test_data" + ForesterUtil.getFileSeparator();
19 public static void main( final String[] args ) {
20 boolean failed = false;
21 if ( !testCladeAnalysis1() ) {
22 System.out.println( "Clade analysis 1 failed" );
25 if ( !testCladeAnalysis2() ) {
26 System.out.println( "Clade analysis 2 failed" );
29 if ( !testCladeAnalysis3() ) {
30 System.out.println( "Clade analysis 3 failed" );
34 System.out.println( "OK" );
38 public static boolean test() {
39 if ( !testCladeAnalysis1() ) {
42 if ( !testCladeAnalysis2() ) {
45 if ( !testCladeAnalysis3() ) {
51 private static boolean testCladeAnalysis1() {
53 final File intreefile1 = new File( PATH_TO_TEST_DATA + "clade_analysis_test_1.xml" );
54 final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
55 final PhylogenyParser pp = ParserUtils.createParserDependingOnFileType( intreefile1, true );
56 final Phylogeny p1 = factory.create( intreefile1, pp )[ 0 ];
57 Result res = Analysis.execute( p1, "A.1.1.1", "." );
58 if ( !res.getGreatestCommonPrefix().equals( "A.1" ) ) {
61 if ( !res.getGreatestCommonPrefixDown().equals( "A.1.1" ) ) {
64 if ( !res.getGreatestCommonPrefixUp().equals( "A.1.2.1" ) ) {
67 if ( res.getLeastEncompassingCladeSize() != 4 ) {
70 if ( res.getTreeSize() != 25 ) {
73 if ( res.getWarnings().size() != 0 ) {
76 res = Analysis.execute( p1, "A.1.1.2", "." );
77 if ( !res.getGreatestCommonPrefix().equals( "A.1" ) ) {
80 if ( !res.getGreatestCommonPrefixDown().equals( "A.1.1" ) ) {
83 if ( !res.getGreatestCommonPrefixUp().equals( "A.1.2.1" ) ) {
86 if ( res.getLeastEncompassingCladeSize() != 4 ) {
89 if ( res.getTreeSize() != 25 ) {
92 if ( res.getWarnings().size() != 0 ) {
95 res = Analysis.execute( p1, "A.1.1.3", "." );
96 if ( !res.getGreatestCommonPrefix().equals( "A.1" ) ) {
99 if ( !res.getGreatestCommonPrefixDown().equals( "A.1.1" ) ) {
102 if ( !res.getGreatestCommonPrefixUp().equals( "A.1.2.1" ) ) {
105 if ( res.getLeastEncompassingCladeSize() != 4 ) {
108 if ( res.getTreeSize() != 25 ) {
111 if ( res.getWarnings().size() != 0 ) {
114 res = Analysis.execute( p1, "A.1.1.4", "." );
115 if ( !res.getGreatestCommonPrefix().equals( "A.1.1" ) ) {
118 if ( !res.getGreatestCommonPrefixDown().equals( "A.1.1" ) ) {
121 if ( !res.getGreatestCommonPrefixUp().equals( "A.1.1" ) ) {
124 if ( res.getLeastEncompassingCladeSize() != 3 ) {
127 if ( res.getTreeSize() != 25 ) {
130 if ( res.getWarnings().size() != 0 ) {
133 res = Analysis.execute( p1, "A.1.2.1", "." );
134 if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
137 if ( !res.getGreatestCommonPrefixDown().equals( "A.1.1" ) ) {
140 if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
143 if ( res.getLeastEncompassingCladeSize() != 17 ) {
146 if ( res.getTreeSize() != 25 ) {
149 if ( res.getWarnings().size() != 0 ) {
152 res = Analysis.execute( p1, "A.2.1.1", "." );
153 if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
156 if ( !res.getGreatestCommonPrefixDown().equals( "A.2.1.2" ) ) {
159 if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
162 if ( res.getLeastEncompassingCladeSize() != 17 ) {
165 if ( res.getTreeSize() != 25 ) {
168 if ( res.getWarnings().size() != 0 ) {
171 res = Analysis.execute( p1, "A.2.1.2", "." );
172 if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
175 if ( !res.getGreatestCommonPrefixDown().equals( "A.2.1.1" ) ) {
178 if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
181 if ( res.getLeastEncompassingCladeSize() != 17 ) {
184 if ( res.getTreeSize() != 25 ) {
187 if ( res.getWarnings().size() != 0 ) {
190 res = Analysis.execute( p1, "A.3.1.1", "." );
191 if ( !res.getGreatestCommonPrefix().equals( "A.3" ) ) {
194 if ( !res.getGreatestCommonPrefixDown().equals( "A.3.1.2" ) ) {
197 if ( !res.getGreatestCommonPrefixUp().equals( "A.3.2.1" ) ) {
200 if ( res.getLeastEncompassingCladeSize() != 2 ) {
203 if ( res.getTreeSize() != 25 ) {
206 if ( res.getWarnings().size() != 0 ) {
209 res = Analysis.execute( p1, "A.3.1.2", "." );
210 if ( !res.getGreatestCommonPrefix().equals( "A.3" ) ) {
213 if ( !res.getGreatestCommonPrefixDown().equals( "A.3.1.1" ) ) {
216 if ( !res.getGreatestCommonPrefixUp().equals( "A.3.2.1" ) ) {
219 if ( res.getLeastEncompassingCladeSize() != 2 ) {
222 if ( res.getTreeSize() != 25 ) {
225 if ( res.getWarnings().size() != 0 ) {
228 res = Analysis.execute( p1, "A.3.2.1", "." );
229 if ( !res.getGreatestCommonPrefix().equals( "A.3" ) ) {
232 if ( !res.getGreatestCommonPrefixDown().equals( "A.3.1" ) ) {
235 if ( !res.getGreatestCommonPrefixUp().equals( "A.3.3.1" ) ) {
238 if ( res.getLeastEncompassingCladeSize() != 3 ) {
241 if ( res.getTreeSize() != 25 ) {
244 if ( res.getWarnings().size() != 0 ) {
247 res = Analysis.execute( p1, "A.3.3.1", "." );
248 if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
251 if ( !res.getGreatestCommonPrefixDown().equals( "A.3" ) ) {
254 if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
257 if ( res.getLeastEncompassingCladeSize() != 10 ) {
260 if ( res.getTreeSize() != 25 ) {
263 if ( res.getWarnings().size() != 0 ) {
266 res = Analysis.execute( p1, "A.4.1.1", "." );
267 if ( !res.getGreatestCommonPrefix().equals( "A.4.1" ) ) {
270 if ( !res.getGreatestCommonPrefixDown().equals( "A.4.1.1.a" ) ) {
273 if ( !res.getGreatestCommonPrefixUp().equals( "A.4.1.2" ) ) {
276 if ( res.getLeastEncompassingCladeSize() != 3 ) {
279 if ( res.getTreeSize() != 25 ) {
282 if ( res.getWarnings().size() != 0 ) {
285 res = Analysis.execute( p1, "A.4.1.1.a", "." );
286 if ( !res.getGreatestCommonPrefix().equals( "A.4.1" ) ) {
289 if ( !res.getGreatestCommonPrefixDown().equals( "A.4.1.1" ) ) {
292 if ( !res.getGreatestCommonPrefixUp().equals( "A.4.1.2" ) ) {
295 if ( res.getLeastEncompassingCladeSize() != 3 ) {
298 if ( res.getTreeSize() != 25 ) {
301 if ( res.getWarnings().size() != 0 ) {
304 res = Analysis.execute( p1, "A.4.1.2", "." );
305 res = Analysis.execute( p1, "A.4.1.2.a", "." );
306 res = Analysis.execute( p1, "A.5.1.1", "." );
307 if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
310 if ( !res.getGreatestCommonPrefixDown().equals( "A.5.1.2" ) ) {
313 if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
316 if ( res.getLeastEncompassingCladeSize() != 10 ) {
319 if ( res.getTreeSize() != 25 ) {
322 if ( res.getWarnings().size() != 0 ) {
325 res = Analysis.execute( p1, "A.5.1.2", "." );
326 if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
329 if ( !res.getGreatestCommonPrefixDown().equals( "A.5.1.1" ) ) {
332 if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
335 if ( res.getLeastEncompassingCladeSize() != 10 ) {
338 if ( res.getTreeSize() != 25 ) {
341 if ( res.getWarnings().size() != 0 ) {
344 res = Analysis.execute( p1, "A.6.3.12", "." );
345 if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
348 if ( !res.getGreatestCommonPrefixDown().equals( "A" ) ) {
351 if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
354 if ( res.getLeastEncompassingCladeSize() != 17 ) {
357 if ( res.getTreeSize() != 25 ) {
360 if ( res.getWarnings().size() != 0 ) {
363 res = Analysis.execute( p1, "B.1.1.1", "." );
364 if ( !res.getGreatestCommonPrefix().equals( "" ) ) {
367 if ( !res.getGreatestCommonPrefixDown().equals( "B.1.234.3" ) ) {
370 if ( !res.getGreatestCommonPrefixUp().equals( "" ) ) {
373 if ( res.getLeastEncompassingCladeSize() != 25 ) {
376 if ( res.getTreeSize() != 25 ) {
379 if ( res.getWarnings().size() != 2 ) {
382 res = Analysis.execute( p1, "B.1.234.3", "." );
383 if ( !res.getGreatestCommonPrefix().equals( "" ) ) {
386 if ( !res.getGreatestCommonPrefixDown().equals( "B.1.1.1" ) ) {
389 if ( !res.getGreatestCommonPrefixUp().equals( "" ) ) {
392 if ( res.getLeastEncompassingCladeSize() != 25 ) {
395 if ( res.getTreeSize() != 25 ) {
398 if ( res.getWarnings().size() != 2 ) {
401 res = Analysis.execute( p1, "C.1.1.1", "." );
402 if ( !res.getGreatestCommonPrefix().equals( "C.1" ) ) {
405 if ( !res.getGreatestCommonPrefixDown().equals( "C.1.1.2" ) ) {
408 if ( !res.getGreatestCommonPrefixUp().equals( "C.1.2.1" ) ) {
411 if ( res.getLeastEncompassingCladeSize() != 2 ) {
414 if ( res.getTreeSize() != 25 ) {
417 if ( res.getWarnings().size() != 0 ) {
420 res = Analysis.execute( p1, "C.1.1.2", "." );
421 if ( !res.getGreatestCommonPrefix().equals( "C.1" ) ) {
424 if ( !res.getGreatestCommonPrefixDown().equals( "C.1.1.1" ) ) {
427 if ( !res.getGreatestCommonPrefixUp().equals( "C.1.2.1" ) ) {
430 if ( res.getLeastEncompassingCladeSize() != 2 ) {
433 if ( res.getTreeSize() != 25 ) {
436 if ( res.getWarnings().size() != 0 ) {
439 res = Analysis.execute( p1, "C.1.2.1", "." );
440 if ( !res.getGreatestCommonPrefix().equals( "C" ) ) {
443 if ( !res.getGreatestCommonPrefixDown().equals( "C.1.1" ) ) {
446 if ( !res.getGreatestCommonPrefixUp().equals( "C.2.1" ) ) {
449 if ( res.getLeastEncompassingCladeSize() != 3 ) {
452 if ( res.getTreeSize() != 25 ) {
455 if ( res.getWarnings().size() != 0 ) {
458 res = Analysis.execute( p1, "C.2.1", "." );
459 if ( !res.getGreatestCommonPrefix().equals( "C" ) ) {
462 if ( !res.getGreatestCommonPrefixDown().equals( "C.1" ) ) {
465 if ( !res.getGreatestCommonPrefixUp().equals( "C.3" ) ) {
468 if ( res.getLeastEncompassingCladeSize() != 4 ) {
471 if ( res.getTreeSize() != 25 ) {
474 if ( res.getWarnings().size() != 0 ) {
477 res = Analysis.execute( p1, "C.3", "." );
478 if ( !res.getGreatestCommonPrefix().equals( "" ) ) {
481 if ( !res.getGreatestCommonPrefixDown().equals( "C" ) ) {
484 if ( !res.getGreatestCommonPrefixUp().equals( "QE.1.1.1.2.1" ) ) {
487 if ( res.getLeastEncompassingCladeSize() != 5 ) {
490 if ( res.getTreeSize() != 25 ) {
493 if ( res.getWarnings().size() != 1 ) {
496 res = Analysis.execute( p1, "QE.1.1.1.2.1", "." );
497 if ( !res.getGreatestCommonPrefix().equals( "" ) ) {
500 if ( !res.getGreatestCommonPrefixDown().equals( "C" ) ) {
503 if ( !res.getGreatestCommonPrefixUp().equals( "" ) ) {
506 if ( res.getLeastEncompassingCladeSize() != 25 ) {
509 if ( res.getTreeSize() != 25 ) {
512 if ( res.getWarnings().size() != 2 ) {
516 catch ( final Exception e ) {
517 e.printStackTrace( System.out );
523 private static boolean testCladeAnalysis2() {
525 final File intreefile1 = new File( PATH_TO_TEST_DATA + "clade_analysis_test_2.xml" );
526 final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
527 final PhylogenyParser pp = ParserUtils.createParserDependingOnFileType( intreefile1, true );
528 final Phylogeny p1 = factory.create( intreefile1, pp )[ 0 ];
529 Result res = Analysis.execute( p1, "6_DQ278891", null );
530 if ( !res.getGreatestCommonPrefix().equals( "6_" ) ) {
533 if ( !res.getGreatestCommonPrefixDown().equals( "6_DQ278893" ) ) {
536 if ( !res.getGreatestCommonPrefixUp().equals( "6_JX183550" ) ) {
539 if ( res.getLeastEncompassingCladeSize() != 2 ) {
542 if ( res.getTreeSize() != 219 ) {
545 if ( res.getWarnings().size() != 0 ) {
548 res = Analysis.execute( p1, "6xa_EU408330", null );
549 if ( !res.getGreatestCommonPrefix().equals( "6xa_EU40833" ) ) {
552 if ( !res.getGreatestCommonPrefixDown().equals( "6xa_EU408331" ) ) {
555 if ( !res.getGreatestCommonPrefixUp().equals( "6xa_EU408332" ) ) {
558 if ( res.getLeastEncompassingCladeSize() != 2 ) {
561 if ( res.getTreeSize() != 219 ) {
564 if ( res.getWarnings().size() != 0 ) {
567 res = Analysis.execute( p1, "7a_EF108306", null );
568 if ( !res.getGreatestCommonPrefix().equals( "" ) ) {
571 if ( !res.getGreatestCommonPrefixDown().equals( "2" ) ) {
574 if ( !res.getGreatestCommonPrefixUp().equals( "" ) ) {
577 if ( res.getLeastEncompassingCladeSize() != 219 ) {
580 if ( res.getTreeSize() != 219 ) {
583 if ( res.getWarnings().size() != 2 ) {
587 catch ( final Exception e ) {
588 e.printStackTrace( System.out );
594 private static boolean testCladeAnalysis3() {
597 final Result2 res1 = new Result2();
598 res1.addGreatestCommonPrefix( "A.1.1", 0.3 );
599 res1.addGreatestCommonPrefix( "A.1.2", 0.3 );
600 res1.addGreatestCommonPrefix( "A.1.3", 0.3 );
601 res1.addGreatestCommonPrefix( "B.1", 0.1 );
603 List<String> x = ForesterUtil.spliIntoPrefixes( "A.1.2.3.4", "." );
604 // System.out.println( x );
605 x =ForesterUtil.spliIntoPrefixes( "A", "." );
606 // System.out.println( x );
609 res1.analyzeGreatestCommonPrefixes( );
611 final Result2 res2 = new Result2(".");
612 res2.addGreatestCommonPrefix( "A.1.1.1", 0.1 );
613 res2.addGreatestCommonPrefix( "A.1", 0.7 );
614 res2.addGreatestCommonPrefix( "A.1.2", 0.1 );
615 res2.addGreatestCommonPrefix( "B.1", 0.1 );
616 res2.analyzeGreatestCommonPrefixes( );
618 final Result2 res3 = new Result2(".");
619 res3.addGreatestCommonPrefix( "A.1.1.1", 0.1 );
620 res3.addGreatestCommonPrefix( "A.1.1.1.1", 0.6 );
621 res3.addGreatestCommonPrefix( "A.1", 0.1 );
622 res3.addGreatestCommonPrefix( "A.1.2", 0.1 );
623 res3.addGreatestCommonPrefix( "B.1", 0.1 );
624 res3.analyzeGreatestCommonPrefixes( );
626 final Result2 res33 = new Result2(".");
627 res33.addGreatestCommonPrefix( "A.1.1.1", 0.1 );
628 res33.addGreatestCommonPrefix( "A.1.1.1.1", 0.3 );
629 res33.addGreatestCommonPrefix( "A.1", 0.1 );
630 res33.addGreatestCommonPrefix( "A.1.2", 0.1 );
631 res33.addGreatestCommonPrefix( "B.1", 0.1 );
632 res33.addGreatestCommonPrefix( "B.1.1.1", 0.3 );
633 res33.analyzeGreatestCommonPrefixes( );
636 final Result2 res4 = new Result2();
637 res4.addGreatestCommonPrefix( "A.1.1.1.1", 0.35);
638 res4.addGreatestCommonPrefix( "A.1.1.1.2", 0.35 );
639 res4.addGreatestCommonPrefix( "A.1", 0.1 );
640 res4.addGreatestCommonPrefix( "A.1.2", 0.1 );
641 res4.addGreatestCommonPrefix( "B.1", 0.1 );
642 res4.analyzeGreatestCommonPrefixes( );
644 final Result2 res5 = new Result2();
645 res5.addGreatestCommonPrefix( "A.1.1.1.1", 0.2);
646 res5.addGreatestCommonPrefix( "C.2.3", 0.2 );
647 res5.addGreatestCommonPrefix( "A.1.5", 0.1 );
648 res5.addGreatestCommonPrefix( "A.3.1.4", 0.2 );
649 res5.addGreatestCommonPrefix( "B.1.1", 0.2 );
650 res5.addGreatestCommonPrefix( "B.1.2", 0.09 );
651 res5.addGreatestCommonPrefix( "D.1.1.1.1", 0.01 );
652 res5.analyzeGreatestCommonPrefixes( );
654 final Result2 res6 = new Result2();
655 res6.addGreatestCommonPrefix( "A.1.1.1", 0.05 );
656 res6.addGreatestCommonPrefix( "A.1.1.1.1", 0.65 );
657 res6.addGreatestCommonPrefix( "A.1", 0.1 );
658 res6.addGreatestCommonPrefix( "A.1.2", 0.1 );
659 res6.addGreatestCommonPrefix( "B.1", 0.1 );
660 res6.analyzeGreatestCommonPrefixes( );
662 final Result2 res7 = new Result2();
663 res7.addGreatestCommonPrefix( "A.1.1.1", 0.07 );
664 res7.addGreatestCommonPrefix( "A.1.1.1.1", 0.9 );
665 res7.addGreatestCommonPrefix( "A.1", 0.01 );
666 res7.addGreatestCommonPrefix( "A.1.2", 0.01 );
667 res7.addGreatestCommonPrefix( "B.1", 0.01 );
668 res7.analyzeGreatestCommonPrefixes( );
670 final Result2 res8 = new Result2("_/_");
671 res8.addGreatestCommonPrefix( "AA_/_abc_/_def", 0.07 );
672 res8.addGreatestCommonPrefix( "AA_/_abc_/_sfc", 0.9 );
673 res8.addGreatestCommonPrefix( "AA_/_abc_/_xcd", 0.01 );
674 res8.addGreatestCommonPrefix( "AA_/_abc_/_memr", 0.01 );
675 res8.addGreatestCommonPrefix( "AA_/_abc_/_fkem_/_odem", 0.01 );
676 res8.analyzeGreatestCommonPrefixes( );
678 final Result2 res9 = new Result2("_/_");
679 res9.addGreatestCommonPrefix( "AA_/_abc_/_def", 0.07 );
680 res9.addGreatestCommonPrefix( "AA_/_abc_/_sfc", 0.6 );
681 res9.addGreatestCommonPrefix( "AA_/_abc_/_xcd", 0.01 );
682 res9.addGreatestCommonPrefix( "AA_/_abc_/_memr", 0.01 );
683 res9.addGreatestCommonPrefix( "AA_/_abc_/_fkem_/_odem", 0.01 );
684 res9.addGreatestCommonPrefix( "BB_/_fke_/_dme_/_nx2", 0.3 );
685 res9.analyzeGreatestCommonPrefixes( );*/
687 catch ( final Exception e ) {
688 e.printStackTrace( System.out );