JAL-1953 JAL-2852 added public "paintFile" method
[jalview.git] / forester / java / src / org / forester / surfacing / TestSurfacing.java
index dabbb06..72141d2 100644 (file)
@@ -42,7 +42,6 @@ import org.forester.evoinference.matrix.character.CharacterStateMatrix;
 import org.forester.evoinference.matrix.character.CharacterStateMatrix.BinaryStates;
 import org.forester.evoinference.matrix.character.CharacterStateMatrix.GainLossStates;
 import org.forester.io.parsers.HmmPfamOutputParser;
-import org.forester.io.parsers.nexus.PaupLogParser;
 import org.forester.io.parsers.nhx.NHXParser;
 import org.forester.phylogeny.Phylogeny;
 import org.forester.phylogeny.PhylogenyNode;
@@ -57,7 +56,6 @@ import org.forester.protein.Protein;
 import org.forester.protein.ProteinId;
 import org.forester.species.BasicSpecies;
 import org.forester.species.Species;
-import org.forester.test.Test;
 import org.forester.util.ForesterUtil;
 
 @SuppressWarnings( "unused")
@@ -177,12 +175,7 @@ public class TestSurfacing {
             return false;
         }
         System.out.println( "OK." );
-        System.out.print( "  Paup log parser: " );
-        if ( !TestSurfacing.testPaupLogParser( test_dir ) ) {
-            System.out.println( "failed." );
-            return false;
-        }
-        System.out.println( "OK." );
+       
         System.out.print( "  Binary state matrix to gain loss matrix: " );
         if ( !TestSurfacing.testBinaryStateMatrixToGainLossMatrix( test_dir ) ) {
             System.out.println( "failed." );
@@ -256,9 +249,6 @@ public class TestSurfacing {
             final Domain F = new BasicDomain( "F", 1, 2, ( short ) 1, ( short ) 1, 0.01, -12 );
             final Domain G = new BasicDomain( "G", 1, 2, ( short ) 1, ( short ) 1, 0.001, -12 );
             final Domain X = new BasicDomain( "X", 1, 2, ( short ) 1, ( short ) 1, 0.0001, -12 );
-            if ( !TestSurfacing.isEqual( X.getPerSequenceScore(), -12 ) ) {
-                return false;
-            }
             final Protein mouse_1 = new BasicProtein( "1", "mouse", 0 );
             final Protein rabbit_1 = new BasicProtein( "1", "rabbit", 0 );
             final Protein ciona_1 = new BasicProtein( "1", "ciona", 0 );
@@ -313,17 +303,17 @@ public class TestSurfacing {
             cdc_list.add( BasicGenomeWideCombinableDomains.createInstance( protein_list_nemve,
                                                                            true,
                                                                            new BasicSpecies( "nemve" ) ) );
-            final DomainSimilarityCalculator calc = new BasicDomainSimilarityCalculator( PrintableDomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
+            final DomainSimilarityCalculator calc = new BasicDomainSimilarityCalculator( DomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
                                                                                          false,
                                                                                          false,
                                                                                          true );
-            final SortedSet<PrintableDomainSimilarity> sims = calc
+            final SortedSet<DomainSimilarity> sims = calc
                     .calculateSimilarities( new CombinationsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list,
                                             true,
                                             true );
-            final Iterator<PrintableDomainSimilarity> sims_it = sims.iterator();
-            final PrintableDomainSimilarity sa = sims_it.next();
+            final Iterator<DomainSimilarity> sims_it = sims.iterator();
+            final DomainSimilarity sa = sims_it.next();
             if ( !sa.getDomainId().equals( "A" ) ) {
                 return false;
             }
@@ -364,7 +354,7 @@ public class TestSurfacing {
             if ( sa.getMaximalDifferenceInCounts() != 3 ) {
                 return false;
             }
-            final PrintableDomainSimilarity sb = sims_it.next();
+            final DomainSimilarity sb = sims_it.next();
             if ( !sb.getDomainId().equals( "B" ) ) {
                 return false;
             }
@@ -398,7 +388,7 @@ public class TestSurfacing {
             if ( sb.getMaximalDifferenceInCounts() != 2 ) {
                 return false;
             }
-            final PrintableDomainSimilarity sc = sims_it.next();
+            final DomainSimilarity sc = sims_it.next();
             if ( !sc.getDomainId().equals( "C" ) ) {
                 return false;
             }
@@ -464,17 +454,17 @@ public class TestSurfacing {
             cdc_list2.add( BasicGenomeWideCombinableDomains.createInstance( protein_list_nemve,
                                                                             false,
                                                                             new BasicSpecies( "nemve" ) ) );
-            final DomainSimilarityCalculator calc2 = new BasicDomainSimilarityCalculator( PrintableDomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
+            final DomainSimilarityCalculator calc2 = new BasicDomainSimilarityCalculator( DomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
                                                                                           false,
                                                                                           false,
                                                                                           true );
-            final SortedSet<PrintableDomainSimilarity> sims2 = calc2
+            final SortedSet<DomainSimilarity> sims2 = calc2
                     .calculateSimilarities( new CombinationsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list2,
                                             false,
                                             true );
-            final Iterator<PrintableDomainSimilarity> sims_it2 = sims2.iterator();
-            final PrintableDomainSimilarity sa2 = sims_it2.next();
+            final Iterator<DomainSimilarity> sims_it2 = sims2.iterator();
+            final DomainSimilarity sa2 = sims_it2.next();
             if ( !sa2.getDomainId().equals( "A" ) ) {
                 return false;
             }
@@ -552,17 +542,17 @@ public class TestSurfacing {
             cdc_list3.add( BasicGenomeWideCombinableDomains.createInstance( protein_list_nemve,
                                                                             true,
                                                                             new BasicSpecies( "nemve" ) ) );
-            final DomainSimilarityCalculator calc3 = new BasicDomainSimilarityCalculator( PrintableDomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
+            final DomainSimilarityCalculator calc3 = new BasicDomainSimilarityCalculator( DomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
                                                                                           false,
                                                                                           false,
                                                                                           true );
-            final SortedSet<PrintableDomainSimilarity> sims3 = calc3
+            final SortedSet<DomainSimilarity> sims3 = calc3
                     .calculateSimilarities( new CombinationsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list3,
                                             false,
                                             true );
-            final Iterator<PrintableDomainSimilarity> sims_it3 = sims3.iterator();
-            final PrintableDomainSimilarity sa3 = sims_it3.next();
+            final Iterator<DomainSimilarity> sims_it3 = sims3.iterator();
+            final DomainSimilarity sa3 = sims_it3.next();
             if ( !sa3.getDomainId().equals( "A" ) ) {
                 return false;
             }
@@ -596,17 +586,17 @@ public class TestSurfacing {
             cdc_list4.add( BasicGenomeWideCombinableDomains.createInstance( protein_list_nemve,
                                                                             false,
                                                                             new BasicSpecies( "nemve" ) ) );
-            final DomainSimilarityCalculator calc4 = new BasicDomainSimilarityCalculator( PrintableDomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
+            final DomainSimilarityCalculator calc4 = new BasicDomainSimilarityCalculator( DomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
                                                                                           true,
                                                                                           false,
                                                                                           true );
-            final SortedSet<PrintableDomainSimilarity> sims4 = calc4
+            final SortedSet<DomainSimilarity> sims4 = calc4
                     .calculateSimilarities( new CombinationsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list4,
                                             false,
                                             true );
-            final Iterator<PrintableDomainSimilarity> sims_it4 = sims4.iterator();
-            final PrintableDomainSimilarity sa4 = sims_it4.next();
+            final Iterator<DomainSimilarity> sims_it4 = sims4.iterator();
+            final DomainSimilarity sa4 = sims_it4.next();
             if ( !sa4.getDomainId().equals( "A" ) ) {
                 return false;
             }
@@ -629,10 +619,10 @@ public class TestSurfacing {
             if ( ssdsd4.getNumberOfProteinsExhibitingCombinationWith( "X" ) != 3 ) {
                 return false;
             }
-            final SortedSet<PrintableDomainSimilarity> sims4_d = calc4
+            final SortedSet<DomainSimilarity> sims4_d = calc4
                     .calculateSimilarities( new DomainCountsBasedPairwiseSimilarityCalculator(), cdc_list4, false, true );
-            final Iterator<PrintableDomainSimilarity> sims_it4_d = sims4_d.iterator();
-            final PrintableDomainSimilarity sa4_d = sims_it4_d.next();
+            final Iterator<DomainSimilarity> sims_it4_d = sims4_d.iterator();
+            final DomainSimilarity sa4_d = sims_it4_d.next();
             if ( !sa4_d.getDomainId().equals( "A" ) ) {
                 return false;
             }
@@ -653,13 +643,13 @@ public class TestSurfacing {
             if ( sa4_d.getN() != 6 ) {
                 return false;
             }
-            final SortedSet<PrintableDomainSimilarity> sims4_p = calc4
+            final SortedSet<DomainSimilarity> sims4_p = calc4
                     .calculateSimilarities( new ProteinCountsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list4,
                                             false,
                                             true );
-            final Iterator<PrintableDomainSimilarity> sims_it4_p = sims4_p.iterator();
-            final PrintableDomainSimilarity sa4_p = sims_it4_p.next();
+            final Iterator<DomainSimilarity> sims_it4_p = sims4_p.iterator();
+            final DomainSimilarity sa4_p = sims_it4_p.next();
             if ( !sa4_p.getDomainId().equals( "A" ) ) {
                 return false;
             }
@@ -708,10 +698,10 @@ public class TestSurfacing {
             cdc_list5.add( BasicGenomeWideCombinableDomains.createInstance( protein_list_nemve,
                                                                             true,
                                                                             new BasicSpecies( "nemve" ) ) );
-            final SortedSet<PrintableDomainSimilarity> sims5_d = calc4
+            final SortedSet<DomainSimilarity> sims5_d = calc4
                     .calculateSimilarities( new DomainCountsBasedPairwiseSimilarityCalculator(), cdc_list5, false, true );
-            final Iterator<PrintableDomainSimilarity> sims_it5_d = sims5_d.iterator();
-            final PrintableDomainSimilarity sa5_d = sims_it5_d.next();
+            final Iterator<DomainSimilarity> sims_it5_d = sims5_d.iterator();
+            final DomainSimilarity sa5_d = sims_it5_d.next();
             if ( sa5_d.getSpecies().size() != 4 ) {
                 return false;
             }
@@ -779,13 +769,13 @@ public class TestSurfacing {
             if ( sa5_d.getMaximalDifferenceInCounts() != 11 ) {
                 return false;
             }
-            final SortedSet<PrintableDomainSimilarity> sims5_p = calc4
+            final SortedSet<DomainSimilarity> sims5_p = calc4
                     .calculateSimilarities( new ProteinCountsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list5,
                                             false,
                                             true );
-            final Iterator<PrintableDomainSimilarity> sims_it5_p = sims5_p.iterator();
-            final PrintableDomainSimilarity sa5_p = sims_it5_p.next();
+            final Iterator<DomainSimilarity> sims_it5_p = sims5_p.iterator();
+            final DomainSimilarity sa5_p = sims_it5_p.next();
             if ( !sa5_p.getDomainId().equals( "A" ) ) {
                 return false;
             }
@@ -843,10 +833,10 @@ public class TestSurfacing {
             cdc_list6.add( BasicGenomeWideCombinableDomains.createInstance( protein_list_nemve,
                                                                             false,
                                                                             new BasicSpecies( "nemve" ) ) );
-            final SortedSet<PrintableDomainSimilarity> sims6_d = calc4
+            final SortedSet<DomainSimilarity> sims6_d = calc4
                     .calculateSimilarities( new DomainCountsBasedPairwiseSimilarityCalculator(), cdc_list6, false, true );
-            final Iterator<PrintableDomainSimilarity> sims_it6_d = sims6_d.iterator();
-            final PrintableDomainSimilarity sa6_d = sims_it6_d.next();
+            final Iterator<DomainSimilarity> sims_it6_d = sims6_d.iterator();
+            final DomainSimilarity sa6_d = sims_it6_d.next();
             if ( sa6_d.getSpecies().size() != 4 ) {
                 return false;
             }
@@ -914,13 +904,13 @@ public class TestSurfacing {
             if ( sa6_d.getMaximalDifferenceInCounts() != 11 ) {
                 return false;
             }
-            final SortedSet<PrintableDomainSimilarity> sims6_p = calc4
+            final SortedSet<DomainSimilarity> sims6_p = calc4
                     .calculateSimilarities( new ProteinCountsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list6,
                                             false,
                                             true );
-            final Iterator<PrintableDomainSimilarity> sims_it6_p = sims6_p.iterator();
-            final PrintableDomainSimilarity sa6_p = sims_it6_p.next();
+            final Iterator<DomainSimilarity> sims_it6_p = sims6_p.iterator();
+            final DomainSimilarity sa6_p = sims_it6_p.next();
             if ( !sa6_p.getDomainId().equals( "A" ) ) {
                 return false;
             }
@@ -982,9 +972,6 @@ public class TestSurfacing {
             final Domain F = new BasicDomain( "F", 1, 2, ( short ) 1, ( short ) 1, 0.01, -12 );
             final Domain G = new BasicDomain( "G", 1, 2, ( short ) 1, ( short ) 1, 0.001, -12 );
             final Domain X = new BasicDomain( "X", 1, 2, ( short ) 1, ( short ) 1, 0.0001, -12 );
-            if ( !TestSurfacing.isEqual( X.getPerSequenceScore(), -12 ) ) {
-                return false;
-            }
             final Protein mouse_1 = new BasicProtein( "1", "mouse", 0 );
             final Protein rabbit_1 = new BasicProtein( "1", "rabbit", 0 );
             final Protein ciona_1 = new BasicProtein( "1", "ciona", 0 );
@@ -1028,17 +1015,17 @@ public class TestSurfacing {
             cdc_list.add( BasicGenomeWideCombinableDomains.createInstance( protein_list_nemve,
                                                                            true,
                                                                            new BasicSpecies( "nemve" ) ) );
-            final DomainSimilarityCalculator calc = new BasicDomainSimilarityCalculator( PrintableDomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
+            final DomainSimilarityCalculator calc = new BasicDomainSimilarityCalculator( DomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
                                                                                          false,
                                                                                          false,
                                                                                          true );
-            final SortedSet<PrintableDomainSimilarity> sims = calc
+            final SortedSet<DomainSimilarity> sims = calc
                     .calculateSimilarities( new CombinationsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list,
                                             true,
                                             false );
-            final Iterator<PrintableDomainSimilarity> sims_it = sims.iterator();
-            final PrintableDomainSimilarity sa = sims_it.next();
+            final Iterator<DomainSimilarity> sims_it = sims.iterator();
+            final DomainSimilarity sa = sims_it.next();
             if ( !sa.getDomainId().equals( "A" ) ) {
                 return false;
             }
@@ -1069,7 +1056,7 @@ public class TestSurfacing {
             if ( sa.getMaximalDifferenceInCounts() != 0 ) {
                 return false;
             }
-            final PrintableDomainSimilarity sb = sims_it.next();
+            final DomainSimilarity sb = sims_it.next();
             if ( !sb.getDomainId().equals( "B" ) ) {
                 return false;
             }
@@ -1079,13 +1066,13 @@ public class TestSurfacing {
             if ( !sb.getSpecies().contains( new BasicSpecies( "rabbit" ) ) ) {
                 return false;
             }
-            final SortedSet<PrintableDomainSimilarity> sims2 = calc
+            final SortedSet<DomainSimilarity> sims2 = calc
                     .calculateSimilarities( new CombinationsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list,
                                             true,
                                             true );
-            final Iterator<PrintableDomainSimilarity> sims_it2 = sims2.iterator();
-            final PrintableDomainSimilarity sa2 = sims_it2.next();
+            final Iterator<DomainSimilarity> sims_it2 = sims2.iterator();
+            final DomainSimilarity sa2 = sims_it2.next();
             if ( !sa2.getDomainId().equals( "D" ) ) {
                 return false;
             }
@@ -1137,11 +1124,11 @@ public class TestSurfacing {
             cdc_list.add( BasicGenomeWideCombinableDomains.createInstance( protein_list_nemve,
                                                                            true,
                                                                            new BasicSpecies( "nemve" ) ) );
-            final DomainSimilarityCalculator calc = new BasicDomainSimilarityCalculator( PrintableDomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
+            final DomainSimilarityCalculator calc = new BasicDomainSimilarityCalculator( DomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
                                                                                          false,
                                                                                          false,
                                                                                          true );
-            final SortedSet<PrintableDomainSimilarity> sims = calc
+            final SortedSet<DomainSimilarity> sims = calc
                     .calculateSimilarities( new CombinationsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list,
                                             false,
@@ -1149,8 +1136,8 @@ public class TestSurfacing {
             if ( sims.size() != 1 ) {
                 return false;
             }
-            final Iterator<PrintableDomainSimilarity> sims_it = sims.iterator();
-            final PrintableDomainSimilarity sa = sims_it.next();
+            final Iterator<DomainSimilarity> sims_it = sims.iterator();
+            final DomainSimilarity sa = sims_it.next();
             if ( !sa.getDomainId().equals( "A" ) ) {
                 return false;
             }
@@ -1169,7 +1156,7 @@ public class TestSurfacing {
             if ( !sa.getSpecies().contains( new BasicSpecies( "rabbit" ) ) ) {
                 return false;
             }
-            final SortedSet<PrintableDomainSimilarity> sims_ns = calc
+            final SortedSet<DomainSimilarity> sims_ns = calc
                     .calculateSimilarities( new CombinationsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list,
                                             true,
@@ -1211,7 +1198,7 @@ public class TestSurfacing {
             cdc_list2.add( BasicGenomeWideCombinableDomains.createInstance( protein_list_nemve2,
                                                                             true,
                                                                             new BasicSpecies( "nemve" ) ) );
-            final SortedSet<PrintableDomainSimilarity> sims2 = calc
+            final SortedSet<DomainSimilarity> sims2 = calc
                     .calculateSimilarities( new CombinationsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list2,
                                             true,
@@ -1229,16 +1216,16 @@ public class TestSurfacing {
 
     private static boolean testBinaryDomainCombination() {
         try {
-            final BasicBinaryDomainCombination s0 = new BasicBinaryDomainCombination( "a", "a" );
-            final BasicBinaryDomainCombination s1 = new BasicBinaryDomainCombination( "b", "a" );
-            final BasicBinaryDomainCombination s2 = new BasicBinaryDomainCombination( "a", "b" );
-            final BasicBinaryDomainCombination s3 = new BasicBinaryDomainCombination( "B", "A" );
-            final BasicBinaryDomainCombination s4 = new BasicBinaryDomainCombination( "A", "B" );
-            final BasicBinaryDomainCombination s5 = new BasicBinaryDomainCombination( "c", "a" );
-            final BasicBinaryDomainCombination s6 = new BasicBinaryDomainCombination( "b", "c" );
-            final BasicBinaryDomainCombination s7 = new BasicBinaryDomainCombination( "d", "a" );
-            final BasicBinaryDomainCombination s8 = new BasicBinaryDomainCombination( "b", "d" );
-            final BinaryDomainCombination s9 = BasicBinaryDomainCombination.createInstance( "z-z=a-aa" );
+            final BasicBinaryDomainCombination s0 = BasicBinaryDomainCombination.obtainInstance( "a", "a" );
+            final BasicBinaryDomainCombination s1 = BasicBinaryDomainCombination.obtainInstance( "b", "a" );
+            final BasicBinaryDomainCombination s2 = BasicBinaryDomainCombination.obtainInstance( "a", "b" );
+            final BasicBinaryDomainCombination s3 = BasicBinaryDomainCombination.obtainInstance( "B", "A" );
+            final BasicBinaryDomainCombination s4 = BasicBinaryDomainCombination.obtainInstance( "A", "B" );
+            final BasicBinaryDomainCombination s5 = BasicBinaryDomainCombination.obtainInstance( "c", "a" );
+            final BasicBinaryDomainCombination s6 = BasicBinaryDomainCombination.obtainInstance( "b", "c" );
+            final BasicBinaryDomainCombination s7 = BasicBinaryDomainCombination.obtainInstance( "d", "a" );
+            final BasicBinaryDomainCombination s8 = BasicBinaryDomainCombination.obtainInstance( "b", "d" );
+            final BinaryDomainCombination s9 = BasicBinaryDomainCombination.obtainInstance( "z-z=a-aa" );
             if ( !s9.toString().equals( "a-aa=z-z" ) ) {
                 System.out.println( s9.toString() );
                 return false;
@@ -1284,10 +1271,10 @@ public class TestSurfacing {
                 System.out.println( sorted.size() );
                 return false;
             }
-            final DirectedBinaryDomainCombination aa = new DirectedBinaryDomainCombination( "a", "a" );
-            final DirectedBinaryDomainCombination ba = new DirectedBinaryDomainCombination( "b", "a" );
-            final DirectedBinaryDomainCombination ab = new DirectedBinaryDomainCombination( "a", "b" );
-            final DirectedBinaryDomainCombination bb = new DirectedBinaryDomainCombination( "b", "b" );
+            final DirectedBinaryDomainCombination aa = DirectedBinaryDomainCombination.obtainInstance( "a", "a" );
+            final DirectedBinaryDomainCombination ba = DirectedBinaryDomainCombination.obtainInstance( "b", "a" );
+            final DirectedBinaryDomainCombination ab = DirectedBinaryDomainCombination.obtainInstance( "a", "b" );
+            final DirectedBinaryDomainCombination bb = DirectedBinaryDomainCombination.obtainInstance( "b", "b" );
             if ( !aa.equals( aa ) ) {
                 return false;
             }
@@ -1322,7 +1309,7 @@ public class TestSurfacing {
         final BinaryStates O = BinaryStates.ABSENT;
         try {
             final CharacterStateMatrix<BinaryStates> binary_states_matrix_0 = new BasicCharacterStateMatrix<BinaryStates>( 7,
-                                                                                                                           6 );
+                    6 );
             binary_states_matrix_0.setIdentifier( 0, "A" );
             binary_states_matrix_0.setIdentifier( 1, "B" );
             binary_states_matrix_0.setIdentifier( 2, "C" );
@@ -1477,11 +1464,11 @@ public class TestSurfacing {
             if ( cd0.toBinaryDomainCombinations().size() != 3 ) {
                 return false;
             }
-            final BasicBinaryDomainCombination s0 = new BasicBinaryDomainCombination( "key0", "a" );
-            final BasicBinaryDomainCombination s1 = new BasicBinaryDomainCombination( "b", "key0" );
-            final BasicBinaryDomainCombination s2 = new BasicBinaryDomainCombination( "key0", "c" );
-            final BasicBinaryDomainCombination s3 = new BasicBinaryDomainCombination( "key0", "cc" );
-            final BasicBinaryDomainCombination s4 = new BasicBinaryDomainCombination( "c", "key0" );
+            final BasicBinaryDomainCombination s0 = BasicBinaryDomainCombination.obtainInstance( "key0", "a" );
+            final BasicBinaryDomainCombination s1 = BasicBinaryDomainCombination.obtainInstance( "b", "key0" );
+            final BasicBinaryDomainCombination s2 = BasicBinaryDomainCombination.obtainInstance( "key0", "c" );
+            final BasicBinaryDomainCombination s3 = BasicBinaryDomainCombination.obtainInstance( "key0", "cc" );
+            final BasicBinaryDomainCombination s4 = BasicBinaryDomainCombination.obtainInstance( "c", "key0" );
             if ( !cd0.toBinaryDomainCombinations().contains( s0 ) ) {
                 return false;
             }
@@ -1527,7 +1514,7 @@ public class TestSurfacing {
             if ( cd1.toBinaryDomainCombinations().size() != 4 ) {
                 return false;
             }
-            final BasicBinaryDomainCombination kk = new BasicBinaryDomainCombination( "key1", "key1" );
+            final BasicBinaryDomainCombination kk = BasicBinaryDomainCombination.obtainInstance( "key1", "key1" );
             if ( !cd1.toBinaryDomainCombinations().contains( kk ) ) {
                 return false;
             }
@@ -1712,15 +1699,15 @@ public class TestSurfacing {
             if ( cd0.toBinaryDomainCombinations().size() != 3 ) {
                 return false;
             }
-            final BinaryDomainCombination s0 = new DirectedBinaryDomainCombination( "key0", "a" );
-            final BinaryDomainCombination s1 = new DirectedBinaryDomainCombination( "b", "key0" );
-            final BinaryDomainCombination s2 = new DirectedBinaryDomainCombination( "key0", "c" );
-            final BinaryDomainCombination s3 = new DirectedBinaryDomainCombination( "key0", "cc" );
-            final BinaryDomainCombination s4 = new DirectedBinaryDomainCombination( "a", "b" );
-            final BinaryDomainCombination s5 = new DirectedBinaryDomainCombination( "b", "a" );
-            final BinaryDomainCombination s6 = new DirectedBinaryDomainCombination( "key0", "b" );
-            final BinaryDomainCombination s7 = new DirectedBinaryDomainCombination( "a", "key0" );
-            final BinaryDomainCombination s8 = new DirectedBinaryDomainCombination( "c", "key0" );
+            final BinaryDomainCombination s0 = DirectedBinaryDomainCombination.obtainInstance( "key0", "a" );
+            final BinaryDomainCombination s1 = DirectedBinaryDomainCombination.obtainInstance( "b", "key0" );
+            final BinaryDomainCombination s2 = DirectedBinaryDomainCombination.obtainInstance( "key0", "c" );
+            final BinaryDomainCombination s3 = DirectedBinaryDomainCombination.obtainInstance( "key0", "cc" );
+            final BinaryDomainCombination s4 = DirectedBinaryDomainCombination.obtainInstance( "a", "b" );
+            final BinaryDomainCombination s5 = DirectedBinaryDomainCombination.obtainInstance( "b", "a" );
+            final BinaryDomainCombination s6 = DirectedBinaryDomainCombination.obtainInstance( "key0", "b" );
+            final BinaryDomainCombination s7 = DirectedBinaryDomainCombination.obtainInstance( "a", "key0" );
+            final BinaryDomainCombination s8 = DirectedBinaryDomainCombination.obtainInstance( "c", "key0" );
             if ( !cd0.toBinaryDomainCombinations().contains( s0 ) ) {
                 return false;
             }
@@ -1778,7 +1765,7 @@ public class TestSurfacing {
             if ( cd1.toBinaryDomainCombinations().size() != 4 ) {
                 return false;
             }
-            final BinaryDomainCombination kk = new DirectedBinaryDomainCombination( "key1", "key1" );
+            final BinaryDomainCombination kk = DirectedBinaryDomainCombination.obtainInstance( "key1", "key1" );
             if ( !cd1.toBinaryDomainCombinations().contains( kk ) ) {
                 return false;
             }
@@ -1827,85 +1814,112 @@ public class TestSurfacing {
             list_1.add( five_1 );
             final GenomeWideCombinableDomains gwcd_1 = BasicGenomeWideCombinableDomains
                     .createInstance( list_1, false, new BasicSpecies( "1" ), DomainCombinationType.DIRECTED );
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "A", "B" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "A",
+                    "B" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "B", "A" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "B", "A" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "A", "A" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "A", "A" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "A", "C" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "A",
+                    "C" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "C", "A" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "C", "A" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "B", "C" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "B",
+                    "C" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "C", "X" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "C",
+                    "X" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "C", "Y" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "C",
+                    "Y" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "A", "X" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "A",
+                    "X" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "A", "Y" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "A",
+                    "Y" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "Y", "A" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "Y",
+                    "A" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "X", "A" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "X", "A" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "C", "B" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "C", "B" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "X", "Y" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "X",
+                    "Y" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "Y", "X" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "Y",
+                    "X" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "A", "Y" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "A",
+                    "Y" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "A", "X" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "A",
+                    "X" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "Y", "C" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "Y", "C" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "M", "N" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "M",
+                    "N" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "N", "M" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "N",
+                    "M" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "N", "P" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "N",
+                    "P" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "M", "P" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "M",
+                    "P" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "P", "N" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "P", "N" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "P", "M" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "P", "M" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "XX", "YY" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "XX",
+                    "YY" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "YY", "XX" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "YY",
+                    "XX" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "B", "B" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "B", "B" ) ) ) {
                 return false;
             }
             //            final List<GenomeWideCombinableDomains> gwcd_list = new ArrayList<GenomeWideCombinableDomains>();
@@ -1921,7 +1935,7 @@ public class TestSurfacing {
             //            if ( matrix_bc.getState( 0, 0 ) != X ) {
             //                return false;
             //            }
-            //        
+            //
             //
             //            final BasicCharacterStateMatrix<BinaryStates> dm = new BasicCharacterStateMatrix<BinaryStates>( new BinaryStates[][] {
             //                    { X, X, X, X, X, X }, { X, X, X, X, X, X } } );
@@ -2403,115 +2417,115 @@ public class TestSurfacing {
             final GenomeWideCombinableDomains gwcd_1 = BasicGenomeWideCombinableDomains
                     .createInstance( list_1, false, new BasicSpecies( "1" ), DomainCombinationType.DIRECTED_ADJACTANT );
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "A", "B" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "A", "B" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "B", "A" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "B", "A" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "A", "A" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "A", "A" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "A", "C" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "A", "C" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "C", "A" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "C", "A" ) ) ) {
                 return false;
             }
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "B", "C" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "B", "C" ) ) ) {
                 return false;
             }
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "C", "X" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "C", "X" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "C", "Y" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "C", "Y" ) ) ) {
                 return false;
             }
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "X", "Y" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "X", "Y" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "A", "X" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "A", "X" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "A", "Y" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "A", "Y" ) ) ) {
                 return false;
             }
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "Y", "A" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "Y", "A" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "X", "A" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "X", "A" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "C", "B" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "C", "B" ) ) ) {
                 return false;
             }
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "X", "Y" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "X", "Y" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "Y", "X" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "Y", "X" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "A", "Y" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "A", "Y" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "A", "X" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "A", "X" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "Y", "C" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "Y", "C" ) ) ) {
                 return false;
             }
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "M", "N" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "M", "N" ) ) ) {
                 return false;
             }
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "N", "M" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "N", "M" ) ) ) {
                 return false;
             }
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "N", "P" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "N", "P" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "M", "P" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "M", "P" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "P", "N" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "P", "N" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "P", "M" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "P", "M" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "XX", "YY" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "XX", "YY" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "YY", "XX" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "YY", "XX" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "B", "B" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "B", "B" ) ) ) {
                 return false;
             }
         }
@@ -2820,256 +2834,256 @@ public class TestSurfacing {
             if ( shared_i.size() != 3 ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "a", "a" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "a" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "b", "a" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "a" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "a", "c" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "c" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "a", "d" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "d" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "a", "e" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "e" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "b", "c" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "c" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "b", "d" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "d" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "b", "e" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "e" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "c", "d" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "c", "d" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "c", "e" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "c", "e" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "d", "e" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "d", "e" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "e", "f" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "e", "f" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "g", "h" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "g", "h" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "f", "f" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "f", "f" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "e", "e" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "e", "e" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "a", "i" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "i" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "a", "l" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "l" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "b", "i" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "i" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "b", "l" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "l" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "c", "i" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "c", "i" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "c", "l" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "c", "l" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "i", "l" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "i", "l" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "i", "f" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "i", "f" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "m", "n" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "m", "n" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "j", "k" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "j", "k" ) ) ) {
                 return false;
             }
-            if ( a_ni.contains( new BasicBinaryDomainCombination( "a", "g" ) ) ) {
+            if ( a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "g" ) ) ) {
                 return false;
             }
-            if ( a_ni.contains( new BasicBinaryDomainCombination( "a", "m" ) ) ) {
+            if ( a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "m" ) ) ) {
                 return false;
             }
-            if ( a_i.contains( new BasicBinaryDomainCombination( "a", "a" ) ) ) {
+            if ( a_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "a" ) ) ) {
                 return false;
             }
-            if ( a_i.contains( new BasicBinaryDomainCombination( "f", "f" ) ) ) {
+            if ( a_i.contains( BasicBinaryDomainCombination.obtainInstance( "f", "f" ) ) ) {
                 return false;
             }
-            if ( a_i.contains( new BasicBinaryDomainCombination( "e", "e" ) ) ) {
+            if ( a_i.contains( BasicBinaryDomainCombination.obtainInstance( "e", "e" ) ) ) {
                 return false;
             }
-            if ( !shared_ni.contains( new BasicBinaryDomainCombination( "a", "a" ) ) ) {
+            if ( !shared_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "a" ) ) ) {
                 return false;
             }
-            if ( !shared_ni.contains( new BasicBinaryDomainCombination( "a", "b" ) ) ) {
+            if ( !shared_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "b" ) ) ) {
                 return false;
             }
-            if ( !shared_ni.contains( new BasicBinaryDomainCombination( "a", "c" ) ) ) {
+            if ( !shared_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "c" ) ) ) {
                 return false;
             }
-            if ( !shared_ni.contains( new BasicBinaryDomainCombination( "b", "c" ) ) ) {
+            if ( !shared_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "c" ) ) ) {
                 return false;
             }
-            if ( !shared_ni.contains( new BasicBinaryDomainCombination( "f", "f" ) ) ) {
+            if ( !shared_ni.contains( BasicBinaryDomainCombination.obtainInstance( "f", "f" ) ) ) {
                 return false;
             }
-            if ( shared_ni.contains( new BasicBinaryDomainCombination( "m", "n" ) ) ) {
+            if ( shared_ni.contains( BasicBinaryDomainCombination.obtainInstance( "m", "n" ) ) ) {
                 return false;
             }
-            if ( shared_i.contains( new BasicBinaryDomainCombination( "a", "a" ) ) ) {
+            if ( shared_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "a" ) ) ) {
                 return false;
             }
-            if ( !shared_i.contains( new BasicBinaryDomainCombination( "a", "b" ) ) ) {
+            if ( !shared_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "b" ) ) ) {
                 return false;
             }
-            if ( !shared_i.contains( new BasicBinaryDomainCombination( "a", "c" ) ) ) {
+            if ( !shared_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "c" ) ) ) {
                 return false;
             }
-            if ( !shared_i.contains( new BasicBinaryDomainCombination( "b", "c" ) ) ) {
+            if ( !shared_i.contains( BasicBinaryDomainCombination.obtainInstance( "b", "c" ) ) ) {
                 return false;
             }
-            if ( shared_i.contains( new BasicBinaryDomainCombination( "f", "f" ) ) ) {
+            if ( shared_i.contains( BasicBinaryDomainCombination.obtainInstance( "f", "f" ) ) ) {
                 return false;
             }
-            if ( shared_i.contains( new BasicBinaryDomainCombination( "m", "n" ) ) ) {
+            if ( shared_i.contains( BasicBinaryDomainCombination.obtainInstance( "m", "n" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "a", "d" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "d" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "a", "e" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "b", "d" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "d" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "b", "e" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "c", "d" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "c", "d" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "c", "e" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "c", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "d", "e" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "d", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "e", "f" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "e", "f" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "g", "h" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "g", "h" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "e", "e" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "e", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "a", "d" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "d" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "a", "e" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "b", "d" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "b", "d" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "b", "e" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "b", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "c", "d" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "c", "d" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "c", "e" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "c", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "d", "e" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "d", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "e", "f" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "e", "f" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "g", "h" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "g", "h" ) ) ) {
                 return false;
             }
-            if ( s_0_i.contains( new BasicBinaryDomainCombination( "e", "e" ) ) ) {
+            if ( s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "e", "e" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "a", "i" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "i" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "a", "l" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "l" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "b", "i" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "i" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "b", "l" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "l" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "c", "i" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "c", "i" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "c", "l" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "c", "l" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "l", "i" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "l", "i" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "i", "f" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "i", "f" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "m", "n" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "m", "n" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "j", "k" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "j", "k" ) ) ) {
                 return false;
             }
-            if ( s_1_ni.contains( new BasicBinaryDomainCombination( "a", "b" ) ) ) {
+            if ( s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "b" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "a", "i" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "i" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "a", "l" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "l" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "b", "i" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "b", "i" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "b", "l" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "b", "l" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "c", "i" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "c", "i" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "c", "l" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "c", "l" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "l", "i" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "l", "i" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "i", "f" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "i", "f" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "m", "n" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "m", "n" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "j", "k" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "j", "k" ) ) ) {
                 return false;
             }
-            if ( s_1_i.contains( new BasicBinaryDomainCombination( "a", "b" ) ) ) {
+            if ( s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "b" ) ) ) {
                 return false;
             }
             if ( !isEqual( calc_ni.calculateSharedBinaryDomainCombinationBasedGenomeSimilarityScore(),
@@ -3186,36 +3200,43 @@ public class TestSurfacing {
                 return false;
             }
             if ( !calc_u.getBinaryDomainCombinationsSpecificToGenome0()
-                    .contains( new BasicBinaryDomainCombination( "v", "u" ) ) ) {
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "v", "u" ) ) ) {
                 return false;
             }
             if ( !calc_u.getBinaryDomainCombinationsSpecificToGenome0()
-                    .contains( new BasicBinaryDomainCombination( "w", "v" ) ) ) {
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "w", "v" ) ) ) {
                 return false;
             }
             if ( !calc_u.getBinaryDomainCombinationsSpecificToGenome0()
-                    .contains( new BasicBinaryDomainCombination( "w", "x" ) ) ) {
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "w", "x" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getSharedBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "w", "u" ) ) ) {
+            if ( !calc_u.getSharedBinaryDomainCombinations()
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "w", "u" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getSharedBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "z", "y" ) ) ) {
+            if ( !calc_u.getSharedBinaryDomainCombinations()
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "z", "y" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "v", "u" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "v",
+                    "u" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "w", "v" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "w",
+                    "v" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "w", "x" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "w",
+                    "x" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "w", "u" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "w",
+                    "u" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "z", "y" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "z",
+                    "y" ) ) ) {
                 return false;
             }
             calc_u.setAllowDomainsToBeIgnored( true );
