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() {
596 final Result2 res1 = new Result2();
597 res1.addGreatestCommonPrefix( "A.1.1", 0.3 );
598 res1.addGreatestCommonPrefix( "A.1.2", 0.3 );
599 res1.addGreatestCommonPrefix( "A.1.3", 0.3 );
600 res1.addGreatestCommonPrefix( "B.1", 0.1 );
601 res1.analyzeGreatestCommonPrefixes( 0.3 );
602 System.out.print( res1.toString());
603 System.out.println( "------------------------- ");
604 System.out.println();
606 final Result2 res2 = new Result2( "." );
607 res2.addGreatestCommonPrefix( "A.1.1.1", 0.1 );
608 res2.addGreatestCommonPrefix( "A.1", 0.7 );
609 res2.addGreatestCommonPrefix( "A.1.2", 0.1 );
610 res2.addGreatestCommonPrefix( "B.1", 0.1 );
611 res2.analyzeGreatestCommonPrefixes( 0.3 );
612 System.out.print( res2.toString());
613 System.out.println( "------------------------- ");
614 System.out.println();
616 final Result2 res3 = new Result2( "." );
617 res3.addGreatestCommonPrefix( "A.1.1.1", 0.1 );
618 res3.addGreatestCommonPrefix( "A.1.1.1.1", 0.6 );
619 res3.addGreatestCommonPrefix( "A.1", 0.1 );
620 res3.addGreatestCommonPrefix( "A.1.2", 0.1 );
621 res3.addGreatestCommonPrefix( "B.1", 0.1 );
622 res3.analyzeGreatestCommonPrefixes( 0.3 );
623 System.out.print( res3.toString());
624 System.out.println( "------------------------- ");
625 System.out.println();
627 final Result2 res33 = new Result2( "." );
628 res33.addGreatestCommonPrefix( "A.1.1.1", 0.1 );
629 res33.addGreatestCommonPrefix( "A.1.1.1.1", 0.3 );
630 res33.addGreatestCommonPrefix( "A.1", 0.1 );
631 res33.addGreatestCommonPrefix( "A.1.2", 0.1 );
632 res33.addGreatestCommonPrefix( "B.1", 0.1 );
633 res33.addGreatestCommonPrefix( "B.1.1.1", 0.3 );
634 res33.analyzeGreatestCommonPrefixes( 0.3 );
635 System.out.print( res33.toString());
636 System.out.println( "------------------------- ");
637 System.out.println();
639 final Result2 res4 = new Result2();
640 res4.addGreatestCommonPrefix( "A.1.1.1.1", 0.35 );
641 res4.addGreatestCommonPrefix( "A.1.1.1.2", 0.35 );
642 res4.addGreatestCommonPrefix( "A.1", 0.1 );
643 res4.addGreatestCommonPrefix( "A.1.2", 0.1 );
644 res4.addGreatestCommonPrefix( "B.1", 0.1 );
645 res4.analyzeGreatestCommonPrefixes( 0.3 );
646 System.out.print( res4.toString());
647 System.out.println( "------------------------- ");
648 System.out.println();
650 final Result2 res5 = new Result2();
651 res5.addGreatestCommonPrefix( "A.1.1.1.1", 0.2 );
652 res5.addGreatestCommonPrefix( "C.2.3", 0.2 );
653 res5.addGreatestCommonPrefix( "A.1.5", 0.1 );
654 res5.addGreatestCommonPrefix( "A.3.1.4", 0.2 );
655 res5.addGreatestCommonPrefix( "B.1.1", 0.2 );
656 res5.addGreatestCommonPrefix( "B.1.2", 0.09 );
657 res5.addGreatestCommonPrefix( "D.1.1.1.1", 0.01 );
658 res5.analyzeGreatestCommonPrefixes( 0.3 );
659 System.out.print( res5.toString());
660 System.out.println( "------------------------- ");
661 System.out.println();
663 final Result2 res6 = new Result2();
664 res6.addGreatestCommonPrefix( "A.1.1.1", 0.05 );
665 res6.addGreatestCommonPrefix( "A.1.1.1.1", 0.65 );
666 res6.addGreatestCommonPrefix( "A.1", 0.1 );
667 res6.addGreatestCommonPrefix( "A.1.2", 0.1 );
668 res6.addGreatestCommonPrefix( "B.1", 0.1 );
669 res6.analyzeGreatestCommonPrefixes( 0.3 );
670 System.out.print( res6.toString());
671 System.out.println( "------------------------- ");
672 System.out.println();
674 final Result2 res7 = new Result2();
675 res7.addGreatestCommonPrefix( "A.1.1.1", 0.07 );
676 res7.addGreatestCommonPrefix( "A.1.1.1.1", 0.9 );
677 res7.addGreatestCommonPrefix( "A.1", 0.01 );
678 res7.addGreatestCommonPrefix( "A.1.2", 0.01 );
679 res7.addGreatestCommonPrefix( "B.1", 0.01 );
680 res7.analyzeGreatestCommonPrefixes( 0.3 );
681 System.out.print( res7.toString());
682 System.out.println( "------------------------- ");
683 System.out.println();
685 final Result2 res8 = new Result2( "_/_" );
686 res8.addGreatestCommonPrefix( "AA_/_abc_/_def", 0.07 );
687 res8.addGreatestCommonPrefix( "AA_/_abc_/_sfc", 0.9 );
688 res8.addGreatestCommonPrefix( "AA_/_abc_/_xcd", 0.01 );
689 res8.addGreatestCommonPrefix( "AA_/_abc_/_memr", 0.01 );
690 res8.addGreatestCommonPrefix( "AA_/_abc_/_fkem_/_odem", 0.01 );
691 res8.analyzeGreatestCommonPrefixes( 0.3 );
692 System.out.print( res8.toString());
693 System.out.println( "------------------------- ");
694 System.out.println();
696 final Result2 res9 = new Result2( "_/_" );
697 res9.addGreatestCommonPrefix( "AA_/_abc_/_def", 0.07 );
698 res9.addGreatestCommonPrefix( "AA_/_abc_/_sfc", 0.6 );
699 res9.addGreatestCommonPrefix( "AA_/_abc_/_xcd", 0.01 );
700 res9.addGreatestCommonPrefix( "AA_/_abc_/_memr", 0.01 );
701 res9.addGreatestCommonPrefix( "AA_/_abc_/_fkem_/_odem", 0.01 );
702 res9.addGreatestCommonPrefix( "BB_/_fke_/_dme_/_nx2", 0.3 );
703 res9.analyzeGreatestCommonPrefixes( 0.3 );
704 System.out.print( res9.toString());
705 System.out.println( "------------------------- ");
706 System.out.println();
708 catch ( final Exception e ) {
709 e.printStackTrace( System.out );