2 package org.forester.clade_analysis;
6 import java.util.regex.Pattern;
8 import org.forester.io.parsers.PhylogenyParser;
9 import org.forester.io.parsers.util.ParserUtils;
10 import org.forester.phylogeny.Phylogeny;
11 import org.forester.phylogeny.factories.ParserBasedPhylogenyFactory;
12 import org.forester.phylogeny.factories.PhylogenyFactory;
13 import org.forester.util.ForesterUtil;
15 public class CladeAnalysisTest {
17 private final static String PATH_TO_TEST_DATA = System.getProperty( "user.dir" ) + ForesterUtil.getFileSeparator()
18 + "test_data" + ForesterUtil.getFileSeparator();
20 public static void main( final String[] args ) {
21 boolean failed = false;
22 if ( !testCladeAnalysis1() ) {
23 System.out.println( "Clade analysis 1 failed" );
26 if ( !testCladeAnalysis2() ) {
27 System.out.println( "Clade analysis 2 failed" );
30 if ( !testCladeAnalysis3() ) {
31 System.out.println( "Clade analysis 3 failed" );
34 if ( !testCladeAnalysis4() ) {
35 System.out.println( "Clade analysis 3 failed" );
39 System.out.println( "OK" );
43 public static boolean test() {
44 if ( !testCladeAnalysis1() ) {
47 if ( !testCladeAnalysis2() ) {
50 if ( !testCladeAnalysis3() ) {
53 if ( !testCladeAnalysis4() ) {
59 private static boolean testCladeAnalysis1() {
61 final File intreefile1 = new File( PATH_TO_TEST_DATA + "clade_analysis_test_1.xml" );
62 final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
63 final PhylogenyParser pp = ParserUtils.createParserDependingOnFileType( intreefile1, true );
64 final Phylogeny p1 = factory.create( intreefile1, pp )[ 0 ];
65 Result res = Analysis.execute( p1, "A.1.1.1", "." );
66 if ( !res.getGreatestCommonPrefix().equals( "A.1" ) ) {
69 if ( !res.getGreatestCommonPrefixDown().equals( "A.1.1" ) ) {
72 if ( !res.getGreatestCommonPrefixUp().equals( "A.1.2.1" ) ) {
75 if ( res.getLeastEncompassingCladeSize() != 4 ) {
78 if ( res.getTreeSize() != 25 ) {
81 if ( res.getWarnings().size() != 0 ) {
84 res = Analysis.execute( p1, "A.1.1.2", "." );
85 if ( !res.getGreatestCommonPrefix().equals( "A.1" ) ) {
88 if ( !res.getGreatestCommonPrefixDown().equals( "A.1.1" ) ) {
91 if ( !res.getGreatestCommonPrefixUp().equals( "A.1.2.1" ) ) {
94 if ( res.getLeastEncompassingCladeSize() != 4 ) {
97 if ( res.getTreeSize() != 25 ) {
100 if ( res.getWarnings().size() != 0 ) {
103 res = Analysis.execute( p1, "A.1.1.3", "." );
104 if ( !res.getGreatestCommonPrefix().equals( "A.1" ) ) {
107 if ( !res.getGreatestCommonPrefixDown().equals( "A.1.1" ) ) {
110 if ( !res.getGreatestCommonPrefixUp().equals( "A.1.2.1" ) ) {
113 if ( res.getLeastEncompassingCladeSize() != 4 ) {
116 if ( res.getTreeSize() != 25 ) {
119 if ( res.getWarnings().size() != 0 ) {
122 res = Analysis.execute( p1, "A.1.1.4", "." );
123 if ( !res.getGreatestCommonPrefix().equals( "A.1.1" ) ) {
126 if ( !res.getGreatestCommonPrefixDown().equals( "A.1.1" ) ) {
129 if ( !res.getGreatestCommonPrefixUp().equals( "A.1.1" ) ) {
132 if ( res.getLeastEncompassingCladeSize() != 3 ) {
135 if ( res.getTreeSize() != 25 ) {
138 if ( res.getWarnings().size() != 0 ) {
141 res = Analysis.execute( p1, "A.1.2.1", "." );
142 if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
145 if ( !res.getGreatestCommonPrefixDown().equals( "A.1.1" ) ) {
148 if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
151 if ( res.getLeastEncompassingCladeSize() != 17 ) {
154 if ( res.getTreeSize() != 25 ) {
157 if ( res.getWarnings().size() != 0 ) {
160 res = Analysis.execute( p1, "A.2.1.1", "." );
161 if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
164 if ( !res.getGreatestCommonPrefixDown().equals( "A.2.1.2" ) ) {
167 if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
170 if ( res.getLeastEncompassingCladeSize() != 17 ) {
173 if ( res.getTreeSize() != 25 ) {
176 if ( res.getWarnings().size() != 0 ) {
179 res = Analysis.execute( p1, "A.2.1.2", "." );
180 if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
183 if ( !res.getGreatestCommonPrefixDown().equals( "A.2.1.1" ) ) {
186 if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
189 if ( res.getLeastEncompassingCladeSize() != 17 ) {
192 if ( res.getTreeSize() != 25 ) {
195 if ( res.getWarnings().size() != 0 ) {
198 res = Analysis.execute( p1, "A.3.1.1", "." );
199 if ( !res.getGreatestCommonPrefix().equals( "A.3" ) ) {
202 if ( !res.getGreatestCommonPrefixDown().equals( "A.3.1.2" ) ) {
205 if ( !res.getGreatestCommonPrefixUp().equals( "A.3.2.1" ) ) {
208 if ( res.getLeastEncompassingCladeSize() != 2 ) {
211 if ( res.getTreeSize() != 25 ) {
214 if ( res.getWarnings().size() != 0 ) {
217 res = Analysis.execute( p1, "A.3.1.2", "." );
218 if ( !res.getGreatestCommonPrefix().equals( "A.3" ) ) {
221 if ( !res.getGreatestCommonPrefixDown().equals( "A.3.1.1" ) ) {
224 if ( !res.getGreatestCommonPrefixUp().equals( "A.3.2.1" ) ) {
227 if ( res.getLeastEncompassingCladeSize() != 2 ) {
230 if ( res.getTreeSize() != 25 ) {
233 if ( res.getWarnings().size() != 0 ) {
236 res = Analysis.execute( p1, "A.3.2.1", "." );
237 if ( !res.getGreatestCommonPrefix().equals( "A.3" ) ) {
240 if ( !res.getGreatestCommonPrefixDown().equals( "A.3.1" ) ) {
243 if ( !res.getGreatestCommonPrefixUp().equals( "A.3.3.1" ) ) {
246 if ( res.getLeastEncompassingCladeSize() != 3 ) {
249 if ( res.getTreeSize() != 25 ) {
252 if ( res.getWarnings().size() != 0 ) {
255 res = Analysis.execute( p1, "A.3.3.1", "." );
256 if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
259 if ( !res.getGreatestCommonPrefixDown().equals( "A.3" ) ) {
262 if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
265 if ( res.getLeastEncompassingCladeSize() != 10 ) {
268 if ( res.getTreeSize() != 25 ) {
271 if ( res.getWarnings().size() != 0 ) {
274 res = Analysis.execute( p1, "A.4.1.1", "." );
275 if ( !res.getGreatestCommonPrefix().equals( "A.4.1" ) ) {
278 if ( !res.getGreatestCommonPrefixDown().equals( "A.4.1.1.a" ) ) {
281 if ( !res.getGreatestCommonPrefixUp().equals( "A.4.1.2" ) ) {
284 if ( res.getLeastEncompassingCladeSize() != 3 ) {
287 if ( res.getTreeSize() != 25 ) {
290 if ( res.getWarnings().size() != 0 ) {
293 res = Analysis.execute( p1, "A.4.1.1.a", "." );
294 if ( !res.getGreatestCommonPrefix().equals( "A.4.1" ) ) {
297 if ( !res.getGreatestCommonPrefixDown().equals( "A.4.1.1" ) ) {
300 if ( !res.getGreatestCommonPrefixUp().equals( "A.4.1.2" ) ) {
303 if ( res.getLeastEncompassingCladeSize() != 3 ) {
306 if ( res.getTreeSize() != 25 ) {
309 if ( res.getWarnings().size() != 0 ) {
312 res = Analysis.execute( p1, "A.4.1.2", "." );
313 res = Analysis.execute( p1, "A.4.1.2.a", "." );
314 res = Analysis.execute( p1, "A.5.1.1", "." );
315 if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
318 if ( !res.getGreatestCommonPrefixDown().equals( "A.5.1.2" ) ) {
321 if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
324 if ( res.getLeastEncompassingCladeSize() != 10 ) {
327 if ( res.getTreeSize() != 25 ) {
330 if ( res.getWarnings().size() != 0 ) {
333 res = Analysis.execute( p1, "A.5.1.2", "." );
334 if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
337 if ( !res.getGreatestCommonPrefixDown().equals( "A.5.1.1" ) ) {
340 if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
343 if ( res.getLeastEncompassingCladeSize() != 10 ) {
346 if ( res.getTreeSize() != 25 ) {
349 if ( res.getWarnings().size() != 0 ) {
352 res = Analysis.execute( p1, "A.6.3.12", "." );
353 if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
356 if ( !res.getGreatestCommonPrefixDown().equals( "A" ) ) {
359 if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
362 if ( res.getLeastEncompassingCladeSize() != 17 ) {
365 if ( res.getTreeSize() != 25 ) {
368 if ( res.getWarnings().size() != 0 ) {
371 res = Analysis.execute( p1, "B.1.1.1", "." );
372 if ( !res.getGreatestCommonPrefix().equals( "" ) ) {
375 if ( !res.getGreatestCommonPrefixDown().equals( "B.1.234.3" ) ) {
378 if ( !res.getGreatestCommonPrefixUp().equals( "" ) ) {
381 if ( res.getLeastEncompassingCladeSize() != 25 ) {
384 if ( res.getTreeSize() != 25 ) {
387 if ( res.getWarnings().size() != 2 ) {
390 res = Analysis.execute( p1, "B.1.234.3", "." );
391 if ( !res.getGreatestCommonPrefix().equals( "" ) ) {
394 if ( !res.getGreatestCommonPrefixDown().equals( "B.1.1.1" ) ) {
397 if ( !res.getGreatestCommonPrefixUp().equals( "" ) ) {
400 if ( res.getLeastEncompassingCladeSize() != 25 ) {
403 if ( res.getTreeSize() != 25 ) {
406 if ( res.getWarnings().size() != 2 ) {
409 res = Analysis.execute( p1, "C.1.1.1", "." );
410 if ( !res.getGreatestCommonPrefix().equals( "C.1" ) ) {
413 if ( !res.getGreatestCommonPrefixDown().equals( "C.1.1.2" ) ) {
416 if ( !res.getGreatestCommonPrefixUp().equals( "C.1.2.1" ) ) {
419 if ( res.getLeastEncompassingCladeSize() != 2 ) {
422 if ( res.getTreeSize() != 25 ) {
425 if ( res.getWarnings().size() != 0 ) {
428 res = Analysis.execute( p1, "C.1.1.2", "." );
429 if ( !res.getGreatestCommonPrefix().equals( "C.1" ) ) {
432 if ( !res.getGreatestCommonPrefixDown().equals( "C.1.1.1" ) ) {
435 if ( !res.getGreatestCommonPrefixUp().equals( "C.1.2.1" ) ) {
438 if ( res.getLeastEncompassingCladeSize() != 2 ) {
441 if ( res.getTreeSize() != 25 ) {
444 if ( res.getWarnings().size() != 0 ) {
447 res = Analysis.execute( p1, "C.1.2.1", "." );
448 if ( !res.getGreatestCommonPrefix().equals( "C" ) ) {
451 if ( !res.getGreatestCommonPrefixDown().equals( "C.1.1" ) ) {
454 if ( !res.getGreatestCommonPrefixUp().equals( "C.2.1" ) ) {
457 if ( res.getLeastEncompassingCladeSize() != 3 ) {
460 if ( res.getTreeSize() != 25 ) {
463 if ( res.getWarnings().size() != 0 ) {
466 res = Analysis.execute( p1, "C.2.1", "." );
467 if ( !res.getGreatestCommonPrefix().equals( "C" ) ) {
470 if ( !res.getGreatestCommonPrefixDown().equals( "C.1" ) ) {
473 if ( !res.getGreatestCommonPrefixUp().equals( "C.3" ) ) {
476 if ( res.getLeastEncompassingCladeSize() != 4 ) {
479 if ( res.getTreeSize() != 25 ) {
482 if ( res.getWarnings().size() != 0 ) {
485 res = Analysis.execute( p1, "C.3", "." );
486 if ( !res.getGreatestCommonPrefix().equals( "" ) ) {
489 if ( !res.getGreatestCommonPrefixDown().equals( "C" ) ) {
492 if ( !res.getGreatestCommonPrefixUp().equals( "QE.1.1.1.2.1" ) ) {
495 if ( res.getLeastEncompassingCladeSize() != 5 ) {
498 if ( res.getTreeSize() != 25 ) {
501 if ( res.getWarnings().size() != 1 ) {
504 res = Analysis.execute( p1, "QE.1.1.1.2.1", "." );
505 if ( !res.getGreatestCommonPrefix().equals( "" ) ) {
508 if ( !res.getGreatestCommonPrefixDown().equals( "C" ) ) {
511 if ( !res.getGreatestCommonPrefixUp().equals( "" ) ) {
514 if ( res.getLeastEncompassingCladeSize() != 25 ) {
517 if ( res.getTreeSize() != 25 ) {
520 if ( res.getWarnings().size() != 2 ) {
524 catch ( final Exception e ) {
525 e.printStackTrace( System.out );
531 private static boolean testCladeAnalysis2() {
533 final File intreefile1 = new File( PATH_TO_TEST_DATA + "clade_analysis_test_2.xml" );
534 final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
535 final PhylogenyParser pp = ParserUtils.createParserDependingOnFileType( intreefile1, true );
536 final Phylogeny p1 = factory.create( intreefile1, pp )[ 0 ];
537 Result res = Analysis.execute( p1, "6_DQ278891", null );
538 if ( !res.getGreatestCommonPrefix().equals( "6_" ) ) {
541 if ( !res.getGreatestCommonPrefixDown().equals( "6_DQ278893" ) ) {
544 if ( !res.getGreatestCommonPrefixUp().equals( "6_JX183550" ) ) {
547 if ( res.getLeastEncompassingCladeSize() != 2 ) {
550 if ( res.getTreeSize() != 219 ) {
553 if ( res.getWarnings().size() != 0 ) {
556 res = Analysis.execute( p1, "6xa_EU408330", null );
557 if ( !res.getGreatestCommonPrefix().equals( "6xa_EU40833" ) ) {
560 if ( !res.getGreatestCommonPrefixDown().equals( "6xa_EU408331" ) ) {
563 if ( !res.getGreatestCommonPrefixUp().equals( "6xa_EU408332" ) ) {
566 if ( res.getLeastEncompassingCladeSize() != 2 ) {
569 if ( res.getTreeSize() != 219 ) {
572 if ( res.getWarnings().size() != 0 ) {
575 res = Analysis.execute( p1, "7a_EF108306", null );
576 if ( !res.getGreatestCommonPrefix().equals( "" ) ) {
579 if ( !res.getGreatestCommonPrefixDown().equals( "2" ) ) {
582 if ( !res.getGreatestCommonPrefixUp().equals( "" ) ) {
585 if ( res.getLeastEncompassingCladeSize() != 219 ) {
588 if ( res.getTreeSize() != 219 ) {
591 if ( res.getWarnings().size() != 2 ) {
595 catch ( final Exception e ) {
596 e.printStackTrace( System.out );
602 private static boolean testCladeAnalysis3() {
604 final Result2 res1 = new Result2();
605 res1.addGreatestCommonPrefix( "A.1.1", 0.3 );
606 res1.addGreatestCommonPrefix( "A.1.2", 0.3 );
607 res1.addGreatestCommonPrefix( "A.1.3", 0.3 );
608 res1.addGreatestCommonPrefix( "B.1", 0.1 );
609 res1.analyzeGreatestCommonPrefixes( 0.3 );
610 System.out.print( res1.toString());
611 System.out.println( "------------------------- ");
612 System.out.println();
614 final Result2 res2 = new Result2( "." );
615 res2.addGreatestCommonPrefix( "A.1.1.1", 0.1 );
616 res2.addGreatestCommonPrefix( "A.1", 0.7 );
617 res2.addGreatestCommonPrefix( "A.1.2", 0.1 );
618 res2.addGreatestCommonPrefix( "B.1", 0.1 );
619 res2.analyzeGreatestCommonPrefixes( 0.3 );
620 System.out.print( res2.toString());
621 System.out.println( "------------------------- ");
622 System.out.println();
624 final Result2 res3 = new Result2( "." );
625 res3.addGreatestCommonPrefix( "A.1.1.1", 0.1 );
626 res3.addGreatestCommonPrefix( "A.1.1.1.1", 0.6 );
627 res3.addGreatestCommonPrefix( "A.1", 0.1 );
628 res3.addGreatestCommonPrefix( "A.1.2", 0.1 );
629 res3.addGreatestCommonPrefix( "B.1", 0.1 );
630 res3.analyzeGreatestCommonPrefixes( 0.3 );
631 System.out.print( res3.toString());
632 System.out.println( "------------------------- ");
633 System.out.println();
635 final Result2 res33 = new Result2( "." );
636 res33.addGreatestCommonPrefix( "A.1.1.1", 0.1 );
637 res33.addGreatestCommonPrefix( "A.1.1.1.1", 0.3 );
638 res33.addGreatestCommonPrefix( "A.1", 0.1 );
639 res33.addGreatestCommonPrefix( "A.1.2", 0.1 );
640 res33.addGreatestCommonPrefix( "B.1", 0.1 );
641 res33.addGreatestCommonPrefix( "B.1.1.1", 0.3 );
642 res33.analyzeGreatestCommonPrefixes( 0.3 );
643 System.out.print( res33.toString());
644 System.out.println( "------------------------- ");
645 System.out.println();
647 final Result2 res4 = new Result2();
648 res4.addGreatestCommonPrefix( "A.1.1.1.1", 0.35 );
649 res4.addGreatestCommonPrefix( "A.1.1.1.2", 0.35 );
650 res4.addGreatestCommonPrefix( "A.1", 0.1 );
651 res4.addGreatestCommonPrefix( "A.1.2", 0.1 );
652 res4.addGreatestCommonPrefix( "B.1", 0.1 );
653 res4.analyzeGreatestCommonPrefixes( 0.3 );
654 System.out.print( res4.toString());
655 System.out.println( "------------------------- ");
656 System.out.println();
658 final Result2 res5 = new Result2();
659 res5.addGreatestCommonPrefix( "A.1.1.1.1", 0.2 );
660 res5.addGreatestCommonPrefix( "C.2.3", 0.2 );
661 res5.addGreatestCommonPrefix( "A.1.5", 0.1 );
662 res5.addGreatestCommonPrefix( "A.3.1.4", 0.2 );
663 res5.addGreatestCommonPrefix( "B.1.1", 0.2 );
664 res5.addGreatestCommonPrefix( "B.1.2", 0.09 );
665 res5.addGreatestCommonPrefix( "D.1.1.1.1", 0.01 );
666 res5.analyzeGreatestCommonPrefixes( 0.3 );
667 System.out.print( res5.toString());
668 System.out.println( "------------------------- ");
669 System.out.println();
671 final Result2 res6 = new Result2();
672 res6.addGreatestCommonPrefix( "A.1.1.1", 0.05 );
673 res6.addGreatestCommonPrefix( "A.1.1.1.1", 0.65 );
674 res6.addGreatestCommonPrefix( "A.1", 0.1 );
675 res6.addGreatestCommonPrefix( "A.1.2", 0.1 );
676 res6.addGreatestCommonPrefix( "B.1", 0.1 );
677 res6.analyzeGreatestCommonPrefixes( 0.3 );
678 System.out.print( res6.toString());
679 System.out.println( "------------------------- ");
680 System.out.println();
682 final Result2 res7 = new Result2();
683 res7.addGreatestCommonPrefix( "A.1.1.1", 0.07 );
684 res7.addGreatestCommonPrefix( "A.1.1.1.1", 0.9 );
685 res7.addGreatestCommonPrefix( "A.1", 0.01 );
686 res7.addGreatestCommonPrefix( "A.1.2", 0.01 );
687 res7.addGreatestCommonPrefix( "B.1", 0.01 );
688 res7.analyzeGreatestCommonPrefixes( 0.3 );
689 System.out.print( res7.toString());
690 System.out.println( "------------------------- ");
691 System.out.println();
693 final Result2 res8 = new Result2( "_/_" );
694 res8.addGreatestCommonPrefix( "AA_/_abc_/_def", 0.07 );
695 res8.addGreatestCommonPrefix( "AA_/_abc_/_sfc", 0.9 );
696 res8.addGreatestCommonPrefix( "AA_/_abc_/_xcd", 0.01 );
697 res8.addGreatestCommonPrefix( "AA_/_abc_/_memr", 0.01 );
698 res8.addGreatestCommonPrefix( "AA_/_abc_/_fkem_/_odem", 0.01 );
699 res8.analyzeGreatestCommonPrefixes( 0.3 );
700 System.out.print( res8.toString());
701 System.out.println( "------------------------- ");
702 System.out.println();
704 final Result2 res9 = new Result2( "_/_" );
705 res9.addGreatestCommonPrefix( "AA_/_abc_/_def", 0.07 );
706 res9.addGreatestCommonPrefix( "AA_/_abc_/_sfc", 0.6 );
707 res9.addGreatestCommonPrefix( "AA_/_abc_/_xcd", 0.01 );
708 res9.addGreatestCommonPrefix( "AA_/_abc_/_memr", 0.01 );
709 res9.addGreatestCommonPrefix( "AA_/_abc_/_fkem_/_odem", 0.01 );
710 res9.addGreatestCommonPrefix( "BB_/_fke_/_dme_/_nx2", 0.3 );
711 res9.analyzeGreatestCommonPrefixes( 0.3 );
712 System.out.print( res9.toString());
713 System.out.println( "------------------------- ");
714 System.out.println();
716 catch ( final Exception e ) {
717 e.printStackTrace( System.out );
723 private static boolean testCladeAnalysis4() {
725 final File intreefile1 = new File( PATH_TO_TEST_DATA + "pplacer_2.tre" );
726 final PhylogenyFactory factory = ParserBasedPhylogenyFactory.getInstance();
727 final PhylogenyParser pp = ParserUtils.createParserDependingOnFileType( intreefile1, true );
728 final Phylogeny p1 = factory.create( intreefile1, pp )[ 0 ];
729 Pattern query = Pattern.compile(".+#\\d+_M=(.+)");
730 Result2 res = Analysis2.execute( p1, query, "." );
732 res.analyzeGreatestCommonPrefixes( 0.3 );
733 System.out.print( res.toString());
734 System.out.println( "------------------------- ");
735 System.out.println();
737 // Result res = Analysis.execute( p1, "A.1.1.1", "." );
738 /* if ( !res.getGreatestCommonPrefix().equals( "A.1" ) ) {
741 if ( !res.getGreatestCommonPrefixDown().equals( "A.1.1" ) ) {
744 if ( !res.getGreatestCommonPrefixUp().equals( "A.1.2.1" ) ) {
747 if ( res.getLeastEncompassingCladeSize() != 4 ) {
750 if ( res.getTreeSize() != 25 ) {
753 if ( res.getWarnings().size() != 0 ) {
758 catch ( final Exception e ) {
759 e.printStackTrace( System.out );