@@ -3286,36 +3307,43 @@ public class TestSurfacing {
                 return false;
             }
             if ( calc_u.getBinaryDomainCombinationsSpecificToGenome0()
-                    .contains( new BasicBinaryDomainCombination( "v", "u" ) ) ) {
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "v", "u" ) ) ) {
                 return false;
             }
             if ( !calc_u.getBinaryDomainCombinationsSpecificToGenome0()
-                    .contains( new BasicBinaryDomainCombination( "w", "v" ) ) ) {
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "w", "v" ) ) ) {
                 return false;
             }
             if ( !calc_u.getBinaryDomainCombinationsSpecificToGenome0()
-                    .contains( new BasicBinaryDomainCombination( "w", "x" ) ) ) {
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "w", "x" ) ) ) {
                 return false;
             }
-            if ( calc_u.getSharedBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "w", "u" ) ) ) {
+            if ( calc_u.getSharedBinaryDomainCombinations()
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "w", "u" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getSharedBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "z", "y" ) ) ) {
+            if ( !calc_u.getSharedBinaryDomainCombinations()
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "z", "y" ) ) ) {
                 return false;
             }
-            if ( calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "v", "u" ) ) ) {
+            if ( calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "v",
+                    "u" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "w", "v" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "w",
+                    "v" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "w", "x" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "w",
+                    "x" ) ) ) {
                 return false;
             }
