in progress...
[jalview.git] / forester / java / src / org / forester / clade_analysis / CladeAnalysisTest.java
1
2 package org.forester.clade_analysis;
3
4 import java.io.File;
5 import java.util.List;
6
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;
13
14 public class CladeAnalysisTest {
15
16     private final static String PATH_TO_TEST_DATA = System.getProperty( "user.dir" ) + ForesterUtil.getFileSeparator()
17             + "test_data" + ForesterUtil.getFileSeparator();
18
19     public static void main( final String[] args ) {
20         boolean failed = false;
21         if ( !testCladeAnalysis1() ) {
22             System.out.println( "Clade analysis 1 failed" );
23             failed = true;
24         }
25         if ( !testCladeAnalysis2() ) {
26             System.out.println( "Clade analysis 2 failed" );
27             failed = true;
28         }
29         if ( !testCladeAnalysis3() ) {
30             System.out.println( "Clade analysis 3 failed" );
31             failed = true;
32         }
33         if ( !failed ) {
34             System.out.println( "OK" );
35         }
36     }
37
38     public static boolean test() {
39         if ( !testCladeAnalysis1() ) {
40             return false;
41         }
42         if ( !testCladeAnalysis2() ) {
43             return false;
44         }
45         if ( !testCladeAnalysis3() ) {
46             return false;
47         }
48         return true;
49     }
50
51     private static boolean testCladeAnalysis1() {
52         try {
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" ) ) {
59                 return false;
60             }
61             if ( !res.getGreatestCommonPrefixDown().equals( "A.1.1" ) ) {
62                 return false;
63             }
64             if ( !res.getGreatestCommonPrefixUp().equals( "A.1.2.1" ) ) {
65                 return false;
66             }
67             if ( res.getLeastEncompassingCladeSize() != 4 ) {
68                 return false;
69             }
70             if ( res.getTreeSize() != 25 ) {
71                 return false;
72             }
73             if ( res.getWarnings().size() != 0 ) {
74                 return false;
75             }
76             res = Analysis.execute( p1, "A.1.1.2", "." );
77             if ( !res.getGreatestCommonPrefix().equals( "A.1" ) ) {
78                 return false;
79             }
80             if ( !res.getGreatestCommonPrefixDown().equals( "A.1.1" ) ) {
81                 return false;
82             }
83             if ( !res.getGreatestCommonPrefixUp().equals( "A.1.2.1" ) ) {
84                 return false;
85             }
86             if ( res.getLeastEncompassingCladeSize() != 4 ) {
87                 return false;
88             }
89             if ( res.getTreeSize() != 25 ) {
90                 return false;
91             }
92             if ( res.getWarnings().size() != 0 ) {
93                 return false;
94             }
95             res = Analysis.execute( p1, "A.1.1.3", "." );
96             if ( !res.getGreatestCommonPrefix().equals( "A.1" ) ) {
97                 return false;
98             }
99             if ( !res.getGreatestCommonPrefixDown().equals( "A.1.1" ) ) {
100                 return false;
101             }
102             if ( !res.getGreatestCommonPrefixUp().equals( "A.1.2.1" ) ) {
103                 return false;
104             }
105             if ( res.getLeastEncompassingCladeSize() != 4 ) {
106                 return false;
107             }
108             if ( res.getTreeSize() != 25 ) {
109                 return false;
110             }
111             if ( res.getWarnings().size() != 0 ) {
112                 return false;
113             }
114             res = Analysis.execute( p1, "A.1.1.4", "." );
115             if ( !res.getGreatestCommonPrefix().equals( "A.1.1" ) ) {
116                 return false;
117             }
118             if ( !res.getGreatestCommonPrefixDown().equals( "A.1.1" ) ) {
119                 return false;
120             }
121             if ( !res.getGreatestCommonPrefixUp().equals( "A.1.1" ) ) {
122                 return false;
123             }
124             if ( res.getLeastEncompassingCladeSize() != 3 ) {
125                 return false;
126             }
127             if ( res.getTreeSize() != 25 ) {
128                 return false;
129             }
130             if ( res.getWarnings().size() != 0 ) {
131                 return false;
132             }
133             res = Analysis.execute( p1, "A.1.2.1", "." );
134             if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
135                 return false;
136             }
137             if ( !res.getGreatestCommonPrefixDown().equals( "A.1.1" ) ) {
138                 return false;
139             }
140             if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
141                 return false;
142             }
143             if ( res.getLeastEncompassingCladeSize() != 17 ) {
144                 return false;
145             }
146             if ( res.getTreeSize() != 25 ) {
147                 return false;
148             }
149             if ( res.getWarnings().size() != 0 ) {
150                 return false;
151             }
152             res = Analysis.execute( p1, "A.2.1.1", "." );
153             if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
154                 return false;
155             }
156             if ( !res.getGreatestCommonPrefixDown().equals( "A.2.1.2" ) ) {
157                 return false;
158             }
159             if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
160                 return false;
161             }
162             if ( res.getLeastEncompassingCladeSize() != 17 ) {
163                 return false;
164             }
165             if ( res.getTreeSize() != 25 ) {
166                 return false;
167             }
168             if ( res.getWarnings().size() != 0 ) {
169                 return false;
170             }
171             res = Analysis.execute( p1, "A.2.1.2", "." );
172             if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
173                 return false;
174             }
175             if ( !res.getGreatestCommonPrefixDown().equals( "A.2.1.1" ) ) {
176                 return false;
177             }
178             if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
179                 return false;
180             }
181             if ( res.getLeastEncompassingCladeSize() != 17 ) {
182                 return false;
183             }
184             if ( res.getTreeSize() != 25 ) {
185                 return false;
186             }
187             if ( res.getWarnings().size() != 0 ) {
188                 return false;
189             }
190             res = Analysis.execute( p1, "A.3.1.1", "." );
191             if ( !res.getGreatestCommonPrefix().equals( "A.3" ) ) {
192                 return false;
193             }
194             if ( !res.getGreatestCommonPrefixDown().equals( "A.3.1.2" ) ) {
195                 return false;
196             }
197             if ( !res.getGreatestCommonPrefixUp().equals( "A.3.2.1" ) ) {
198                 return false;
199             }
200             if ( res.getLeastEncompassingCladeSize() != 2 ) {
201                 return false;
202             }
203             if ( res.getTreeSize() != 25 ) {
204                 return false;
205             }
206             if ( res.getWarnings().size() != 0 ) {
207                 return false;
208             }
209             res = Analysis.execute( p1, "A.3.1.2", "." );
210             if ( !res.getGreatestCommonPrefix().equals( "A.3" ) ) {
211                 return false;
212             }
213             if ( !res.getGreatestCommonPrefixDown().equals( "A.3.1.1" ) ) {
214                 return false;
215             }
216             if ( !res.getGreatestCommonPrefixUp().equals( "A.3.2.1" ) ) {
217                 return false;
218             }
219             if ( res.getLeastEncompassingCladeSize() != 2 ) {
220                 return false;
221             }
222             if ( res.getTreeSize() != 25 ) {
223                 return false;
224             }
225             if ( res.getWarnings().size() != 0 ) {
226                 return false;
227             }
228             res = Analysis.execute( p1, "A.3.2.1", "." );
229             if ( !res.getGreatestCommonPrefix().equals( "A.3" ) ) {
230                 return false;
231             }
232             if ( !res.getGreatestCommonPrefixDown().equals( "A.3.1" ) ) {
233                 return false;
234             }
235             if ( !res.getGreatestCommonPrefixUp().equals( "A.3.3.1" ) ) {
236                 return false;
237             }
238             if ( res.getLeastEncompassingCladeSize() != 3 ) {
239                 return false;
240             }
241             if ( res.getTreeSize() != 25 ) {
242                 return false;
243             }
244             if ( res.getWarnings().size() != 0 ) {
245                 return false;
246             }
247             res = Analysis.execute( p1, "A.3.3.1", "." );
248             if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
249                 return false;
250             }
251             if ( !res.getGreatestCommonPrefixDown().equals( "A.3" ) ) {
252                 return false;
253             }
254             if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
255                 return false;
256             }
257             if ( res.getLeastEncompassingCladeSize() != 10 ) {
258                 return false;
259             }
260             if ( res.getTreeSize() != 25 ) {
261                 return false;
262             }
263             if ( res.getWarnings().size() != 0 ) {
264                 return false;
265             }
266             res = Analysis.execute( p1, "A.4.1.1", "." );
267             if ( !res.getGreatestCommonPrefix().equals( "A.4.1" ) ) {
268                 return false;
269             }
270             if ( !res.getGreatestCommonPrefixDown().equals( "A.4.1.1.a" ) ) {
271                 return false;
272             }
273             if ( !res.getGreatestCommonPrefixUp().equals( "A.4.1.2" ) ) {
274                 return false;
275             }
276             if ( res.getLeastEncompassingCladeSize() != 3 ) {
277                 return false;
278             }
279             if ( res.getTreeSize() != 25 ) {
280                 return false;
281             }
282             if ( res.getWarnings().size() != 0 ) {
283                 return false;
284             }
285             res = Analysis.execute( p1, "A.4.1.1.a", "." );
286             if ( !res.getGreatestCommonPrefix().equals( "A.4.1" ) ) {
287                 return false;
288             }
289             if ( !res.getGreatestCommonPrefixDown().equals( "A.4.1.1" ) ) {
290                 return false;
291             }
292             if ( !res.getGreatestCommonPrefixUp().equals( "A.4.1.2" ) ) {
293                 return false;
294             }
295             if ( res.getLeastEncompassingCladeSize() != 3 ) {
296                 return false;
297             }
298             if ( res.getTreeSize() != 25 ) {
299                 return false;
300             }
301             if ( res.getWarnings().size() != 0 ) {
302                 return false;
303             }
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" ) ) {
308                 return false;
309             }
310             if ( !res.getGreatestCommonPrefixDown().equals( "A.5.1.2" ) ) {
311                 return false;
312             }
313             if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
314                 return false;
315             }
316             if ( res.getLeastEncompassingCladeSize() != 10 ) {
317                 return false;
318             }
319             if ( res.getTreeSize() != 25 ) {
320                 return false;
321             }
322             if ( res.getWarnings().size() != 0 ) {
323                 return false;
324             }
325             res = Analysis.execute( p1, "A.5.1.2", "." );
326             if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
327                 return false;
328             }
329             if ( !res.getGreatestCommonPrefixDown().equals( "A.5.1.1" ) ) {
330                 return false;
331             }
332             if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
333                 return false;
334             }
335             if ( res.getLeastEncompassingCladeSize() != 10 ) {
336                 return false;
337             }
338             if ( res.getTreeSize() != 25 ) {
339                 return false;
340             }
341             if ( res.getWarnings().size() != 0 ) {
342                 return false;
343             }
344             res = Analysis.execute( p1, "A.6.3.12", "." );
345             if ( !res.getGreatestCommonPrefix().equals( "A" ) ) {
346                 return false;
347             }
348             if ( !res.getGreatestCommonPrefixDown().equals( "A" ) ) {
349                 return false;
350             }
351             if ( !res.getGreatestCommonPrefixUp().equals( "A" ) ) {
352                 return false;
353             }
354             if ( res.getLeastEncompassingCladeSize() != 17 ) {
355                 return false;
356             }
357             if ( res.getTreeSize() != 25 ) {
358                 return false;
359             }
360             if ( res.getWarnings().size() != 0 ) {
361                 return false;
362             }
363             res = Analysis.execute( p1, "B.1.1.1", "." );
364             if ( !res.getGreatestCommonPrefix().equals( "" ) ) {
365                 return false;
366             }
367             if ( !res.getGreatestCommonPrefixDown().equals( "B.1.234.3" ) ) {
368                 return false;
369             }
370             if ( !res.getGreatestCommonPrefixUp().equals( "" ) ) {
371                 return false;
372             }
373             if ( res.getLeastEncompassingCladeSize() != 25 ) {
374                 return false;
375             }
376             if ( res.getTreeSize() != 25 ) {
377                 return false;
378             }
379             if ( res.getWarnings().size() != 2 ) {
380                 return false;
381             }
382             res = Analysis.execute( p1, "B.1.234.3", "." );
383             if ( !res.getGreatestCommonPrefix().equals( "" ) ) {
384                 return false;
385             }
386             if ( !res.getGreatestCommonPrefixDown().equals( "B.1.1.1" ) ) {
387                 return false;
388             }
389             if ( !res.getGreatestCommonPrefixUp().equals( "" ) ) {
390                 return false;
391             }
392             if ( res.getLeastEncompassingCladeSize() != 25 ) {
393                 return false;
394             }
395             if ( res.getTreeSize() != 25 ) {
396                 return false;
397             }
398             if ( res.getWarnings().size() != 2 ) {
399                 return false;
400             }
401             res = Analysis.execute( p1, "C.1.1.1", "." );
402             if ( !res.getGreatestCommonPrefix().equals( "C.1" ) ) {
403                 return false;
404             }
405             if ( !res.getGreatestCommonPrefixDown().equals( "C.1.1.2" ) ) {
406                 return false;
407             }
408             if ( !res.getGreatestCommonPrefixUp().equals( "C.1.2.1" ) ) {
409                 return false;
410             }
411             if ( res.getLeastEncompassingCladeSize() != 2 ) {
412                 return false;
413             }
414             if ( res.getTreeSize() != 25 ) {
415                 return false;
416             }
417             if ( res.getWarnings().size() != 0 ) {
418                 return false;
419             }
420             res = Analysis.execute( p1, "C.1.1.2", "." );
421             if ( !res.getGreatestCommonPrefix().equals( "C.1" ) ) {
422                 return false;
423             }
424             if ( !res.getGreatestCommonPrefixDown().equals( "C.1.1.1" ) ) {
425                 return false;
426             }
427             if ( !res.getGreatestCommonPrefixUp().equals( "C.1.2.1" ) ) {
428                 return false;
429             }
430             if ( res.getLeastEncompassingCladeSize() != 2 ) {
431                 return false;
432             }
433             if ( res.getTreeSize() != 25 ) {
434                 return false;
435             }
436             if ( res.getWarnings().size() != 0 ) {
437                 return false;
438             }
439             res = Analysis.execute( p1, "C.1.2.1", "." );
440             if ( !res.getGreatestCommonPrefix().equals( "C" ) ) {
441                 return false;
442             }
443             if ( !res.getGreatestCommonPrefixDown().equals( "C.1.1" ) ) {
444                 return false;
445             }
446             if ( !res.getGreatestCommonPrefixUp().equals( "C.2.1" ) ) {
447                 return false;
448             }
449             if ( res.getLeastEncompassingCladeSize() != 3 ) {
450                 return false;
451             }
452             if ( res.getTreeSize() != 25 ) {
453                 return false;
454             }
455             if ( res.getWarnings().size() != 0 ) {
456                 return false;
457             }
458             res = Analysis.execute( p1, "C.2.1", "." );
459             if ( !res.getGreatestCommonPrefix().equals( "C" ) ) {
460                 return false;
461             }
462             if ( !res.getGreatestCommonPrefixDown().equals( "C.1" ) ) {
463                 return false;
464             }
465             if ( !res.getGreatestCommonPrefixUp().equals( "C.3" ) ) {
466                 return false;
467             }
468             if ( res.getLeastEncompassingCladeSize() != 4 ) {
469                 return false;
470             }
471             if ( res.getTreeSize() != 25 ) {
472                 return false;
473             }
474             if ( res.getWarnings().size() != 0 ) {
475                 return false;
476             }
477             res = Analysis.execute( p1, "C.3", "." );
478             if ( !res.getGreatestCommonPrefix().equals( "" ) ) {
479                 return false;
480             }
481             if ( !res.getGreatestCommonPrefixDown().equals( "C" ) ) {
482                 return false;
483             }
484             if ( !res.getGreatestCommonPrefixUp().equals( "QE.1.1.1.2.1" ) ) {
485                 return false;
486             }
487             if ( res.getLeastEncompassingCladeSize() != 5 ) {
488                 return false;
489             }
490             if ( res.getTreeSize() != 25 ) {
491                 return false;
492             }
493             if ( res.getWarnings().size() != 1 ) {
494                 return false;
495             }
496             res = Analysis.execute( p1, "QE.1.1.1.2.1", "." );
497             if ( !res.getGreatestCommonPrefix().equals( "" ) ) {
498                 return false;
499             }
500             if ( !res.getGreatestCommonPrefixDown().equals( "C" ) ) {
501                 return false;
502             }
503             if ( !res.getGreatestCommonPrefixUp().equals( "" ) ) {
504                 return false;
505             }
506             if ( res.getLeastEncompassingCladeSize() != 25 ) {
507                 return false;
508             }
509             if ( res.getTreeSize() != 25 ) {
510                 return false;
511             }
512             if ( res.getWarnings().size() != 2 ) {
513                 return false;
514             }
515         }
516         catch ( final Exception e ) {
517             e.printStackTrace( System.out );
518             return false;
519         }
520         return true;
521     }
522
523     private static boolean testCladeAnalysis2() {
524         try {
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_" ) ) {
531                 return false;
532             }
533             if ( !res.getGreatestCommonPrefixDown().equals( "6_DQ278893" ) ) {
534                 return false;
535             }
536             if ( !res.getGreatestCommonPrefixUp().equals( "6_JX183550" ) ) {
537                 return false;
538             }
539             if ( res.getLeastEncompassingCladeSize() != 2 ) {
540                 return false;
541             }
542             if ( res.getTreeSize() != 219 ) {
543                 return false;
544             }
545             if ( res.getWarnings().size() != 0 ) {
546                 return false;
547             }
548             res = Analysis.execute( p1, "6xa_EU408330", null );
549             if ( !res.getGreatestCommonPrefix().equals( "6xa_EU40833" ) ) {
550                 return false;
551             }
552             if ( !res.getGreatestCommonPrefixDown().equals( "6xa_EU408331" ) ) {
553                 return false;
554             }
555             if ( !res.getGreatestCommonPrefixUp().equals( "6xa_EU408332" ) ) {
556                 return false;
557             }
558             if ( res.getLeastEncompassingCladeSize() != 2 ) {
559                 return false;
560             }
561             if ( res.getTreeSize() != 219 ) {
562                 return false;
563             }
564             if ( res.getWarnings().size() != 0 ) {
565                 return false;
566             }
567             res = Analysis.execute( p1, "7a_EF108306", null );
568             if ( !res.getGreatestCommonPrefix().equals( "" ) ) {
569                 return false;
570             }
571             if ( !res.getGreatestCommonPrefixDown().equals( "2" ) ) {
572                 return false;
573             }
574             if ( !res.getGreatestCommonPrefixUp().equals( "" ) ) {
575                 return false;
576             }
577             if ( res.getLeastEncompassingCladeSize() != 219 ) {
578                 return false;
579             }
580             if ( res.getTreeSize() != 219 ) {
581                 return false;
582             }
583             if ( res.getWarnings().size() != 2 ) {
584                 return false;
585             }
586         }
587         catch ( final Exception e ) {
588             e.printStackTrace( System.out );
589             return false;
590         }
591         return true;
592     }
593     
594     private static boolean testCladeAnalysis3() {
595         try {
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           
602           List<String> x = ForesterUtil.spliIntoPrefixes( "A.1.2.3.4", "." );
603          // System.out.println( x );
604           x =ForesterUtil.spliIntoPrefixes( "A", "." );
605          // System.out.println( x );
606           
607           
608           res1.analyzeGreatestCommonPrefixes( "." );
609           
610           final Result2 res2 = new Result2();
611           res2.addGreatestCommonPrefix( "A.1.1.1", 0.1 );
612           res2.addGreatestCommonPrefix( "A.1", 0.7 );
613           res2.addGreatestCommonPrefix( "A.1.2", 0.1 );
614           res2.addGreatestCommonPrefix( "B.1", 0.1 );
615           res2.analyzeGreatestCommonPrefixes( "." );
616           
617           final Result2 res3 = new Result2();
618           res3.addGreatestCommonPrefix( "A.1.1.1", 0.7 );
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( "." );
623           
624           
625           final Result2 res4 = new Result2();
626           res4.addGreatestCommonPrefix( "A.1.1.1.1", 0.35);
627           res4.addGreatestCommonPrefix( "A.1.1.1.2", 0.35 );
628           res4.addGreatestCommonPrefix( "A.1", 0.1 );
629           res4.addGreatestCommonPrefix( "A.1.2", 0.1 );
630           res4.addGreatestCommonPrefix( "B.1", 0.1 );
631           res4.analyzeGreatestCommonPrefixes( "." );
632           
633           final Result2 res5 = new Result2();
634           res5.addGreatestCommonPrefix( "A.1.1.1.1", 0.2);
635           res5.addGreatestCommonPrefix( "C.2.3", 0.2 );
636           res5.addGreatestCommonPrefix( "A.1.5", 0.1 );
637           res5.addGreatestCommonPrefix( "A.3.1.4", 0.2 );
638           res5.addGreatestCommonPrefix( "B.1.1", 0.2 );
639           res5.addGreatestCommonPrefix( "B.1.2", 0.09 );
640           res5.addGreatestCommonPrefix( "D.1.1.1.1", 0.01 );
641           res5.analyzeGreatestCommonPrefixes( "." );
642         }
643         catch ( final Exception e ) {
644             e.printStackTrace( System.out );
645             return false;
646         }
647         return true;
648     }
649 }