in progress...
[jalview.git] / forester / java / src / org / forester / application / cladinator.java
index ddc1aef..69affd2 100644 (file)
@@ -30,9 +30,11 @@ import java.io.IOException;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.regex.Pattern;
 
-import org.forester.clade_analysis.Analysis;
-import org.forester.clade_analysis.Result;
+import org.forester.clade_analysis.AnalysisMulti;
+import org.forester.clade_analysis.Prefix;
+import org.forester.clade_analysis.ResultMulti;
 import org.forester.io.parsers.PhylogenyParser;
 import org.forester.io.parsers.util.ParserUtils;
 import org.forester.phylogeny.Phylogeny;
@@ -44,15 +46,15 @@ import org.forester.util.ForesterUtil;
 public final class cladinator {
 
     final static private String        PRG_NAME      = "cladinator";
-    final static private String        PRG_VERSION   = "0.101";
-    final static private String        PRG_DATE      = "170810";
+    final static private String        PRG_VERSION   = "0.100";
+    final static private String        PRG_DATE      = "170823";
     final static private String        PRG_DESC      = "clades within clades -- analysis of pplacer type outputs";
     final static private String        E_MAIL        = "phyloxml@gmail.com";
     final static private String        WWW           = "https://sites.google.com/site/cmzmasek/home/software/forester";
     final static private String        HELP_OPTION_1 = "help";
     final static private String        HELP_OPTION_2 = "h";
     final static private String        SEP_OPTION    = "s";
-    private final static DecimalFormat df2           = new DecimalFormat( ".##" );
+    private final static DecimalFormat df2           = new DecimalFormat( "0.0#" );
 
     public static void main( final String args[] ) {
         try {
@@ -75,14 +77,14 @@ public final class cladinator {
                 print_help();
                 System.exit( 0 );
             }
-            else if ( ( args.length != 2 && args.length != 3 ) ) {
+            else if ( ( ( args.length != 2 ) && ( args.length != 3 ) ) ) {
                 System.out.println();
                 System.out.println( "Wrong number of arguments." );
                 System.out.println();
                 print_help();
                 System.exit( -1 );
             }
-            final List<String> allowed_options = new ArrayList<String>();
+            final List<String> allowed_options = new ArrayList<>();
             allowed_options.add( SEP_OPTION );
             final String dissallowed_options = cla.validateAllowedOptionsAsString( allowed_options );
             if ( dissallowed_options.length() > 0 ) {
@@ -115,45 +117,44 @@ public final class cladinator {
                 System.out.println( "\nCould not read \"" + intreefile + "\" [" + e.getMessage() + "]\n" );
                 System.exit( -1 );
             }
-            final Result res = Analysis.execute( p, query, separator );
+            final Pattern pattern = Pattern.compile( query );
+            final ResultMulti res = AnalysisMulti.execute( p, pattern, separator, 0.5 );
             System.out.println();
             System.out.println( "Result:" );
             System.out.println( "Query                        : " + query );
-            System.out.print( "Greatest Common Prefix       : " + res.getGreatestCommonPrefix() );
-            if ( !ForesterUtil.isEmpty( res.getGreatestCommonPrefix() )
-                    && !ForesterUtil.isEmpty( res.getGreatestCommonCladeSubtreeConfidence() ) ) {
-                System.out.println( "\t(" + res.getGreatestCommonCladeSubtreeConfidence() + ")" );
-            }
-            else {
-                System.out.println();
-            }
-            System.out.print( "Greatest Common Prefix Up    : " + res.getGreatestCommonPrefixUp() );
-            if ( !ForesterUtil.isEmpty( res.getGreatestCommonPrefixUp() )
-                    && !ForesterUtil.isEmpty( res.getGreatestCommonCladeUpSubtreeConfidence() ) ) {
-                System.out.println( "\t(" + res.getGreatestCommonCladeUpSubtreeConfidence() + ")" );
-            }
-            else {
-                System.out.println();
-            }
-            System.out.print( "Greatest Common Prefix Down  : " + res.getGreatestCommonPrefixDown() );
-            if ( !ForesterUtil.isEmpty( res.getGreatestCommonPrefixDown() )
-                    && !ForesterUtil.isEmpty( res.getGreatestCommonCladeDownSubtreeConfidence() ) ) {
-                System.out.println( "\t(" + res.getGreatestCommonCladeDownSubtreeConfidence() + ")" );
+            ///////////////////
+            System.out.println( "Collapsed:" );
+            for( final Prefix prefix : res.getCollapsedMultiHitPrefixes() ) {
+                System.out.println( prefix );
+            }
+            if ( res.isHasSpecificMultiHitsPrefixes() ) {
+                System.out.println( "Specifics:" );
+                for( final Prefix prefix : res.getSpecificMultiHitPrefixes() ) {
+                    System.out.println( prefix );
+                }
+                System.out.println( "Collapsed With Specifics:" );
+                for( final Prefix prefix : res.getCollapsedMultiHitPrefixes() ) {
+                    System.out.println( prefix );
+                    for( final Prefix spec : res.getSpecificMultiHitPrefixes() ) {
+                        if ( spec.getPrefix().startsWith( prefix.getPrefix() ) ) {
+                            System.out.println( "    " + spec );
+                        }
+                    }
+                }
             }
-            else {
-                System.out.println();
+            if ( !ForesterUtil.isEmpty( res.getAllMultiHitPrefixesDown() ) ) {
+                System.out.println( "Collapsed Down:" );
+                for( final Prefix prefix : res.getCollapsedMultiHitPrefixesDown() ) {
+                    System.out.println( prefix );
+                }
             }
-            System.out.println( "Least Encompassing Clade size: " + res.getLeastEncompassingCladeSize()
-                    + " external nodes" );
-            final double lec_ratio = ( 100.0 * res.getLeastEncompassingCladeSize() ) / res.getTreeSize();
-            System.out.println( "Least Encompassing Clade size: " + df2.format( lec_ratio ) + "%" );
-            System.out.println( "Total tree size              : " + res.getTreeSize() + " external nodes" );
-            if ( res.getWarnings().size() > 0 ) {
-                System.out.println( "Warnings:" );
-                for( final String s : res.getWarnings() ) {
-                    System.out.println( s );
+            if ( !ForesterUtil.isEmpty( res.getAllMultiHitPrefixesUp() ) ) {
+                System.out.println( "Collapsed Up:" );
+                for( final Prefix prefix : res.getAllMultiHitPrefixesUp() ) {
+                    System.out.println( prefix );
                 }
             }
+            ///////////////////
             System.out.println();
         }
         catch ( final IllegalArgumentException e ) {