-            if ( calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "w", "u" ) ) ) {
+            if ( calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "w",
+                    "u" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "z", "y" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "z",
+                    "y" ) ) ) {
                 return false;
             }
             calc_u.setAllowDomainsToBeIgnored( false );
@@ -3392,10 +3420,12 @@ public class TestSurfacing {
             if ( calc_u.getAllBinaryDomainCombinations().size() != 1 ) {
                 return false;
             }
-            if ( !calc_u.getSharedBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "y", "z" ) ) ) {
+            if ( !calc_u.getSharedBinaryDomainCombinations()
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "y", "z" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "z", "y" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "z",
+                    "y" ) ) ) {
                 return false;
             }
             if ( !isEqual( calc_u.calculateSharedBinaryDomainCombinationBasedGenomeSimilarityScore(),
@@ -3440,7 +3470,7 @@ public class TestSurfacing {
     private static boolean testDomainCombinationCounting( final File test_dir ) {
         try {
             final HmmPfamOutputParser parser = new HmmPfamOutputParser( new File( test_dir
-                    + ForesterUtil.getFileSeparator() + "hmmpfam_output2" ), "human", "ls" );
+                                                                                  + ForesterUtil.getFileSeparator() + "hmmpfam_output2" ), "human", "ls" );
             parser.setEValueMaximum( 0.2 );
             parser.setIgnoreDufs( true );
             parser.setReturnType( HmmPfamOutputParser.ReturnType.UNORDERED_PROTEIN_DOMAIN_COLLECTION_PER_PROTEIN );
@@ -4378,128 +4408,128 @@ public class TestSurfacing {
             if ( bc0.size() != 15 ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "a", "a" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "a", "a" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "a", "b" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "a", "b" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "b", "a" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "b", "a" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "a", "c" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "a", "c" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "a", "d" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "a", "d" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "a", "e" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "a", "e" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "b", "c" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "b", "c" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "b", "d" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "b", "d" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "b", "e" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "b", "e" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "c", "d" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "c", "d" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "c", "e" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "c", "e" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "d", "e" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "d", "e" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "e", "f" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "e", "f" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "e", "e" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "e", "e" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "f", "f" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "f", "f" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "g", "h" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "g", "h" ) ) ) {
                 return false;
             }
-            if ( bc0.contains( new BasicBinaryDomainCombination( "f", "a" ) ) ) {
+            if ( bc0.contains( BasicBinaryDomainCombination.obtainInstance( "f", "a" ) ) ) {
                 return false;
             }
-            if ( bc0.contains( new BasicBinaryDomainCombination( "f", "b" ) ) ) {
+            if ( bc0.contains( BasicBinaryDomainCombination.obtainInstance( "f", "b" ) ) ) {
                 return false;
             }
-            if ( bc0.contains( new BasicBinaryDomainCombination( "a", "h" ) ) ) {
+            if ( bc0.contains( BasicBinaryDomainCombination.obtainInstance( "a", "h" ) ) ) {
                 return false;
             }
-            if ( bc0.contains( new BasicBinaryDomainCombination( "a", "g" ) ) ) {
+            if ( bc0.contains( BasicBinaryDomainCombination.obtainInstance( "a", "g" ) ) ) {
                 return false;
             }
             final SortedSet<BinaryDomainCombination> bc1 = eel_ignore.toBinaryDomainCombinations();
             if ( bc1.size() != 12 ) {
                 return false;
             }
-            if ( bc1.contains( new BasicBinaryDomainCombination( "a", "a" ) ) ) {
+            if ( bc1.contains( BasicBinaryDomainCombination.obtainInstance( "a", "a" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "a", "b" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "a", "b" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "b", "a" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "b", "a" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "a", "c" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "a", "c" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "a", "d" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "a", "d" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "a", "e" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "a", "e" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "b", "c" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "b", "c" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "b", "d" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "b", "d" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "b", "e" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "b", "e" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "c", "d" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "c", "d" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "c", "e" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "c", "e" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "d", "e" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "d", "e" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "e", "f" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "e", "f" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "g", "h" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "g", "h" ) ) ) {
                 return false;
             }
-            if ( bc1.contains( new BasicBinaryDomainCombination( "e", "e" ) ) ) {
+            if ( bc1.contains( BasicBinaryDomainCombination.obtainInstance( "e", "e" ) ) ) {
                 return false;
             }
-            if ( bc1.contains( new BasicBinaryDomainCombination( "f", "f" ) ) ) {
+            if ( bc1.contains( BasicBinaryDomainCombination.obtainInstance( "f", "f" ) ) ) {
                 return false;
             }
-            if ( bc1.contains( new BasicBinaryDomainCombination( "f", "a" ) ) ) {
+            if ( bc1.contains( BasicBinaryDomainCombination.obtainInstance( "f", "a" ) ) ) {
                 return false;
             }
-            if ( bc1.contains( new BasicBinaryDomainCombination( "f", "b" ) ) ) {
+            if ( bc1.contains( BasicBinaryDomainCombination.obtainInstance( "f", "b" ) ) ) {
                 return false;
             }
-            if ( bc1.contains( new BasicBinaryDomainCombination( "a", "g" ) ) ) {
+            if ( bc1.contains( BasicBinaryDomainCombination.obtainInstance( "a", "g" ) ) ) {
                 return false;
             }
-            if ( bc1.contains( new BasicBinaryDomainCombination( "b", "g" ) ) ) {
+            if ( bc1.contains( BasicBinaryDomainCombination.obtainInstance( "b", "g" ) ) ) {
                 return false;
             }
         }
@@ -4513,7 +4543,7 @@ public class TestSurfacing {
     private static boolean testHmmPfamOutputParser( final File test_dir ) {
         try {
             final HmmPfamOutputParser parser = new HmmPfamOutputParser( new File( test_dir
-                    + ForesterUtil.getFileSeparator() + "hmmpfam_output" ), "human", "ls" );
+                                                                                  + ForesterUtil.getFileSeparator() + "hmmpfam_output" ), "human", "ls" );
             parser.setEValueMaximum( 0.2 );
             parser.setIgnoreDufs( true );
             parser.setReturnType( HmmPfamOutputParser.ReturnType.UNORDERED_PROTEIN_DOMAIN_COLLECTION_PER_PROTEIN );
@@ -4590,14 +4620,8 @@ public class TestSurfacing {
             if ( uba_domain.getTo() != 57 ) {
                 return false;
             }
-            if ( !Test.isEqual( uba_domain.getPerSequenceEvalue(), 0.00084 ) ) {
-                return false;
-            }
-            if ( !Test.isEqual( uba_domain.getPerSequenceScore(), 23.2 ) ) {
-                return false;
-            }
             final HmmPfamOutputParser parser2 = new HmmPfamOutputParser( new File( test_dir
-                    + ForesterUtil.getFileSeparator() + "hmmpfam_output_short" ), "human", "ls" );
+                                                                                   + ForesterUtil.getFileSeparator() + "hmmpfam_output_short" ), "human", "ls" );
             parser2.setEValueMaximum( 0.2 );
             parser2.setIgnoreDufs( true );
             parser2.setReturnType( HmmPfamOutputParser.ReturnType.UNORDERED_PROTEIN_DOMAIN_COLLECTION_PER_PROTEIN );
@@ -4677,9 +4701,6 @@ public class TestSurfacing {
             if ( uba_domain2.getTo() != 57 ) {
                 return false;
             }
-            if ( !Test.isEqual( uba_domain2.getPerSequenceEvalue(), 0.00084 ) ) {
-                return false;
-            }
         }
         catch ( final Exception e ) {
             e.printStackTrace( System.out );
@@ -4691,7 +4712,7 @@ public class TestSurfacing {
     private static boolean testHmmPfamOutputParserWithFilter( final File test_dir ) {
         try {
             HmmPfamOutputParser parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator()
-                    + "hmmpfam_output3" ), "human", "ls" );
+                                                                            + "hmmpfam_output3" ), "human", "ls" );
             parser.setEValueMaximum( 0.2 );
             parser.setIgnoreDufs( true );
             parser.setReturnType( HmmPfamOutputParser.ReturnType.UNORDERED_PROTEIN_DOMAIN_COLLECTION_PER_PROTEIN );
@@ -4709,7 +4730,6 @@ public class TestSurfacing {
             filter.add( "strange" );
             parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator() + "hmmpfam_output3" ),
                                               "human",
-                                              "ls",
                                               filter,
                                               HmmPfamOutputParser.FilterType.NEGATIVE_PROTEIN );
             parser.setEValueMaximum( 0.2 );
@@ -4729,7 +4749,6 @@ public class TestSurfacing {
             filter.add( "strange" );
             parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator() + "hmmpfam_output3" ),
                                               "human",
-                                              "ls",
                                               filter,
                                               HmmPfamOutputParser.FilterType.POSITIVE_PROTEIN );
             parser.setEValueMaximum( 0.2 );
@@ -4750,7 +4769,6 @@ public class TestSurfacing {
             filter.add( "C" );
             parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator() + "hmmpfam_output3" ),
                                               "human",
-                                              "ls",
                                               filter,
                                               HmmPfamOutputParser.FilterType.POSITIVE_PROTEIN );
             parser.setEValueMaximum( 0.2 );
@@ -4772,7 +4790,6 @@ public class TestSurfacing {
             filter.add( "X" );
             parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator() + "hmmpfam_output3" ),
                                               "human",
-                                              "ls",
                                               filter,
                                               HmmPfamOutputParser.FilterType.NEGATIVE_DOMAIN );
             parser.setEValueMaximum( 0.2 );
@@ -4793,7 +4810,6 @@ public class TestSurfacing {
             filter.add( "C" );
             parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator() + "hmmpfam_output3" ),
                                               "human",
-                                              "ls",
                                               filter,
                                               HmmPfamOutputParser.FilterType.NEGATIVE_PROTEIN );
             parser.setEValueMaximum( 0.2 );
@@ -4812,7 +4828,6 @@ public class TestSurfacing {
             filter.add( "UIM" );
             parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator() + "hmmpfam_output3" ),
                                               "human",
-                                              "ls",
                                               filter,
                                               HmmPfamOutputParser.FilterType.NEGATIVE_PROTEIN );
             parser.setEValueMaximum( 0.2 );
@@ -4834,7 +4849,6 @@ public class TestSurfacing {
             filter.add( "UIM" );
             parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator() + "hmmpfam_output3" ),
                                               "human",
-                                              "ls",
                                               filter,
                                               HmmPfamOutputParser.FilterType.POSITIVE_PROTEIN );
             parser.setEValueMaximum( 0.2 );
@@ -4857,7 +4871,6 @@ public class TestSurfacing {
             filter.add( "C" );
             parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator() + "hmmpfam_output3" ),
                                               "human",
-                                              "ls",
                                               filter,
                                               HmmPfamOutputParser.FilterType.POSITIVE_PROTEIN );
             parser.setEValueMaximum( 0.2 );
@@ -5413,73 +5426,5 @@ public class TestSurfacing {
         return true;
     }
 
-    private static boolean testPaupLogParser( final File test_dir ) {
-        try {
-            final PaupLogParser parser = new PaupLogParser();
-            parser.setSource( new File( test_dir + ForesterUtil.getFileSeparator() + "paup_log_test_1" ) );
-            final CharacterStateMatrix<BinaryStates> matrix = parser.parse();
-            if ( matrix.getNumberOfIdentifiers() != 8 ) {
-                return false;
-            }
-            if ( !matrix.getIdentifier( 0 ).equals( "MOUSE" ) ) {
-                return false;
-            }
-            if ( !matrix.getIdentifier( 1 ).equals( "NEMVE" ) ) {
-                return false;
-            }
-            if ( !matrix.getIdentifier( 2 ).equals( "MONBE" ) ) {
-                return false;
-            }
-            if ( !matrix.getIdentifier( 3 ).equals( "DICDI" ) ) {
-                return false;
-            }
-            if ( !matrix.getIdentifier( 4 ).equals( "ARATH" ) ) {
-                return false;
-            }
-            if ( !matrix.getIdentifier( 5 ).equals( "6" ) ) {
-                return false;
-            }
-            if ( !matrix.getIdentifier( 6 ).equals( "7" ) ) {
-                return false;
-            }
-            if ( !matrix.getIdentifier( 7 ).equals( "8" ) ) {
-                return false;
-            }
-            if ( matrix.getNumberOfCharacters() != ( 66 + 66 + 28 ) ) {
-                return false;
-            }
-            if ( matrix.getState( 0, 4 ) != BinaryStates.ABSENT ) {
-                return false;
-            }
-            if ( matrix.getState( 0, 5 ) != BinaryStates.PRESENT ) {
-                return false;
-            }
-            if ( matrix.getState( 1, 5 ) != BinaryStates.PRESENT ) {
-                return false;
-            }
-            if ( matrix.getState( 7, 154 ) != BinaryStates.ABSENT ) {
-                return false;
-            }
-            if ( matrix.getState( 7, 155 ) != BinaryStates.PRESENT ) {
-                return false;
-            }
-            if ( matrix.getState( 7, 156 ) != BinaryStates.PRESENT ) {
-                return false;
-            }
-            if ( matrix.getState( 7, 157 ) != BinaryStates.ABSENT ) {
-                return false;
-            }
-            if ( matrix.getState( 7, 158 ) != BinaryStates.PRESENT ) {
-                return false;
-            }
-            if ( matrix.getState( 7, 159 ) != BinaryStates.ABSENT ) {
-                return false;
-            }
-        }
-        catch ( final Exception e ) {
-            e.printStackTrace( System.out );
-            return false;
-        }
-        return true;
-    }
+   
 }