removed unneeded import
[jalview.git] / forester / java / src / org / forester / surfacing / SurfacingUtil.java
index c4f98d6..05a9101 100644 (file)
@@ -60,7 +60,6 @@ import org.forester.evoinference.matrix.character.CharacterStateMatrix;
 import org.forester.evoinference.matrix.character.CharacterStateMatrix.BinaryStates;
 import org.forester.evoinference.matrix.character.CharacterStateMatrix.Format;
 import org.forester.evoinference.matrix.character.CharacterStateMatrix.GainLossStates;
-import org.forester.evoinference.matrix.distance.BasicSymmetricalDistanceMatrix;
 import org.forester.evoinference.matrix.distance.DistanceMatrix;
 import org.forester.go.GoId;
 import org.forester.go.GoNameSpace;
@@ -85,9 +84,9 @@ import org.forester.protein.BinaryDomainCombination;
 import org.forester.protein.Domain;
 import org.forester.protein.Protein;
 import org.forester.species.Species;
+import org.forester.surfacing.DomainSimilarity.PRINT_OPTION;
 import org.forester.surfacing.DomainSimilarityCalculator.Detailedness;
 import org.forester.surfacing.GenomeWideCombinableDomains.GenomeWideCombinableDomainsSortOrder;
-import org.forester.surfacing.PrintableDomainSimilarity.PRINT_OPTION;
 import org.forester.util.AsciiHistogram;
 import org.forester.util.BasicDescriptiveStatistics;
 import org.forester.util.BasicTable;
@@ -96,6 +95,7 @@ import org.forester.util.CommandLineArguments;
 import org.forester.util.DescriptiveStatistics;
 import org.forester.util.ForesterUtil;
 import org.forester.util.TaxonomyColors;
+import org.forester.util.TaxonomyGroups;
 
 public final class SurfacingUtil {
 
@@ -107,13 +107,13 @@ public final class SurfacingUtil {
                                                                                   @Override
                                                                                   public int compare( final Domain d1,
                                                                                                       final Domain d2 ) {
-                                                                                      if ( d1.getPerSequenceEvalue() < d2
-                                                                                              .getPerSequenceEvalue() ) {
+                                                                                      if ( d1.getPerDomainEvalue() < d2
+                                                                                              .getPerDomainEvalue() ) {
                                                                                           return -1;
                                                                                       }
                                                                                       else if ( d1
-                                                                                              .getPerSequenceEvalue() > d2
-                                                                                              .getPerSequenceEvalue() ) {
+                                                                                              .getPerDomainEvalue() > d2
+                                                                                                      .getPerDomainEvalue() ) {
                                                                                           return 1;
                                                                                       }
                                                                                       else {
@@ -143,9 +143,9 @@ public final class SurfacingUtil {
         }
     }
 
-    public static DescriptiveStatistics calculateDescriptiveStatisticsForMeanValues( final Set<PrintableDomainSimilarity> similarities ) {
+    public static DescriptiveStatistics calculateDescriptiveStatisticsForMeanValues( final Set<DomainSimilarity> similarities ) {
         final DescriptiveStatistics stats = new BasicDescriptiveStatistics();
-        for( final PrintableDomainSimilarity similarity : similarities ) {
+        for( final DomainSimilarity similarity : similarities ) {
             stats.addValue( similarity.getMeanSimilarityScore() );
         }
         return stats;
@@ -158,7 +158,7 @@ public final class SurfacingUtil {
         }
     }
 
-    public static void checkWriteabilityForPairwiseComparisons( final PrintableDomainSimilarity.PRINT_OPTION domain_similarity_print_option,
+    public static void checkWriteabilityForPairwiseComparisons( final DomainSimilarity.PRINT_OPTION domain_similarity_print_option,
                                                                 final String[][] input_file_properties,
                                                                 final String automated_pairwise_comparison_suffix,
                                                                 final File outdir ) {
@@ -176,8 +176,8 @@ public final class SurfacingUtil {
                         break;
                 }
                 final String error = ForesterUtil
-                        .isWritableFile( new File( outdir == null ? pairwise_similarities_output_file_str : outdir
-                                + ForesterUtil.FILE_SEPARATOR + pairwise_similarities_output_file_str ) );
+                        .isWritableFile( new File( outdir == null ? pairwise_similarities_output_file_str
+                                : outdir + ForesterUtil.FILE_SEPARATOR + pairwise_similarities_output_file_str ) );
                 if ( !ForesterUtil.isEmpty( error ) ) {
                     ForesterUtil.fatalError( surfacing.PRG_NAME, error );
                 }
@@ -196,18 +196,19 @@ public final class SurfacingUtil {
         for( final String id : sorted_ids ) {
             for( int c = 0; c < matrix.getNumberOfCharacters(); ++c ) {
                 if ( ( get_gains && ( matrix.getState( id, c ) == CharacterStateMatrix.GainLossStates.GAIN ) )
-                        || ( !get_gains && ( matrix.getState( id, c ) == CharacterStateMatrix.GainLossStates.LOSS ) ) ) {
+                        || ( !get_gains
+                                && ( matrix.getState( id, c ) == CharacterStateMatrix.GainLossStates.LOSS ) ) ) {
                     if ( dc_type == BinaryDomainCombination.DomainCombinationType.DIRECTED_ADJACTANT ) {
                         all_binary_domains_combination_gained.add( AdjactantDirectedBinaryDomainCombination
-                                .createInstance( matrix.getCharacter( c ) ) );
+                                .obtainInstance( matrix.getCharacter( c ) ) );
                     }
                     else if ( dc_type == BinaryDomainCombination.DomainCombinationType.DIRECTED ) {
-                        all_binary_domains_combination_gained.add( DirectedBinaryDomainCombination
-                                .createInstance( matrix.getCharacter( c ) ) );
+                        all_binary_domains_combination_gained
+                                .add( DirectedBinaryDomainCombination.obtainInstance( matrix.getCharacter( c ) ) );
                     }
                     else {
-                        all_binary_domains_combination_gained.add( BasicBinaryDomainCombination.createInstance( matrix
-                                .getCharacter( c ) ) );
+                        all_binary_domains_combination_gained
+                                .add( BasicBinaryDomainCombination.obtainInstance( matrix.getCharacter( c ) ) );
                     }
                 }
             }
@@ -215,7 +216,8 @@ public final class SurfacingUtil {
     }
 
     public static Map<String, List<GoId>> createDomainIdToGoIdMap( final List<PfamToGoMapping> pfam_to_go_mappings ) {
-        final Map<String, List<GoId>> domain_id_to_go_ids_map = new HashMap<String, List<GoId>>( pfam_to_go_mappings.size() );
+        final Map<String, List<GoId>> domain_id_to_go_ids_map = new HashMap<String, List<GoId>>( pfam_to_go_mappings
+                .size() );
         for( final PfamToGoMapping pfam_to_go : pfam_to_go_mappings ) {
             if ( !domain_id_to_go_ids_map.containsKey( pfam_to_go.getKey() ) ) {
                 domain_id_to_go_ids_map.put( pfam_to_go.getKey(), new ArrayList<GoId>() );
@@ -239,23 +241,26 @@ public final class SurfacingUtil {
         return map;
     }
 
-    public static Phylogeny createNjTreeBasedOnMatrixToFile( final File nj_tree_outfile, final DistanceMatrix distance ) {
+    public static Phylogeny createNjTreeBasedOnMatrixToFile( final File nj_tree_outfile,
+                                                             final DistanceMatrix distance ) {
         checkForOutputFileWriteability( nj_tree_outfile );
         final NeighborJoining nj = NeighborJoining.createInstance();
-        final Phylogeny phylogeny = nj.execute( ( BasicSymmetricalDistanceMatrix ) distance );
+        final Phylogeny phylogeny = nj.execute( ( DistanceMatrix ) distance );
         phylogeny.setName( nj_tree_outfile.getName() );
         writePhylogenyToFile( phylogeny, nj_tree_outfile.toString() );
         return phylogeny;
     }
 
     public static StringBuilder createParametersAsString( final boolean ignore_dufs,
-                                                          final double e_value_max,
+                                                          final double ie_value_max,
+                                                          final double fs_e_value_max,
                                                           final int max_allowed_overlap,
                                                           final boolean no_engulfing_overlaps,
                                                           final File cutoff_scores_file,
                                                           final BinaryDomainCombination.DomainCombinationType dc_type ) {
         final StringBuilder parameters_sb = new StringBuilder();
-        parameters_sb.append( "E-value: " + e_value_max );
+        parameters_sb.append( "iE-value: " + ie_value_max );
+        parameters_sb.append( ", FS E-value: " + fs_e_value_max );
         if ( cutoff_scores_file != null ) {
             parameters_sb.append( ", Cutoff-scores-file: " + cutoff_scores_file );
         }
@@ -286,61 +291,89 @@ public final class SurfacingUtil {
 
     public static void createSplitWriters( final File out_dir,
                                            final String my_outfile,
-                                           final Map<Character, Writer> split_writers ) throws IOException {
-        split_writers.put( 'a', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_A.html" ) ) );
-        split_writers.put( 'b', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_B.html" ) ) );
-        split_writers.put( 'c', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_C.html" ) ) );
-        split_writers.put( 'd', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_D.html" ) ) );
-        split_writers.put( 'e', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_E.html" ) ) );
-        split_writers.put( 'f', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_F.html" ) ) );
-        split_writers.put( 'g', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_G.html" ) ) );
-        split_writers.put( 'h', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_H.html" ) ) );
-        split_writers.put( 'i', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_I.html" ) ) );
-        split_writers.put( 'j', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_J.html" ) ) );
-        split_writers.put( 'k', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_K.html" ) ) );
-        split_writers.put( 'l', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_L.html" ) ) );
-        split_writers.put( 'm', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_M.html" ) ) );
-        split_writers.put( 'n', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_N.html" ) ) );
-        split_writers.put( 'o', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_O.html" ) ) );
-        split_writers.put( 'p', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_P.html" ) ) );
-        split_writers.put( 'q', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_Q.html" ) ) );
-        split_writers.put( 'r', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_R.html" ) ) );
-        split_writers.put( 's', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_S.html" ) ) );
-        split_writers.put( 't', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_T.html" ) ) );
-        split_writers.put( 'u', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_U.html" ) ) );
-        split_writers.put( 'v', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_V.html" ) ) );
-        split_writers.put( 'w', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_W.html" ) ) );
-        split_writers.put( 'x', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_X.html" ) ) );
-        split_writers.put( 'y', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_Y.html" ) ) );
-        split_writers.put( 'z', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_Z.html" ) ) );
-        split_writers.put( '0', new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
-                + "_domains_0.html" ) ) );
+                                           final Map<Character, Writer> split_writers )
+            throws IOException {
+        split_writers.put( 'a',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_A.html" ) ) );
+        split_writers.put( 'b',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_B.html" ) ) );
+        split_writers.put( 'c',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_C.html" ) ) );
+        split_writers.put( 'd',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_D.html" ) ) );
+        split_writers.put( 'e',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_E.html" ) ) );
+        split_writers.put( 'f',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_F.html" ) ) );
+        split_writers.put( 'g',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_G.html" ) ) );
+        split_writers.put( 'h',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_H.html" ) ) );
+        split_writers.put( 'i',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_I.html" ) ) );
+        split_writers.put( 'j',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_J.html" ) ) );
+        split_writers.put( 'k',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_K.html" ) ) );
+        split_writers.put( 'l',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_L.html" ) ) );
+        split_writers.put( 'm',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_M.html" ) ) );
+        split_writers.put( 'n',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_N.html" ) ) );
+        split_writers.put( 'o',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_O.html" ) ) );
+        split_writers.put( 'p',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_P.html" ) ) );
+        split_writers.put( 'q',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_Q.html" ) ) );
+        split_writers.put( 'r',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_R.html" ) ) );
+        split_writers.put( 's',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_S.html" ) ) );
+        split_writers.put( 't',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_T.html" ) ) );
+        split_writers.put( 'u',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_U.html" ) ) );
+        split_writers.put( 'v',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_V.html" ) ) );
+        split_writers.put( 'w',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_W.html" ) ) );
+        split_writers.put( 'x',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_X.html" ) ) );
+        split_writers.put( 'y',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_Y.html" ) ) );
+        split_writers.put( 'z',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_Z.html" ) ) );
+        split_writers.put( '0',
+                           new BufferedWriter( new FileWriter( out_dir + ForesterUtil.FILE_SEPARATOR + my_outfile
+                                   + "_domains_0.html" ) ) );
     }
 
     public static Map<String, Integer> createTaxCodeToIdMap( final Phylogeny phy ) {
@@ -375,11 +408,11 @@ public final class SurfacingUtil {
         return m;
     }
 
-    public static void decoratePrintableDomainSimilarities( final SortedSet<PrintableDomainSimilarity> domain_similarities,
+    public static void decoratePrintableDomainSimilarities( final SortedSet<DomainSimilarity> domain_similarities,
                                                             final Detailedness detailedness ) {
-        for( final PrintableDomainSimilarity domain_similarity : domain_similarities ) {
-            if ( domain_similarity instanceof PrintableDomainSimilarity ) {
-                final PrintableDomainSimilarity printable_domain_similarity = domain_similarity;
+        for( final DomainSimilarity domain_similarity : domain_similarities ) {
+            if ( domain_similarity instanceof DomainSimilarity ) {
+                final DomainSimilarity printable_domain_similarity = domain_similarity;
                 printable_domain_similarity.setDetailedness( detailedness );
             }
         }
@@ -390,7 +423,8 @@ public final class SurfacingUtil {
                              final Writer out,
                              final String separator,
                              final String limit_to_species,
-                             final Map<String, List<Integer>> average_protein_lengths_by_dc ) throws IOException {
+                             final Map<String, List<Integer>> average_protein_lengths_by_dc )
+            throws IOException {
         for( final Protein protein : proteins ) {
             if ( ForesterUtil.isEmpty( limit_to_species )
                     || protein.getSpecies().getSpeciesId().equalsIgnoreCase( limit_to_species ) ) {
@@ -419,13 +453,13 @@ public final class SurfacingUtil {
                     }
                     out.write( "]" );
                     out.write( separator );
-                    if ( !( ForesterUtil.isEmpty( protein.getDescription() ) || protein.getDescription()
-                            .equals( SurfacingConstants.NONE ) ) ) {
+                    if ( !( ForesterUtil.isEmpty( protein.getDescription() )
+                            || protein.getDescription().equals( SurfacingConstants.NONE ) ) ) {
                         out.write( protein.getDescription() );
                     }
                     out.write( separator );
-                    if ( !( ForesterUtil.isEmpty( protein.getAccession() ) || protein.getAccession()
-                            .equals( SurfacingConstants.NONE ) ) ) {
+                    if ( !( ForesterUtil.isEmpty( protein.getAccession() )
+                            || protein.getAccession().equals( SurfacingConstants.NONE ) ) ) {
                         out.write( protein.getAccession() );
                     }
                     out.write( SurfacingConstants.NL );
@@ -523,7 +557,8 @@ public final class SurfacingUtil {
     public static void executeDomainLengthAnalysis( final String[][] input_file_properties,
                                                     final int number_of_genomes,
                                                     final DomainLengthsTable domain_lengths_table,
-                                                    final File outfile ) throws IOException {
+                                                    final File outfile )
+            throws IOException {
         final DecimalFormat df = new DecimalFormat( "#.00" );
         checkForOutputFileWriteability( outfile );
         final BufferedWriter out = new BufferedWriter( new FileWriter( outfile ) );
@@ -581,21 +616,22 @@ public final class SurfacingUtil {
 
     /**
      * Warning: This side-effects 'all_bin_domain_combinations_encountered'!
-     * 
-     * 
+     *
+     *
      * @param output_file
      * @param all_bin_domain_combinations_changed
      * @param sum_of_all_domains_encountered
      * @param all_bin_domain_combinations_encountered
      * @param is_gains_analysis
-     * @param protein_length_stats_by_dc 
+     * @param protein_length_stats_by_dc
      * @throws IOException
      */
     public static void executeFitchGainsAnalysis( final File output_file,
                                                   final List<BinaryDomainCombination> all_bin_domain_combinations_changed,
                                                   final int sum_of_all_domains_encountered,
                                                   final SortedSet<BinaryDomainCombination> all_bin_domain_combinations_encountered,
-                                                  final boolean is_gains_analysis ) throws IOException {
+                                                  final boolean is_gains_analysis )
+            throws IOException {
         checkForOutputFileWriteability( output_file );
         final Writer out = ForesterUtil.createBufferedWriter( output_file );
         final SortedMap<Object, Integer> bdc_to_counts = ForesterUtil
@@ -658,16 +694,17 @@ public final class SurfacingUtil {
         out.write( "All domains                                                          : "
                 + sum_of_all_domains_encountered );
         out.close();
-        ForesterUtil.programMessage( surfacing.PRG_NAME,
-                                     "Wrote fitch domain combination dynamics counts analysis to \"" + output_file
-                                             + "\"" );
+        ForesterUtil
+                .programMessage( surfacing.PRG_NAME,
+                                 "Wrote fitch domain combination dynamics counts analysis to \"" + output_file + "\"" );
     }
 
     /**
-     * 
-     * @param all_binary_domains_combination_lost_fitch 
-     * @param use_last_in_fitch_parsimony 
-     * @param consider_directedness_and_adjacency_for_bin_combinations 
+     *
+     * @param all_binary_domains_combination_lost_fitch
+     * @param use_last_in_fitch_parsimony
+     * @param perform_dc_fich
+     * @param consider_directedness_and_adjacency_for_bin_combinations
      * @param all_binary_domains_combination_gained if null ignored, otherwise this is to list all binary domain combinations
      * which were gained under unweighted (Fitch) parsimony.
      */
@@ -691,7 +728,8 @@ public final class SurfacingUtil {
                                                  final Map<String, DescriptiveStatistics> domain_length_stats_by_domain,
                                                  final Map<String, Integer> tax_code_to_id_map,
                                                  final boolean write_to_nexus,
-                                                 final boolean use_last_in_fitch_parsimony ) {
+                                                 final boolean use_last_in_fitch_parsimony,
+                                                 final boolean perform_dc_fich ) {
         final String sep = ForesterUtil.LINE_SEPARATOR + "###################" + ForesterUtil.LINE_SEPARATOR;
         final String date_time = ForesterUtil.getCurrentDateTime();
         final SortedSet<String> all_pfams_encountered = new TreeSet<String>();
@@ -711,10 +749,12 @@ public final class SurfacingUtil {
         else {
             domain_parsimony.executeDolloParsimonyOnDomainPresence();
         }
-        SurfacingUtil.writeMatrixToFile( domain_parsimony.getGainLossMatrix(), outfile_name
-                + surfacing.PARSIMONY_OUTPUT_GL_SUFFIX_DOLLO_DOMAINS, Format.FORESTER );
-        SurfacingUtil.writeMatrixToFile( domain_parsimony.getGainLossCountsMatrix(), outfile_name
-                + surfacing.PARSIMONY_OUTPUT_GL_COUNTS_SUFFIX_DOLLO_DOMAINS, Format.FORESTER );
+        SurfacingUtil.writeMatrixToFile( domain_parsimony.getGainLossMatrix(),
+                                         outfile_name + surfacing.PARSIMONY_OUTPUT_GL_SUFFIX_DOLLO_DOMAINS,
+                                         Format.FORESTER );
+        SurfacingUtil.writeMatrixToFile( domain_parsimony.getGainLossCountsMatrix(),
+                                         outfile_name + surfacing.PARSIMONY_OUTPUT_GL_COUNTS_SUFFIX_DOLLO_DOMAINS,
+                                         Format.FORESTER );
         SurfacingUtil.writeBinaryStatesMatrixAsListToFile( domain_parsimony.getGainLossMatrix(),
                                                            CharacterStateMatrix.GainLossStates.GAIN,
                                                            outfile_name + surfacing.PARSIMONY_OUTPUT_DOLLO_GAINS_D,
@@ -727,8 +767,12 @@ public final class SurfacingUtil {
                                                            sep,
                                                            ForesterUtil.LINE_SEPARATOR,
                                                            null );
-        SurfacingUtil.writeBinaryStatesMatrixAsListToFile( domain_parsimony.getGainLossMatrix(), null, outfile_name
-                + surfacing.PARSIMONY_OUTPUT_DOLLO_PRESENT_D, sep, ForesterUtil.LINE_SEPARATOR, null );
+        SurfacingUtil.writeBinaryStatesMatrixAsListToFile( domain_parsimony.getGainLossMatrix(),
+                                                           null,
+                                                           outfile_name + surfacing.PARSIMONY_OUTPUT_DOLLO_PRESENT_D,
+                                                           sep,
+                                                           ForesterUtil.LINE_SEPARATOR,
+                                                           null );
         //HTML:
         writeBinaryStatesMatrixToList( domain_id_to_go_ids_map,
                                        go_id_to_term_map,
@@ -762,30 +806,30 @@ public final class SurfacingUtil {
                                        all_pfams_lost_as_domains,
                                        "_dollo_losses_d",
                                        tax_code_to_id_map );
-        //        writeBinaryStatesMatrixToList( domain_id_to_go_ids_map,
-        //                                       go_id_to_term_map,
-        //                                       go_namespace_limit,
-        //                                       false,
-        //                                       domain_parsimony.getGainLossMatrix(),
-        //                                       null,
-        //                                       outfile_name + surfacing.PARSIMONY_OUTPUT_DOLLO_PRESENT_HTML_D,
-        //                                       sep,
-        //                                       ForesterUtil.LINE_SEPARATOR,
-        //                                       "Dollo Parsimony | Present | Domains",
-        //                                       "",
-        //                                       domain_id_to_secondary_features_maps,
-        //                                       all_pfams_encountered,
-        //                                       null,
-        //                                       "_dollo_present_d",
-        //                                       tax_code_to_id_map );
+        writeBinaryStatesMatrixToList( domain_id_to_go_ids_map,
+                                       go_id_to_term_map,
+                                       go_namespace_limit,
+                                       false,
+                                       domain_parsimony.getGainLossMatrix(),
+                                       null,
+                                       outfile_name + surfacing.PARSIMONY_OUTPUT_DOLLO_PRESENT_HTML_D,
+                                       sep,
+                                       ForesterUtil.LINE_SEPARATOR,
+                                       "Dollo Parsimony | Present | Domains",
+                                       "",
+                                       domain_id_to_secondary_features_maps,
+                                       all_pfams_encountered,
+                                       null,
+                                       "_dollo_present_d",
+                                       tax_code_to_id_map );
         preparePhylogeny( local_phylogeny_l,
                           domain_parsimony,
                           date_time,
                           "Dollo parsimony on domain presence/absence",
                           "dollo_on_domains_" + outfile_name,
                           parameters_str );
-        SurfacingUtil.writePhylogenyToFile( local_phylogeny_l, outfile_name
-                + surfacing.DOMAINS_PARSIMONY_TREE_OUTPUT_SUFFIX_DOLLO );
+        SurfacingUtil.writePhylogenyToFile( local_phylogeny_l,
+                                            outfile_name + surfacing.DOMAINS_PARSIMONY_TREE_OUTPUT_SUFFIX_DOLLO );
         try {
             writeAllDomainsChangedOnAllSubtrees( local_phylogeny_l, true, outfile_name, "_dollo_all_gains_d" );
             writeAllDomainsChangedOnAllSubtrees( local_phylogeny_l, false, outfile_name, "_dollo_all_losses_d" );
@@ -794,29 +838,33 @@ public final class SurfacingUtil {
             e.printStackTrace();
             ForesterUtil.fatalError( surfacing.PRG_NAME, e.getLocalizedMessage() );
         }
-        if ( domain_parsimony.calculateNumberOfBinaryDomainCombination() > 0 ) {
+        if ( perform_dc_fich && ( domain_parsimony.calculateNumberOfBinaryDomainCombination() > 0 ) ) {
             // FITCH DOMAIN COMBINATIONS
             // -------------------------
             local_phylogeny_l = phylogeny.copy();
             String randomization = "no";
             if ( radomize_fitch_parsimony ) {
-                domain_parsimony.executeFitchParsimonyOnBinaryDomainCombintion( random_number_seed_for_fitch_parsimony );
+                domain_parsimony
+                        .executeFitchParsimonyOnBinaryDomainCombintion( random_number_seed_for_fitch_parsimony );
                 randomization = "yes, seed = " + random_number_seed_for_fitch_parsimony;
             }
             else {
                 domain_parsimony.executeFitchParsimonyOnBinaryDomainCombintion( use_last_in_fitch_parsimony );
             }
-            SurfacingUtil.writeMatrixToFile( domain_parsimony.getGainLossMatrix(), outfile_name
-                    + surfacing.PARSIMONY_OUTPUT_GL_SUFFIX_FITCH_BINARY_COMBINATIONS, Format.FORESTER );
-            SurfacingUtil.writeMatrixToFile( domain_parsimony.getGainLossCountsMatrix(), outfile_name
-                    + surfacing.PARSIMONY_OUTPUT_GL_COUNTS_SUFFIX_FITCH_BINARY_COMBINATIONS, Format.FORESTER );
-            SurfacingUtil
-                    .writeBinaryStatesMatrixAsListToFile( domain_parsimony.getGainLossMatrix(),
-                                                          CharacterStateMatrix.GainLossStates.GAIN,
-                                                          outfile_name + surfacing.PARSIMONY_OUTPUT_FITCH_GAINS_BC,
-                                                          sep,
-                                                          ForesterUtil.LINE_SEPARATOR,
-                                                          null );
+            SurfacingUtil.writeMatrixToFile( domain_parsimony.getGainLossMatrix(),
+                                             outfile_name
+                                                     + surfacing.PARSIMONY_OUTPUT_GL_SUFFIX_FITCH_BINARY_COMBINATIONS,
+                                             Format.FORESTER );
+            SurfacingUtil.writeMatrixToFile( domain_parsimony.getGainLossCountsMatrix(),
+                                             outfile_name
+                                                     + surfacing.PARSIMONY_OUTPUT_GL_COUNTS_SUFFIX_FITCH_BINARY_COMBINATIONS,
+                                             Format.FORESTER );
+            SurfacingUtil.writeBinaryStatesMatrixAsListToFile( domain_parsimony.getGainLossMatrix(),
+                                                               CharacterStateMatrix.GainLossStates.GAIN,
+                                                               outfile_name + surfacing.PARSIMONY_OUTPUT_FITCH_GAINS_BC,
+                                                               sep,
+                                                               ForesterUtil.LINE_SEPARATOR,
+                                                               null );
             SurfacingUtil.writeBinaryStatesMatrixAsListToFile( domain_parsimony.getGainLossMatrix(),
                                                                CharacterStateMatrix.GainLossStates.LOSS,
                                                                outfile_name
@@ -824,30 +872,30 @@ public final class SurfacingUtil {
                                                                sep,
                                                                ForesterUtil.LINE_SEPARATOR,
                                                                null );
-            SurfacingUtil.writeBinaryStatesMatrixAsListToFile( domain_parsimony.getGainLossMatrix(), null, outfile_name
-                    + surfacing.PARSIMONY_OUTPUT_FITCH_PRESENT_BC, sep, ForesterUtil.LINE_SEPARATOR, null );
+            SurfacingUtil.writeBinaryStatesMatrixAsListToFile( domain_parsimony.getGainLossMatrix(),
+                                                               null,
+                                                               outfile_name
+                                                                       + surfacing.PARSIMONY_OUTPUT_FITCH_PRESENT_BC,
+                                                               sep,
+                                                               ForesterUtil.LINE_SEPARATOR,
+                                                               null );
             if ( all_binary_domains_combination_gained_fitch != null ) {
-                collectChangedDomainCombinationsFromBinaryStatesMatrixAsListToFile( domain_parsimony.getGainLossMatrix(),
-                                                                                    dc_type,
-                                                                                    all_binary_domains_combination_gained_fitch,
-                                                                                    true );
+                collectChangedDomainCombinationsFromBinaryStatesMatrixAsListToFile( domain_parsimony
+                        .getGainLossMatrix(), dc_type, all_binary_domains_combination_gained_fitch, true );
             }
             if ( all_binary_domains_combination_lost_fitch != null ) {
-                collectChangedDomainCombinationsFromBinaryStatesMatrixAsListToFile( domain_parsimony.getGainLossMatrix(),
-                                                                                    dc_type,
-                                                                                    all_binary_domains_combination_lost_fitch,
-                                                                                    false );
+                collectChangedDomainCombinationsFromBinaryStatesMatrixAsListToFile( domain_parsimony
+                        .getGainLossMatrix(), dc_type, all_binary_domains_combination_lost_fitch, false );
             }
             if ( output_binary_domain_combinations_for_graphs ) {
-                SurfacingUtil
-                        .writeBinaryStatesMatrixAsListToFileForBinaryCombinationsForGraphAnalysis( domain_parsimony
-                                                                                                           .getGainLossMatrix(),
-                                                                                                   null,
-                                                                                                   outfile_name
-                                                                                                           + surfacing.PARSIMONY_OUTPUT_FITCH_PRESENT_BC_OUTPUTFILE_SUFFIX_FOR_GRAPH_ANALYSIS,
-                                                                                                   sep,
-                                                                                                   ForesterUtil.LINE_SEPARATOR,
-                                                                                                   BinaryDomainCombination.OutputFormat.DOT );
+                SurfacingUtil.writeBinaryStatesMatrixAsListToFileForBinaryCombinationsForGraphAnalysis( domain_parsimony
+                        .getGainLossMatrix(),
+                                                                                                        null,
+                                                                                                        outfile_name
+                                                                                                                + surfacing.PARSIMONY_OUTPUT_FITCH_PRESENT_BC_OUTPUTFILE_SUFFIX_FOR_GRAPH_ANALYSIS,
+                                                                                                        sep,
+                                                                                                        ForesterUtil.LINE_SEPARATOR,
+                                                                                                        BinaryDomainCombination.OutputFormat.DOT );
             }
             // HTML:
             writeBinaryStatesMatrixToList( domain_id_to_go_ids_map,
@@ -902,11 +950,13 @@ public final class SurfacingUtil {
                                             go_id_to_term_map,
                                             outfile_name,
                                             all_pfams_encountered );
-            writePfamsToFile( outfile_name + surfacing.ALL_PFAMS_GAINED_AS_DOMAINS_SUFFIX, all_pfams_gained_as_domains );
+            writePfamsToFile( outfile_name + surfacing.ALL_PFAMS_GAINED_AS_DOMAINS_SUFFIX,
+                              all_pfams_gained_as_domains );
             writePfamsToFile( outfile_name + surfacing.ALL_PFAMS_LOST_AS_DOMAINS_SUFFIX, all_pfams_lost_as_domains );
             writePfamsToFile( outfile_name + surfacing.ALL_PFAMS_GAINED_AS_DC_SUFFIX,
                               all_pfams_gained_as_dom_combinations );
-            writePfamsToFile( outfile_name + surfacing.ALL_PFAMS_LOST_AS_DC_SUFFIX, all_pfams_lost_as_dom_combinations );
+            writePfamsToFile( outfile_name + surfacing.ALL_PFAMS_LOST_AS_DC_SUFFIX,
+                              all_pfams_lost_as_dom_combinations );
             preparePhylogeny( local_phylogeny_l,
                               domain_parsimony,
                               date_time,
@@ -914,8 +964,10 @@ public final class SurfacingUtil {
                                       + randomization,
                               "fitch_on_binary_domain_combinations_" + outfile_name,
                               parameters_str );
-            SurfacingUtil.writePhylogenyToFile( local_phylogeny_l, outfile_name
-                    + surfacing.BINARY_DOMAIN_COMBINATIONS_PARSIMONY_TREE_OUTPUT_SUFFIX_FITCH );
+            SurfacingUtil
+                    .writePhylogenyToFile( local_phylogeny_l,
+                                           outfile_name
+                                                   + surfacing.BINARY_DOMAIN_COMBINATIONS_PARSIMONY_TREE_OUTPUT_SUFFIX_FITCH );
             calculateIndependentDomainCombinationGains( local_phylogeny_l,
                                                         outfile_name
                                                                 + surfacing.INDEPENDENT_DC_GAINS_FITCH_PARS_COUNTS_OUTPUT_SUFFIX,
@@ -948,42 +1000,43 @@ public final class SurfacingUtil {
                       phylogeny );
         Phylogeny local_phylogeny_copy = phylogeny.copy();
         secondary_features_parsimony.executeDolloParsimonyOnSecondaryFeatures( mapping_results_map );
-        SurfacingUtil.writeMatrixToFile( secondary_features_parsimony.getGainLossMatrix(), outfile_name
-                + surfacing.PARSIMONY_OUTPUT_GL_SUFFIX_DOLLO_SECONDARY_FEATURES, Format.FORESTER );
-        SurfacingUtil.writeMatrixToFile( secondary_features_parsimony.getGainLossCountsMatrix(), outfile_name
-                + surfacing.PARSIMONY_OUTPUT_GL_COUNTS_SUFFIX_DOLLO_SECONDARY_FEATURES, Format.FORESTER );
-        SurfacingUtil
-                .writeBinaryStatesMatrixAsListToFile( secondary_features_parsimony.getGainLossMatrix(),
-                                                      CharacterStateMatrix.GainLossStates.GAIN,
-                                                      outfile_name
-                                                              + surfacing.PARSIMONY_OUTPUT_DOLLO_GAINS_SECONDARY_FEATURES,
-                                                      sep,
-                                                      ForesterUtil.LINE_SEPARATOR,
-                                                      null );
-        SurfacingUtil
-                .writeBinaryStatesMatrixAsListToFile( secondary_features_parsimony.getGainLossMatrix(),
-                                                      CharacterStateMatrix.GainLossStates.LOSS,
-                                                      outfile_name
-                                                              + surfacing.PARSIMONY_OUTPUT_DOLLO_LOSSES_SECONDARY_FEATURES,
-                                                      sep,
-                                                      ForesterUtil.LINE_SEPARATOR,
-                                                      null );
-        SurfacingUtil
-                .writeBinaryStatesMatrixAsListToFile( secondary_features_parsimony.getGainLossMatrix(),
-                                                      null,
-                                                      outfile_name
-                                                              + surfacing.PARSIMONY_OUTPUT_DOLLO_PRESENT_SECONDARY_FEATURES,
-                                                      sep,
-                                                      ForesterUtil.LINE_SEPARATOR,
-                                                      null );
+        SurfacingUtil.writeMatrixToFile( secondary_features_parsimony.getGainLossMatrix(),
+                                         outfile_name + surfacing.PARSIMONY_OUTPUT_GL_SUFFIX_DOLLO_SECONDARY_FEATURES,
+                                         Format.FORESTER );
+        SurfacingUtil.writeMatrixToFile( secondary_features_parsimony.getGainLossCountsMatrix(),
+                                         outfile_name
+                                                 + surfacing.PARSIMONY_OUTPUT_GL_COUNTS_SUFFIX_DOLLO_SECONDARY_FEATURES,
+                                         Format.FORESTER );
+        SurfacingUtil.writeBinaryStatesMatrixAsListToFile( secondary_features_parsimony.getGainLossMatrix(),
+                                                           CharacterStateMatrix.GainLossStates.GAIN,
+                                                           outfile_name
+                                                                   + surfacing.PARSIMONY_OUTPUT_DOLLO_GAINS_SECONDARY_FEATURES,
+                                                           sep,
+                                                           ForesterUtil.LINE_SEPARATOR,
+                                                           null );
+        SurfacingUtil.writeBinaryStatesMatrixAsListToFile( secondary_features_parsimony.getGainLossMatrix(),
+                                                           CharacterStateMatrix.GainLossStates.LOSS,
+                                                           outfile_name
+                                                                   + surfacing.PARSIMONY_OUTPUT_DOLLO_LOSSES_SECONDARY_FEATURES,
+                                                           sep,
+                                                           ForesterUtil.LINE_SEPARATOR,
+                                                           null );
+        SurfacingUtil.writeBinaryStatesMatrixAsListToFile( secondary_features_parsimony.getGainLossMatrix(),
+                                                           null,
+                                                           outfile_name
+                                                                   + surfacing.PARSIMONY_OUTPUT_DOLLO_PRESENT_SECONDARY_FEATURES,
+                                                           sep,
+                                                           ForesterUtil.LINE_SEPARATOR,
+                                                           null );
         preparePhylogeny( local_phylogeny_copy,
                           secondary_features_parsimony,
                           date_time,
                           "Dollo parsimony on secondary feature presence/absence",
                           "dollo_on_secondary_features_" + outfile_name,
                           parameters_str );
-        SurfacingUtil.writePhylogenyToFile( local_phylogeny_copy, outfile_name
-                + surfacing.SECONDARY_FEATURES_PARSIMONY_TREE_OUTPUT_SUFFIX_DOLLO );
+        SurfacingUtil
+                .writePhylogenyToFile( local_phylogeny_copy,
+                                       outfile_name + surfacing.SECONDARY_FEATURES_PARSIMONY_TREE_OUTPUT_SUFFIX_DOLLO );
         // FITCH DOMAIN COMBINATIONS
         // -------------------------
         local_phylogeny_copy = phylogeny.copy();
@@ -997,15 +1050,25 @@ public final class SurfacingUtil {
                                   + randomization,
                           "fitch_on_binary_domain_combinations_" + outfile_name,
                           parameters_str );
-        SurfacingUtil.writePhylogenyToFile( local_phylogeny_copy, outfile_name
-                + surfacing.BINARY_DOMAIN_COMBINATIONS_PARSIMONY_TREE_OUTPUT_SUFFIX_FITCH_MAPPED );
-        calculateIndependentDomainCombinationGains( local_phylogeny_copy, outfile_name
-                + surfacing.INDEPENDENT_DC_GAINS_FITCH_PARS_COUNTS_MAPPED_OUTPUT_SUFFIX, outfile_name
-                + surfacing.INDEPENDENT_DC_GAINS_FITCH_PARS_DC_MAPPED_OUTPUT_SUFFIX, outfile_name
-                + surfacing.INDEPENDENT_DC_GAINS_FITCH_PARS_DC_FOR_GO_MAPPING_MAPPED_OUTPUT_SUFFIX, outfile_name
-                + surfacing.INDEPENDENT_DC_GAINS_FITCH_PARS_DC_FOR_GO_MAPPING_MAPPED_OUTPUT_UNIQUE_SUFFIX, outfile_name
-                + "_MAPPED_indep_dc_gains_fitch_lca_ranks.txt", outfile_name
-                + "_MAPPED_indep_dc_gains_fitch_lca_taxonomies.txt", null, null, null, null );
+        SurfacingUtil
+                .writePhylogenyToFile( local_phylogeny_copy,
+                                       outfile_name
+                                               + surfacing.BINARY_DOMAIN_COMBINATIONS_PARSIMONY_TREE_OUTPUT_SUFFIX_FITCH_MAPPED );
+        calculateIndependentDomainCombinationGains( local_phylogeny_copy,
+                                                    outfile_name
+                                                            + surfacing.INDEPENDENT_DC_GAINS_FITCH_PARS_COUNTS_MAPPED_OUTPUT_SUFFIX,
+                                                    outfile_name
+                                                            + surfacing.INDEPENDENT_DC_GAINS_FITCH_PARS_DC_MAPPED_OUTPUT_SUFFIX,
+                                                    outfile_name
+                                                            + surfacing.INDEPENDENT_DC_GAINS_FITCH_PARS_DC_FOR_GO_MAPPING_MAPPED_OUTPUT_SUFFIX,
+                                                    outfile_name
+                                                            + surfacing.INDEPENDENT_DC_GAINS_FITCH_PARS_DC_FOR_GO_MAPPING_MAPPED_OUTPUT_UNIQUE_SUFFIX,
+                                                    outfile_name + "_MAPPED_indep_dc_gains_fitch_lca_ranks.txt",
+                                                    outfile_name + "_MAPPED_indep_dc_gains_fitch_lca_taxonomies.txt",
+                                                    null,
+                                                    null,
+                                                    null,
+                                                    null );
     }
 
     public static void executePlusMinusAnalysis( final File output_file,
@@ -1050,23 +1113,26 @@ public final class SurfacingUtil {
         catch ( final IOException e ) {
             ForesterUtil.fatalError( surfacing.PRG_NAME, e.getLocalizedMessage() );
         }
-        ForesterUtil.programMessage( surfacing.PRG_NAME, "Wrote plus minus domain analysis results to \""
-                + html_out_dom + "\"" );
-        ForesterUtil.programMessage( surfacing.PRG_NAME, "Wrote plus minus domain analysis results to \""
-                + plain_out_dom + "\"" );
-        ForesterUtil.programMessage( surfacing.PRG_NAME, "Wrote plus minus domain analysis results to \"" + html_out_dc
-                + "\"" );
-        ForesterUtil.programMessage( surfacing.PRG_NAME, "Wrote plus minus domain analysis based passing GO ids to \""
-                + passing_domains_go_ids_out_dom + "\"" );
-        ForesterUtil.programMessage( surfacing.PRG_NAME, "Wrote plus minus domain analysis based all GO ids to \""
-                + all_domains_go_ids_out_dom + "\"" );
+        ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                     "Wrote plus minus domain analysis results to \"" + html_out_dom + "\"" );
+        ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                     "Wrote plus minus domain analysis results to \"" + plain_out_dom + "\"" );
+        ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                     "Wrote plus minus domain analysis results to \"" + html_out_dc + "\"" );
+        ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                     "Wrote plus minus domain analysis based passing GO ids to \""
+                                             + passing_domains_go_ids_out_dom + "\"" );
+        ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                     "Wrote plus minus domain analysis based all GO ids to \""
+                                             + all_domains_go_ids_out_dom + "\"" );
     }
 
     public static void extractProteinNames( final List<Protein> proteins,
                                             final List<String> query_domain_ids_nc_order,
                                             final Writer out,
                                             final String separator,
-                                            final String limit_to_species ) throws IOException {
+                                            final String limit_to_species )
+            throws IOException {
         for( final Protein protein : proteins ) {
             if ( ForesterUtil.isEmpty( limit_to_species )
                     || protein.getSpecies().getSpeciesId().equalsIgnoreCase( limit_to_species ) ) {
@@ -1095,13 +1161,13 @@ public final class SurfacingUtil {
                     }
                     out.write( "]" );
                     out.write( separator );
-                    if ( !( ForesterUtil.isEmpty( protein.getDescription() ) || protein.getDescription()
-                            .equals( SurfacingConstants.NONE ) ) ) {
+                    if ( !( ForesterUtil.isEmpty( protein.getDescription() )
+                            || protein.getDescription().equals( SurfacingConstants.NONE ) ) ) {
                         out.write( protein.getDescription() );
                     }
                     out.write( separator );
-                    if ( !( ForesterUtil.isEmpty( protein.getAccession() ) || protein.getAccession()
-                            .equals( SurfacingConstants.NONE ) ) ) {
+                    if ( !( ForesterUtil.isEmpty( protein.getAccession() )
+                            || protein.getAccession().equals( SurfacingConstants.NONE ) ) ) {
                         out.write( protein.getAccession() );
                     }
                     out.write( SurfacingConstants.NL );
@@ -1116,7 +1182,8 @@ public final class SurfacingUtil {
                                             final Writer out,
                                             final String separator,
                                             final String limit_to_species,
-                                            final double domain_e_cutoff ) throws IOException {
+                                            final double domain_e_cutoff )
+            throws IOException {
         //System.out.println( "Per domain E-value: " + domain_e_cutoff );
         for( final Species species : protein_lists_per_species.keySet() ) {
             //System.out.println( species + ":" );
@@ -1170,13 +1237,13 @@ public final class SurfacingUtil {
                             out.write( ":" + domain.getPerDomainEvalue() );
                         }
                         out.write( "}" );
-                        if ( !( ForesterUtil.isEmpty( protein.getDescription() ) || protein.getDescription()
-                                .equals( SurfacingConstants.NONE ) ) ) {
+                        if ( !( ForesterUtil.isEmpty( protein.getDescription() )
+                                || protein.getDescription().equals( SurfacingConstants.NONE ) ) ) {
                             out.write( protein.getDescription() );
                         }
                         out.write( separator );
-                        if ( !( ForesterUtil.isEmpty( protein.getAccession() ) || protein.getAccession()
-                                .equals( SurfacingConstants.NONE ) ) ) {
+                        if ( !( ForesterUtil.isEmpty( protein.getAccession() )
+                                || protein.getAccession().equals( SurfacingConstants.NONE ) ) ) {
                             out.write( protein.getAccession() );
                         }
                         out.write( SurfacingConstants.NL );
@@ -1221,10 +1288,10 @@ public final class SurfacingUtil {
         while ( it.hasNext() ) {
             final PhylogenyNode n = it.next();
             if ( ForesterUtil.isEmpty( n.getName() )
-                    && ( !n.getNodeData().isHasTaxonomy() || ForesterUtil.isEmpty( n.getNodeData().getTaxonomy()
-                            .getScientificName() ) )
-                    && ( !n.getNodeData().isHasTaxonomy() || ForesterUtil.isEmpty( n.getNodeData().getTaxonomy()
-                            .getCommonName() ) ) ) {
+                    && ( !n.getNodeData().isHasTaxonomy()
+                            || ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getScientificName() ) )
+                    && ( !n.getNodeData().isHasTaxonomy()
+                            || ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getCommonName() ) ) ) {
                 if ( n.getParent() != null ) {
                     names.append( " " );
                     names.append( n.getParent().getName() );
@@ -1258,25 +1325,27 @@ public final class SurfacingUtil {
             Phylogeny intree = null;
             final String error = ForesterUtil.isReadableFile( intree_file );
             if ( !ForesterUtil.isEmpty( error ) ) {
-                ForesterUtil.fatalError( surfacing.PRG_NAME, "cannot read input tree file [" + intree_file + "]: "
-                        + error );
+                ForesterUtil.fatalError( surfacing.PRG_NAME,
+                                         "cannot read input tree file [" + intree_file + "]: " + error );
             }
             try {
                 final Phylogeny[] p_array = ParserBasedPhylogenyFactory.getInstance()
                         .create( intree_file, ParserUtils.createParserDependingOnFileType( intree_file, true ) );
                 if ( p_array.length < 1 ) {
-                    ForesterUtil.fatalError( surfacing.PRG_NAME, "file [" + intree_file
-                            + "] does not contain any phylogeny in phyloXML format" );
+                    ForesterUtil.fatalError( surfacing.PRG_NAME,
+                                             "file [" + intree_file
+                                                     + "] does not contain any phylogeny in phyloXML format" );
                 }
                 else if ( p_array.length > 1 ) {
-                    ForesterUtil.fatalError( surfacing.PRG_NAME, "file [" + intree_file
-                            + "] contains more than one phylogeny in phyloXML format" );
+                    ForesterUtil.fatalError( surfacing.PRG_NAME,
+                                             "file [" + intree_file
+                                                     + "] contains more than one phylogeny in phyloXML format" );
                 }
                 intree = p_array[ 0 ];
             }
             catch ( final Exception e ) {
-                ForesterUtil.fatalError( surfacing.PRG_NAME, "failed to read input tree from file [" + intree_file
-                        + "]: " + error );
+                ForesterUtil.fatalError( surfacing.PRG_NAME,
+                                         "failed to read input tree from file [" + intree_file + "]: " + error );
             }
             if ( ( intree == null ) || intree.isEmpty() ) {
                 ForesterUtil.fatalError( surfacing.PRG_NAME, "input tree [" + intree_file + "] is empty" );
@@ -1284,23 +1353,17 @@ public final class SurfacingUtil {
             if ( !intree.isRooted() ) {
                 ForesterUtil.fatalError( surfacing.PRG_NAME, "input tree [" + intree_file + "] is not rooted" );
             }
-            if ( intree.getNumberOfExternalNodes() < number_of_genomes ) {
-                ForesterUtil.fatalError( surfacing.PRG_NAME,
-                                         "number of external nodes [" + intree.getNumberOfExternalNodes()
-                                                 + "] of input tree [" + intree_file
-                                                 + "] is smaller than the number of genomes the be analyzed ["
-                                                 + number_of_genomes + "]" );
-            }
             final StringBuilder parent_names = new StringBuilder();
             final int nodes_lacking_name = getNumberOfNodesLackingName( intree, parent_names );
             if ( nodes_lacking_name > 0 ) {
-                ForesterUtil.fatalError( surfacing.PRG_NAME, "input tree [" + intree_file + "] has "
-                        + nodes_lacking_name + " node(s) lacking a name [parent names:" + parent_names + "]" );
+                ForesterUtil.fatalError( surfacing.PRG_NAME,
+                                         "input tree [" + intree_file + "] has " + nodes_lacking_name
+                                                 + " node(s) lacking a name [parent names:" + parent_names + "]" );
             }
             preparePhylogenyForParsimonyAnalyses( intree, input_file_properties );
             if ( !intree.isCompletelyBinary() ) {
-                ForesterUtil.printWarningMessage( surfacing.PRG_NAME, "input tree [" + intree_file
-                        + "] is not completely binary" );
+                ForesterUtil.printWarningMessage( surfacing.PRG_NAME,
+                                                  "input tree [" + intree_file + "] is not completely binary" );
             }
             intrees[ i++ ] = intree;
         }
@@ -1311,24 +1374,27 @@ public final class SurfacingUtil {
         Phylogeny intree = null;
         final String error = ForesterUtil.isReadableFile( intree_file );
         if ( !ForesterUtil.isEmpty( error ) ) {
-            ForesterUtil.fatalError( surfacing.PRG_NAME, "cannot read input tree file [" + intree_file + "]: " + error );
+            ForesterUtil.fatalError( surfacing.PRG_NAME,
+                                     "cannot read input tree file [" + intree_file + "]: " + error );
         }
         try {
             final Phylogeny[] phys = ParserBasedPhylogenyFactory.getInstance()
                     .create( intree_file, ParserUtils.createParserDependingOnFileType( intree_file, true ) );
             if ( phys.length < 1 ) {
-                ForesterUtil.fatalError( surfacing.PRG_NAME, "file [" + intree_file
-                        + "] does not contain any phylogeny in phyloXML format" );
+                ForesterUtil
+                        .fatalError( surfacing.PRG_NAME,
+                                     "file [" + intree_file + "] does not contain any phylogeny in phyloXML format" );
             }
             else if ( phys.length > 1 ) {
-                ForesterUtil.fatalError( surfacing.PRG_NAME, "file [" + intree_file
-                        + "] contains more than one phylogeny in phyloXML format" );
+                ForesterUtil
+                        .fatalError( surfacing.PRG_NAME,
+                                     "file [" + intree_file + "] contains more than one phylogeny in phyloXML format" );
             }
             intree = phys[ 0 ];
         }
         catch ( final Exception e ) {
-            ForesterUtil.fatalError( surfacing.PRG_NAME, "failed to read input tree from file [" + intree_file + "]: "
-                    + error );
+            ForesterUtil.fatalError( surfacing.PRG_NAME,
+                                     "failed to read input tree from file [" + intree_file + "]: " + error );
         }
         if ( ( intree == null ) || intree.isEmpty() ) {
             ForesterUtil.fatalError( surfacing.PRG_NAME, "input tree [" + intree_file + "] is empty" );
@@ -1399,8 +1465,8 @@ public final class SurfacingUtil {
                 while ( n != null ) {
                     if ( n.getNodeData().isHasTaxonomy()
                             && !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getScientificName() ) ) {
-                        group = ForesterUtil.obtainNormalizedTaxonomyGroup( n.getNodeData().getTaxonomy()
-                                .getScientificName() );
+                        group = ForesterUtil
+                                .obtainNormalizedTaxonomyGroup( n.getNodeData().getTaxonomy().getScientificName() );
                     }
                     if ( ForesterUtil.isEmpty( group ) && !ForesterUtil.isEmpty( n.getName() ) ) {
                         group = ForesterUtil.obtainNormalizedTaxonomyGroup( n.getName() );
@@ -1411,7 +1477,7 @@ public final class SurfacingUtil {
                     n = n.getParent();
                 }
                 if ( ForesterUtil.isEmpty( group ) ) {
-                    throw new IllegalArgumentException( "no group found for taxonomy code \"" + tax_code + "\"" );
+                    group = TaxonomyGroups.OTHER;
                 }
                 _TAXCODE_TAXGROUP_MAP.put( tax_code, group );
             }
@@ -1496,8 +1562,9 @@ public final class SurfacingUtil {
         final String[] genomes = new String[ input_file_properties.length ];
         for( int i = 0; i < input_file_properties.length; ++i ) {
             if ( intree.getNodes( input_file_properties[ i ][ 1 ] ).size() > 1 ) {
-                ForesterUtil.fatalError( surfacing.PRG_NAME, "node named [" + input_file_properties[ i ][ 1 ]
-                        + "] is not unique in input tree " + intree.getName() );
+                ForesterUtil.fatalError( surfacing.PRG_NAME,
+                                         "node named [" + input_file_properties[ i ][ 1 ]
+                                                 + "] is not unique in input tree " + intree.getName() );
             }
             genomes[ i ] = input_file_properties[ i ][ 1 ];
         }
@@ -1525,7 +1592,6 @@ public final class SurfacingUtil {
                 }
             }
         }
-        //
         final List<String> igns = PhylogenyMethods.deleteExternalNodesPositiveSelection( genomes, intree );
         if ( igns.size() > 0 ) {
             System.out.println( "Not using the following " + igns.size() + " nodes:" );
@@ -1534,15 +1600,29 @@ public final class SurfacingUtil {
             }
             System.out.println( "--" );
         }
+        //Test for node names:
+        final SortedSet<String> not_found = new TreeSet<String>();
+        final SortedSet<String> not_unique = new TreeSet<String>();
         for( final String[] input_file_propertie : input_file_properties ) {
-            try {
-                intree.getNode( input_file_propertie[ 1 ] );
+            final String name = input_file_propertie[ 1 ];
+            final List<PhylogenyNode> nodes = intree.getNodes( name );
+            if ( ( nodes == null ) || ( nodes.size() < 1 ) ) {
+                not_found.add( name );
             }
-            catch ( final IllegalArgumentException e ) {
-                ForesterUtil.fatalError( surfacing.PRG_NAME, "node named [" + input_file_propertie[ 1 ]
-                        + "] not present/not unique in input tree" );
+            if ( nodes.size() > 1 ) {
+                not_unique.add( name );
             }
         }
+        if ( not_found.size() > 0 ) {
+            ForesterUtil.fatalError( surfacing.PRG_NAME,
+                                     "the following " + not_found.size()
+                                             + " node(s) are not present in the input tree: " + not_found );
+        }
+        if ( not_unique.size() > 0 ) {
+            ForesterUtil.fatalError( surfacing.PRG_NAME,
+                                     "the following " + not_unique.size()
+                                             + " node(s) are not unique in the input tree: " + not_unique );
+        }
     }
 
     public static void printOutPercentageOfMultidomainProteins( final SortedMap<Integer, Integer> all_genomes_domains_per_potein_histo,
@@ -1591,17 +1671,17 @@ public final class SurfacingUtil {
         final Set<String> paths = new HashSet<String>();
         for( int i = 0; i < input_file_properties.length; ++i ) {
             if ( !PhyloXmlUtil.TAXOMONY_CODE_PATTERN.matcher( input_file_properties[ i ][ 1 ] ).matches() ) {
-                ForesterUtil.fatalError( surfacing.PRG_NAME, "illegal format for species code: "
-                        + input_file_properties[ i ][ 1 ] );
+                ForesterUtil.fatalError( surfacing.PRG_NAME,
+                                         "illegal format for species code: " + input_file_properties[ i ][ 1 ] );
             }
             if ( specs.contains( input_file_properties[ i ][ 1 ] ) ) {
-                ForesterUtil.fatalError( surfacing.PRG_NAME, "species code " + input_file_properties[ i ][ 1 ]
-                        + " is not unique" );
+                ForesterUtil.fatalError( surfacing.PRG_NAME,
+                                         "species code " + input_file_properties[ i ][ 1 ] + " is not unique" );
             }
             specs.add( input_file_properties[ i ][ 1 ] );
             if ( paths.contains( input_file_properties[ i ][ 0 ] ) ) {
-                ForesterUtil.fatalError( surfacing.PRG_NAME, "path " + input_file_properties[ i ][ 0 ]
-                        + " is not unique" );
+                ForesterUtil.fatalError( surfacing.PRG_NAME,
+                                         "path " + input_file_properties[ i ][ 0 ] + " is not unique" );
             }
             paths.add( input_file_properties[ i ][ 0 ] );
             final String error = ForesterUtil.isReadableFile( new File( input_file_properties[ i ][ 0 ] ) );
@@ -1619,8 +1699,9 @@ public final class SurfacingUtil {
                                                        final List<Object> numbers ) {
         if ( cla.isOptionSet( surfacing.PLUS_MINUS_ANALYSIS_OPTION ) ) {
             if ( !cla.isOptionValueSet( surfacing.PLUS_MINUS_ANALYSIS_OPTION ) ) {
-                ForesterUtil.fatalError( surfacing.PRG_NAME, "no value for 'plus-minus' file: -"
-                        + surfacing.PLUS_MINUS_ANALYSIS_OPTION + "=<file>" );
+                ForesterUtil.fatalError( surfacing.PRG_NAME,
+                                         "no value for 'plus-minus' file: -" + surfacing.PLUS_MINUS_ANALYSIS_OPTION
+                                                 + "=<file>" );
             }
             final File plus_minus_file = new File( cla.getOptionValue( surfacing.PLUS_MINUS_ANALYSIS_OPTION ) );
             final String msg = ForesterUtil.isReadableFile( plus_minus_file );
@@ -1688,18 +1769,18 @@ public final class SurfacingUtil {
                         factor = Double.parseDouble( species.substring( 3 ) );
                     }
                     catch ( final NumberFormatException e ) {
-                        ForesterUtil.fatalError( surfacing.PRG_NAME, "could not parse double value for factor from: \""
-                                + species.substring( 3 ) + "\"" );
+                        ForesterUtil.fatalError( surfacing.PRG_NAME,
+                                                 "could not parse double value for factor from: \""
+                                                         + species.substring( 3 ) + "\"" );
                     }
                 }
                 else if ( species.startsWith( "#" ) ) {
                     // Comment, ignore.
                 }
                 else {
-                    ForesterUtil
-                            .fatalError( surfacing.PRG_NAME,
-                                         "species/genome names in 'plus minus' file must begin with '*' (high copy target genome), '+' (high copy base genomes), '-' (low copy genomes), '$D=<integer>' minimal Difference (default is 1), '$F=<double>' factor (default is 1.0), double), or '#' (ignore) suffix, encountered: \""
-                                                 + species + "\"" );
+                    ForesterUtil.fatalError( surfacing.PRG_NAME,
+                                             "species/genome names in 'plus minus' file must begin with '*' (high copy target genome), '+' (high copy base genomes), '-' (low copy genomes), '$D=<integer>' minimal Difference (default is 1), '$F=<double>' factor (default is 1.0), double), or '#' (ignore) suffix, encountered: \""
+                                                     + species + "\"" );
                 }
                 numbers.add( new Integer( min_diff + "" ) );
                 numbers.add( new Double( factor + "" ) );
@@ -1712,8 +1793,8 @@ public final class SurfacingUtil {
 
     /*
      * species | protein id | n-terminal domain | c-terminal domain | n-terminal domain per domain E-value | c-terminal domain per domain E-value
-     * 
-     * 
+     *
+     *
      */
     static public StringBuffer proteinToDomainCombinations( final Protein protein,
                                                             final String protein_id,
@@ -1833,7 +1914,8 @@ public final class SurfacingUtil {
     public static void writeAllDomainsChangedOnAllSubtrees( final Phylogeny p,
                                                             final boolean get_gains,
                                                             final String outdir,
-                                                            final String suffix_for_filename ) throws IOException {
+                                                            final String suffix_for_filename )
+            throws IOException {
         CharacterStateMatrix.GainLossStates state = CharacterStateMatrix.GainLossStates.GAIN;
         if ( !get_gains ) {
             state = CharacterStateMatrix.GainLossStates.LOSS;
@@ -1883,9 +1965,19 @@ public final class SurfacingUtil {
         catch ( final IOException e ) {
             ForesterUtil.fatalError( surfacing.PRG_NAME, e.getMessage() );
         }
-        ForesterUtil.programMessage( surfacing.PRG_NAME, "Wrote binary domain combination for \""
-                + input_file_properties[ i ][ 0 ] + "\" (" + input_file_properties[ i ][ 1 ] + ", "
-                + input_file_properties[ i ][ 2 ] + ") to: \"" + dc_outfile_dot + "\"" );
+        if ( input_file_properties[ i ].length == 3 ) {
+            ForesterUtil
+                    .programMessage( surfacing.PRG_NAME,
+                                     "Wrote binary domain combination for \"" + input_file_properties[ i ][ 0 ] + "\" ("
+                                             + input_file_properties[ i ][ 1 ] + ", " + input_file_properties[ i ][ 2 ]
+                                             + ") to: \"" + dc_outfile_dot + "\"" );
+        }
+        else {
+            ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                         "Wrote binary domain combination for \"" + input_file_properties[ i ][ 0 ]
+                                                 + "\" (" + input_file_properties[ i ][ 1 ] + ") to: \""
+                                                 + dc_outfile_dot + "\"" );
+        }
     }
 
     public static void writeBinaryStatesMatrixAsListToFile( final CharacterStateMatrix<CharacterStateMatrix.GainLossStates> matrix,
@@ -1909,9 +2001,10 @@ public final class SurfacingUtil {
                 for( int c = 0; c < matrix.getNumberOfCharacters(); ++c ) {
                     // Not nice:
                     // using null to indicate either UNCHANGED_PRESENT or GAIN.
-                    if ( ( matrix.getState( id, c ) == state )
-                            || ( ( state == null ) && ( ( matrix.getState( id, c ) == CharacterStateMatrix.GainLossStates.GAIN ) || ( matrix
-                                    .getState( id, c ) == CharacterStateMatrix.GainLossStates.UNCHANGED_PRESENT ) ) ) ) {
+                    if ( ( matrix.getState( id, c ) == state ) || ( ( state == null )
+                            && ( ( matrix.getState( id, c ) == CharacterStateMatrix.GainLossStates.GAIN ) || ( matrix
+                                    .getState( id,
+                                               c ) == CharacterStateMatrix.GainLossStates.UNCHANGED_PRESENT ) ) ) ) {
                         out.write( matrix.getCharacter( c ) );
                         if ( ( descriptions != null ) && !descriptions.isEmpty()
                                 && descriptions.containsKey( matrix.getCharacter( c ) ) ) {
@@ -1952,12 +2045,13 @@ public final class SurfacingUtil {
                 for( int c = 0; c < matrix.getNumberOfCharacters(); ++c ) {
                     // Not nice:
                     // using null to indicate either UNCHANGED_PRESENT or GAIN.
-                    if ( ( matrix.getState( id, c ) == state )
-                            || ( ( state == null ) && ( ( matrix.getState( id, c ) == CharacterStateMatrix.GainLossStates.GAIN ) || ( matrix
-                                    .getState( id, c ) == CharacterStateMatrix.GainLossStates.UNCHANGED_PRESENT ) ) ) ) {
+                    if ( ( matrix.getState( id, c ) == state ) || ( ( state == null )
+                            && ( ( matrix.getState( id, c ) == CharacterStateMatrix.GainLossStates.GAIN ) || ( matrix
+                                    .getState( id,
+                                               c ) == CharacterStateMatrix.GainLossStates.UNCHANGED_PRESENT ) ) ) ) {
                         BinaryDomainCombination bdc = null;
                         try {
-                            bdc = BasicBinaryDomainCombination.createInstance( matrix.getCharacter( c ) );
+                            bdc = BasicBinaryDomainCombination.obtainInstance( matrix.getCharacter( c ) );
                         }
                         catch ( final Exception e ) {
                             ForesterUtil.fatalError( surfacing.PRG_NAME, e.getLocalizedMessage() );
@@ -2086,9 +2180,9 @@ public final class SurfacingUtil {
                 for( int c = 0; c < matrix.getNumberOfCharacters(); ++c ) {
                     // Not nice:
                     // using null to indicate either UNCHANGED_PRESENT or GAIN.
-                    if ( ( matrix.getState( id, c ) == state )
-                            || ( ( state == null ) && ( ( matrix.getState( id, c ) == CharacterStateMatrix.GainLossStates.UNCHANGED_PRESENT ) || ( matrix
-                                    .getState( id, c ) == CharacterStateMatrix.GainLossStates.GAIN ) ) ) ) {
+                    if ( ( matrix.getState( id, c ) == state ) || ( ( state == null )
+                            && ( ( matrix.getState( id, c ) == CharacterStateMatrix.GainLossStates.UNCHANGED_PRESENT )
+                                    || ( matrix.getState( id, c ) == CharacterStateMatrix.GainLossStates.GAIN ) ) ) ) {
                         final String character = matrix.getCharacter( c );
                         String domain_0 = "";
                         String domain_1 = "";
@@ -2143,7 +2237,7 @@ public final class SurfacingUtil {
                 out.write( SurfacingConstants.NL );
                 out.write( "<hr>" );
                 out.write( SurfacingConstants.NL );
-            } // for( final String id : sorted_ids ) {  
+            } // for( final String id : sorted_ids ) {
             out.write( "</body>" );
             out.write( SurfacingConstants.NL );
             out.write( "</html>" );
@@ -2180,13 +2274,14 @@ public final class SurfacingUtil {
         final DescriptiveStatistics stats = gwcd.getPerGenomeDomainPromiscuityStatistics();
         try {
             per_genome_domain_promiscuity_statistics_writer.write( input_file_properties[ i ][ 1 ] + "\t" );
-            per_genome_domain_promiscuity_statistics_writer.write( FORMATTER_3.format( stats.arithmeticMean() ) + "\t" );
+            per_genome_domain_promiscuity_statistics_writer
+                    .write( FORMATTER_3.format( stats.arithmeticMean() ) + "\t" );
             if ( stats.getN() < 2 ) {
                 per_genome_domain_promiscuity_statistics_writer.write( "n/a" + "\t" );
             }
             else {
-                per_genome_domain_promiscuity_statistics_writer.write( FORMATTER_3.format( stats
-                        .sampleStandardDeviation() ) + "\t" );
+                per_genome_domain_promiscuity_statistics_writer
+                        .write( FORMATTER_3.format( stats.sampleStandardDeviation() ) + "\t" );
             }
             per_genome_domain_promiscuity_statistics_writer.write( FORMATTER_3.format( stats.median() ) + "\t" );
             per_genome_domain_promiscuity_statistics_writer.write( ( int ) stats.getMin() + "\t" );
@@ -2202,14 +2297,16 @@ public final class SurfacingUtil {
             ForesterUtil.fatalError( surfacing.PRG_NAME, e.getMessage() );
         }
         if ( input_file_properties[ i ].length == 3 ) {
-            ForesterUtil.programMessage( surfacing.PRG_NAME, "Wrote domain combination counts for \""
-                    + input_file_properties[ i ][ 0 ] + "\" (" + input_file_properties[ i ][ 1 ] + ", "
-                    + input_file_properties[ i ][ 2 ] + ") to: \"" + dc_outfile + "\"" );
+            ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                         "Wrote domain combination counts for \"" + input_file_properties[ i ][ 0 ]
+                                                 + "\" (" + input_file_properties[ i ][ 1 ] + ", "
+                                                 + input_file_properties[ i ][ 2 ] + ") to: \"" + dc_outfile + "\"" );
         }
         else {
-            ForesterUtil.programMessage( surfacing.PRG_NAME, "Wrote domain combination counts for \""
-                    + input_file_properties[ i ][ 0 ] + "\" (" + input_file_properties[ i ][ 1 ] + ") to: \""
-                    + dc_outfile + "\"" );
+            ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                         "Wrote domain combination counts for \"" + input_file_properties[ i ][ 0 ]
+                                                 + "\" (" + input_file_properties[ i ][ 1 ] + ") to: \"" + dc_outfile
+                                                 + "\"" );
         }
     }
 
@@ -2218,15 +2315,16 @@ public final class SurfacingUtil {
                                                       final Writer simple_tab_writer,
                                                       final Writer single_writer,
                                                       Map<Character, Writer> split_writers,
-                                                      final SortedSet<PrintableDomainSimilarity> similarities,
+                                                      final SortedSet<DomainSimilarity> similarities,
                                                       final boolean treat_as_binary,
                                                       final List<Species> species_order,
-                                                      final PrintableDomainSimilarity.PRINT_OPTION print_option,
-                                                      final PrintableDomainSimilarity.DomainSimilarityScoring scoring,
+                                                      final DomainSimilarity.PRINT_OPTION print_option,
+                                                      final DomainSimilarity.DomainSimilarityScoring scoring,
                                                       final boolean verbose,
                                                       final Map<String, Integer> tax_code_to_id_map,
                                                       final Phylogeny phy,
-                                                      final Set<String> pos_filter_doms ) throws IOException {
+                                                      final Set<String> pos_filter_doms )
+            throws IOException {
         if ( ( single_writer != null ) && ( ( split_writers == null ) || split_writers.isEmpty() ) ) {
             split_writers = new HashMap<Character, Writer>();
             split_writers.put( '_', single_writer );
@@ -2262,12 +2360,13 @@ public final class SurfacingUtil {
                 break;
         }
         //
-        for( final PrintableDomainSimilarity similarity : similarities ) {
+        for( final DomainSimilarity similarity : similarities ) {
             if ( ( species_order != null ) && !species_order.isEmpty() ) {
                 ( similarity ).setSpeciesOrder( species_order );
             }
             if ( single_writer != null ) {
-                if ( !ForesterUtil.isEmpty( pos_filter_doms ) && pos_filter_doms.contains( similarity.getDomainId() ) ) {
+                if ( !ForesterUtil.isEmpty( pos_filter_doms )
+                        && pos_filter_doms.contains( similarity.getDomainId() ) ) {
                     single_writer.write( "<tr><td><b><a href=\"#" + similarity.getDomainId()
                             + "\"><span style=\"color:#00ff00\">" + similarity.getDomainId()
                             + "</span></a></b></td></tr>" );
@@ -2279,12 +2378,13 @@ public final class SurfacingUtil {
                 single_writer.write( SurfacingConstants.NL );
             }
             else {
-                Writer local_writer = split_writers.get( ( similarity.getDomainId().charAt( 0 ) + "" ).toLowerCase()
-                        .charAt( 0 ) );
+                Writer local_writer = split_writers
+                        .get( ( similarity.getDomainId().charAt( 0 ) + "" ).toLowerCase().charAt( 0 ) );
                 if ( local_writer == null ) {
                     local_writer = split_writers.get( '0' );
                 }
-                if ( !ForesterUtil.isEmpty( pos_filter_doms ) && pos_filter_doms.contains( similarity.getDomainId() ) ) {
+                if ( !ForesterUtil.isEmpty( pos_filter_doms )
+                        && pos_filter_doms.contains( similarity.getDomainId() ) ) {
                     local_writer.write( "<tr><td><b><a href=\"#" + similarity.getDomainId()
                             + "\"><span style=\"color:#00ff00\">" + similarity.getDomainId()
                             + "</span></a></b></td></tr>" );
@@ -2347,22 +2447,21 @@ public final class SurfacingUtil {
             w.write( SurfacingConstants.NL );
         }
         //
-        for( final PrintableDomainSimilarity similarity : similarities ) {
+        for( final DomainSimilarity similarity : similarities ) {
             if ( ( species_order != null ) && !species_order.isEmpty() ) {
                 ( similarity ).setSpeciesOrder( species_order );
             }
             if ( simple_tab_writer != null ) {
-                simple_tab_writer.write( similarity.toStringBuffer( PRINT_OPTION.SIMPLE_TAB_DELIMITED,
-                                                                    tax_code_to_id_map,
-                                                                    null ).toString() );
+                simple_tab_writer.write( similarity
+                        .toStringBuffer( PRINT_OPTION.SIMPLE_TAB_DELIMITED, tax_code_to_id_map, null ).toString() );
             }
             if ( single_writer != null ) {
                 single_writer.write( similarity.toStringBuffer( print_option, tax_code_to_id_map, phy ).toString() );
                 single_writer.write( SurfacingConstants.NL );
             }
             else {
-                Writer local_writer = split_writers.get( ( similarity.getDomainId().charAt( 0 ) + "" ).toLowerCase()
-                        .charAt( 0 ) );
+                Writer local_writer = split_writers
+                        .get( ( similarity.getDomainId().charAt( 0 ) + "" ).toLowerCase().charAt( 0 ) );
                 if ( local_writer == null ) {
                     local_writer = split_writers.get( '0' );
                 }
@@ -2480,8 +2579,8 @@ public final class SurfacingUtil {
             writer.toPhyloXML( new File( filename ), phylogeny, 1 );
         }
         catch ( final IOException e ) {
-            ForesterUtil.printWarningMessage( surfacing.PRG_NAME, "failed to write phylogeny to \"" + filename + "\": "
-                    + e );
+            ForesterUtil.printWarningMessage( surfacing.PRG_NAME,
+                                              "failed to write phylogeny to \"" + filename + "\": " + e );
         }
         ForesterUtil.programMessage( surfacing.PRG_NAME, "Wrote phylogeny to \"" + filename + "\"" );
     }
@@ -2491,12 +2590,12 @@ public final class SurfacingUtil {
                                             final SortedSet<String> filter,
                                             final List<GenomeWideCombinableDomains> gwcd_list ) {
         try {
-            writeMatrixToFile( DomainParsimonyCalculator.createMatrixOfDomainPresenceOrAbsence( gwcd_list,
-                                                                                                positive_filter_file == null ? null
-                                                                                                        : filter ),
+            writeMatrixToFile( DomainParsimonyCalculator
+                    .createMatrixOfDomainPresenceOrAbsence( gwcd_list, positive_filter_file == null ? null : filter ),
                                output_file + surfacing.DOMAINS_PRESENT_NEXUS,
                                Format.NEXUS_BINARY );
-            writeMatrixToFile( DomainParsimonyCalculator.createMatrixOfBinaryDomainCombinationPresenceOrAbsence( gwcd_list ),
+            writeMatrixToFile( DomainParsimonyCalculator
+                    .createMatrixOfBinaryDomainCombinationPresenceOrAbsence( gwcd_list ),
                                output_file + surfacing.BDC_PRESENT_NEXUS,
                                Format.NEXUS_BINARY );
         }
@@ -2508,13 +2607,18 @@ public final class SurfacingUtil {
     public static void writeProteinListsForAllSpecies( final File output_dir,
                                                        final SortedMap<Species, List<Protein>> protein_lists_per_species,
                                                        final List<GenomeWideCombinableDomains> gwcd_list,
-                                                       final double domain_e_cutoff ) {
+                                                       final double domain_e_cutoff,
+                                                       final Set<String> pos_filter_doms ) {
         final SortedSet<String> all_domains = new TreeSet<String>();
         for( final GenomeWideCombinableDomains gwcd : gwcd_list ) {
             all_domains.addAll( gwcd.getAllDomainIds() );
         }
         for( final String domain : all_domains ) {
-            final File out = new File( output_dir + ForesterUtil.FILE_SEPARATOR + domain + surfacing.SEQ_EXTRACT_SUFFIX );
+            if ( !ForesterUtil.isEmpty( pos_filter_doms ) && !pos_filter_doms.contains( domain ) ) {
+                continue;
+            }
+            final File out = new File( output_dir + ForesterUtil.FILE_SEPARATOR + domain
+                    + surfacing.SEQ_EXTRACT_SUFFIX );
             checkForOutputFileWriteability( out );
             try {
                 final Writer proteins_file_writer = new BufferedWriter( new FileWriter( out ) );
@@ -2535,7 +2639,8 @@ public final class SurfacingUtil {
 
     public static void writeTaxonomyLinks( final Writer writer,
                                            final String species,
-                                           final Map<String, Integer> tax_code_to_id_map ) throws IOException {
+                                           final Map<String, Integer> tax_code_to_id_map )
+            throws IOException {
         if ( ( species.length() > 1 ) && ( species.indexOf( '_' ) < 1 ) ) {
             writer.write( " [" );
             if ( ( tax_code_to_id_map != null ) && tax_code_to_id_map.containsKey( species ) ) {
@@ -2657,25 +2762,25 @@ public final class SurfacingUtil {
                     if ( !dc_reapp_counts_to_protein_length_stats.containsKey( count ) ) {
                         dc_reapp_counts_to_protein_length_stats.put( count, new BasicDescriptiveStatistics() );
                     }
-                    dc_reapp_counts_to_protein_length_stats.get( count ).addValue( protein_length_stats_by_dc.get( dc )
-                            .arithmeticMean() );
+                    dc_reapp_counts_to_protein_length_stats.get( count )
+                            .addValue( protein_length_stats_by_dc.get( dc ).arithmeticMean() );
                 }
                 if ( domain_number_stats_by_dc != null ) {
                     if ( !dc_reapp_counts_to_domain_number_stats.containsKey( count ) ) {
                         dc_reapp_counts_to_domain_number_stats.put( count, new BasicDescriptiveStatistics() );
                     }
-                    dc_reapp_counts_to_domain_number_stats.get( count ).addValue( domain_number_stats_by_dc.get( dc )
-                            .arithmeticMean() );
+                    dc_reapp_counts_to_domain_number_stats.get( count )
+                            .addValue( domain_number_stats_by_dc.get( dc ).arithmeticMean() );
                 }
                 if ( domain_length_stats_by_domain != null ) {
                     if ( !dc_reapp_counts_to_domain_lengths_stats.containsKey( count ) ) {
                         dc_reapp_counts_to_domain_lengths_stats.put( count, new BasicDescriptiveStatistics() );
                     }
                     final String[] ds = dc.split( "=" );
-                    dc_reapp_counts_to_domain_lengths_stats.get( count ).addValue( domain_length_stats_by_domain
-                            .get( ds[ 0 ] ).arithmeticMean() );
-                    dc_reapp_counts_to_domain_lengths_stats.get( count ).addValue( domain_length_stats_by_domain
-                            .get( ds[ 1 ] ).arithmeticMean() );
+                    dc_reapp_counts_to_domain_lengths_stats.get( count )
+                            .addValue( domain_length_stats_by_domain.get( ds[ 0 ] ).arithmeticMean() );
+                    dc_reapp_counts_to_domain_lengths_stats.get( count )
+                            .addValue( domain_length_stats_by_domain.get( ds[ 1 ] ).arithmeticMean() );
                 }
                 if ( count > 1 ) {
                     more_than_once.add( dc );
@@ -2798,8 +2903,8 @@ public final class SurfacingUtil {
                                      ForesterUtil.LINE_SEPARATOR );
             out_for_rank_counts.close();
             out_for_ancestor_species_counts.close();
-            if ( !ForesterUtil.isEmpty( outfilename_for_protein_stats )
-                    && ( ( domain_length_stats_by_domain != null ) || ( protein_length_stats_by_dc != null ) || ( domain_number_stats_by_dc != null ) ) ) {
+            if ( !ForesterUtil.isEmpty( outfilename_for_protein_stats ) && ( ( domain_length_stats_by_domain != null )
+                    || ( protein_length_stats_by_dc != null ) || ( domain_number_stats_by_dc != null ) ) ) {
                 final BufferedWriter w = new BufferedWriter( new FileWriter( outfilename_for_protein_stats ) );
                 w.write( "Domain Lengths: " );
                 w.write( "\n" );
@@ -2854,8 +2959,8 @@ public final class SurfacingUtil {
                 w.write( "\n" );
                 w.write( "N: " + gained_multiple_times_domain_length_count );
                 w.write( "\n" );
-                w.write( "Avg: "
-                        + ( ( double ) gained_multiple_times_domain_length_sum / gained_multiple_times_domain_length_count ) );
+                w.write( "Avg: " + ( ( double ) gained_multiple_times_domain_length_sum
+                        / gained_multiple_times_domain_length_count ) );
                 w.write( "\n" );
                 w.write( "\n" );
                 w.write( "\n" );
@@ -2888,10 +2993,12 @@ public final class SurfacingUtil {
         catch ( final IOException e ) {
             ForesterUtil.printWarningMessage( surfacing.PRG_NAME, "Failure to write: " + e );
         }
-        ForesterUtil.programMessage( surfacing.PRG_NAME, "Wrote independent domain combination gains fitch counts to ["
-                + outfilename_for_counts + "]" );
-        ForesterUtil.programMessage( surfacing.PRG_NAME, "Wrote independent domain combination gains fitch lists to ["
-                + outfilename_for_dc + "]" );
+        ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                     "Wrote independent domain combination gains fitch counts to ["
+                                             + outfilename_for_counts + "]" );
+        ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                     "Wrote independent domain combination gains fitch lists to [" + outfilename_for_dc
+                                             + "]" );
         ForesterUtil.programMessage( surfacing.PRG_NAME,
                                      "Wrote independent domain combination gains fitch lists to (for GO mapping) ["
                                              + outfilename_for_dc_for_go_mapping + "]" );
@@ -3002,8 +3109,8 @@ public final class SurfacingUtil {
     private static List<String> splitDomainCombination( final String dc ) {
         final String[] s = dc.split( "=" );
         if ( s.length != 2 ) {
-            ForesterUtil.printErrorMessage( surfacing.PRG_NAME, "Stringyfied domain combination has illegal format: "
-                    + dc );
+            ForesterUtil.printErrorMessage( surfacing.PRG_NAME,
+                                            "Stringyfied domain combination has illegal format: " + dc );
             System.exit( -1 );
         }
         final List<String> l = new ArrayList<String>( 2 );
@@ -3019,7 +3126,8 @@ public final class SurfacingUtil {
         final File all_pfams_encountered_file = new File( outfile_name + surfacing.ALL_PFAMS_ENCOUNTERED_SUFFIX );
         final File all_pfams_encountered_with_go_annotation_file = new File( outfile_name
                 + surfacing.ALL_PFAMS_ENCOUNTERED_WITH_GO_ANNOTATION_SUFFIX );
-        final File encountered_pfams_summary_file = new File( outfile_name + surfacing.ENCOUNTERED_PFAMS_SUMMARY_SUFFIX );
+        final File encountered_pfams_summary_file = new File( outfile_name
+                + surfacing.ENCOUNTERED_PFAMS_SUMMARY_SUFFIX );
         int biological_process_counter = 0;
         int cellular_component_counter = 0;
         int molecular_function_counter = 0;
@@ -3086,42 +3194,61 @@ public final class SurfacingUtil {
             }
             all_pfams_encountered_writer.close();
             all_pfams_encountered_with_go_annotation_writer.close();
-            ForesterUtil.programMessage( surfacing.PRG_NAME, "Wrote all [" + all_pfams_encountered.size()
-                    + "] encountered Pfams to: \"" + all_pfams_encountered_file + "\"" );
-            ForesterUtil.programMessage( surfacing.PRG_NAME, "Wrote all [" + pfams_with_mappings_counter
-                    + "] encountered Pfams with GO mappings to: \"" + all_pfams_encountered_with_go_annotation_file
-                    + "\"" );
-            ForesterUtil.programMessage( surfacing.PRG_NAME, "Wrote summary (including all ["
-                    + pfams_without_mappings_counter + "] encountered Pfams without GO mappings) to: \""
-                    + encountered_pfams_summary_file + "\"" );
-            ForesterUtil.programMessage( surfacing.PRG_NAME, "Sum of Pfams encountered                : "
-                    + all_pfams_encountered.size() );
-            ForesterUtil.programMessage( surfacing.PRG_NAME, "Pfams without a mapping                 : "
-                    + pfams_without_mappings_counter + " ["
-                    + ( ( 100 * pfams_without_mappings_counter ) / all_pfams_encountered.size() ) + "%]" );
-            ForesterUtil.programMessage( surfacing.PRG_NAME, "Pfams without mapping to proc. or func. : "
-                    + pfams_without_mappings_to_bp_or_mf_counter + " ["
-                    + ( ( 100 * pfams_without_mappings_to_bp_or_mf_counter ) / all_pfams_encountered.size() ) + "%]" );
-            ForesterUtil.programMessage( surfacing.PRG_NAME, "Pfams with a mapping                    : "
-                    + pfams_with_mappings_counter + " ["
-                    + ( ( 100 * pfams_with_mappings_counter ) / all_pfams_encountered.size() ) + "%]" );
-            ForesterUtil.programMessage( surfacing.PRG_NAME, "Pfams with a mapping to proc. or func.  : "
-                    + pfams_with_mappings_to_bp_or_mf_counter + " ["
-                    + ( ( 100 * pfams_with_mappings_to_bp_or_mf_counter ) / all_pfams_encountered.size() ) + "%]" );
-            ForesterUtil.programMessage( surfacing.PRG_NAME, "Pfams with mapping to biological process: "
-                    + biological_process_counter + " ["
-                    + ( ( 100 * biological_process_counter ) / all_pfams_encountered.size() ) + "%]" );
-            ForesterUtil.programMessage( surfacing.PRG_NAME, "Pfams with mapping to molecular function: "
-                    + molecular_function_counter + " ["
-                    + ( ( 100 * molecular_function_counter ) / all_pfams_encountered.size() ) + "%]" );
-            ForesterUtil.programMessage( surfacing.PRG_NAME, "Pfams with mapping to cellular component: "
-                    + cellular_component_counter + " ["
-                    + ( ( 100 * cellular_component_counter ) / all_pfams_encountered.size() ) + "%]" );
+            ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                         "Wrote all [" + all_pfams_encountered.size() + "] encountered Pfams to: \""
+                                                 + all_pfams_encountered_file + "\"" );
+            ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                         "Wrote all [" + pfams_with_mappings_counter
+                                                 + "] encountered Pfams with GO mappings to: \""
+                                                 + all_pfams_encountered_with_go_annotation_file + "\"" );
+            ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                         "Wrote summary (including all [" + pfams_without_mappings_counter
+                                                 + "] encountered Pfams without GO mappings) to: \""
+                                                 + encountered_pfams_summary_file + "\"" );
+            ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                         "Sum of Pfams encountered                : " + all_pfams_encountered.size() );
+            ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                         "Pfams without a mapping                 : " + pfams_without_mappings_counter
+                                                 + " [" + ( ( 100 * pfams_without_mappings_counter )
+                                                         / all_pfams_encountered.size() )
+                                                 + "%]" );
+            ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                         "Pfams without mapping to proc. or func. : "
+                                                 + pfams_without_mappings_to_bp_or_mf_counter + " ["
+                                                 + ( ( 100 * pfams_without_mappings_to_bp_or_mf_counter )
+                                                         / all_pfams_encountered.size() )
+                                                 + "%]" );
+            ForesterUtil
+                    .programMessage( surfacing.PRG_NAME,
+                                     "Pfams with a mapping                    : " + pfams_with_mappings_counter + " ["
+                                             + ( ( 100 * pfams_with_mappings_counter ) / all_pfams_encountered.size() )
+                                             + "%]" );
+            ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                         "Pfams with a mapping to proc. or func.  : "
+                                                 + pfams_with_mappings_to_bp_or_mf_counter + " ["
+                                                 + ( ( 100 * pfams_with_mappings_to_bp_or_mf_counter )
+                                                         / all_pfams_encountered.size() )
+                                                 + "%]" );
+            ForesterUtil
+                    .programMessage( surfacing.PRG_NAME,
+                                     "Pfams with mapping to biological process: " + biological_process_counter + " ["
+                                             + ( ( 100 * biological_process_counter ) / all_pfams_encountered.size() )
+                                             + "%]" );
+            ForesterUtil
+                    .programMessage( surfacing.PRG_NAME,
+                                     "Pfams with mapping to molecular function: " + molecular_function_counter + " ["
+                                             + ( ( 100 * molecular_function_counter ) / all_pfams_encountered.size() )
+                                             + "%]" );
+            ForesterUtil
+                    .programMessage( surfacing.PRG_NAME,
+                                     "Pfams with mapping to cellular component: " + cellular_component_counter + " ["
+                                             + ( ( 100 * cellular_component_counter ) / all_pfams_encountered.size() )
+                                             + "%]" );
             summary_writer.write( ForesterUtil.LINE_SEPARATOR );
             summary_writer.write( "# Sum of Pfams encountered                : " + all_pfams_encountered.size() );
             summary_writer.write( ForesterUtil.LINE_SEPARATOR );
-            summary_writer.write( "# Pfams without a mapping                 : " + pfams_without_mappings_counter
-                    + " [" + ( ( 100 * pfams_without_mappings_counter ) / all_pfams_encountered.size() ) + "%]" );
+            summary_writer.write( "# Pfams without a mapping                 : " + pfams_without_mappings_counter + " ["
+                    + ( ( 100 * pfams_without_mappings_counter ) / all_pfams_encountered.size() ) + "%]" );
             summary_writer.write( ForesterUtil.LINE_SEPARATOR );
             summary_writer.write( "# Pfams without mapping to proc. or func. : "
                     + pfams_without_mappings_to_bp_or_mf_counter + " ["
@@ -3168,14 +3295,15 @@ public final class SurfacingUtil {
                                          final String prefix_for_html,
                                          final String character_separator_for_non_html_output,
                                          final Map<String, Set<String>>[] domain_id_to_secondary_features_maps,
-                                         final Set<GoId> all_go_ids ) throws IOException {
+                                         final Set<GoId> all_go_ids )
+            throws IOException {
         boolean any_go_annotation_present = false;
         boolean first_has_no_go = false;
         int domain_count = 2; // To distinguish between domains and binary domain combinations.
         if ( ForesterUtil.isEmpty( domain_1 ) ) {
             domain_count = 1;
         }
-        // The following has a difficult to understand logic.  
+        // The following has a difficult to understand logic.
         for( int d = 0; d < domain_count; ++d ) {
             List<GoId> go_ids = null;
             boolean go_annotation_present = false;
@@ -3248,7 +3376,7 @@ public final class SurfacingUtil {
                     out.write( SurfacingConstants.NL );
                 }
             }
-        } //  for( int d = 0; d < domain_count; ++d ) 
+        } //  for( int d = 0; d < domain_count; ++d )
         if ( !any_go_annotation_present ) {
             out.write( "<tr>" );
             writeDomainIdsToHtml( out, domain_0, domain_1, prefix_for_html, domain_id_to_secondary_features_maps );
@@ -3279,7 +3407,8 @@ public final class SurfacingUtil {
 
     private static void writeDomainsToIndividualFilePerTreeNode( final Writer individual_files_writer,
                                                                  final String domain_0,
-                                                                 final String domain_1 ) throws IOException {
+                                                                 final String domain_1 )
+            throws IOException {
         individual_files_writer.write( domain_0 );
         individual_files_writer.write( ForesterUtil.LINE_SEPARATOR );
         if ( !ForesterUtil.isEmpty( domain_1 ) ) {
@@ -3296,8 +3425,8 @@ public final class SurfacingUtil {
                 writer.write( ForesterUtil.LINE_SEPARATOR );
             }
             writer.close();
-            ForesterUtil.programMessage( surfacing.PRG_NAME, "Wrote " + pfams.size() + " pfams to [" + outfile_name
-                    + "]" );
+            ForesterUtil.programMessage( surfacing.PRG_NAME,
+                                         "Wrote " + pfams.size() + " pfams to [" + outfile_name + "]" );
         }
         catch ( final IOException e ) {
             ForesterUtil.printWarningMessage( surfacing.PRG_NAME, "Failure to write: " + e );