taxonomy extraction changed
[jalview.git] / forester / java / src / org / forester / test / Test.java
index afab717..598ad3a 100644 (file)
@@ -57,6 +57,7 @@ import org.forester.io.parsers.phyloxml.PhyloXmlParser;
 import org.forester.io.parsers.tol.TolParser;
 import org.forester.io.parsers.util.ParserUtils;
 import org.forester.io.writers.PhylogenyWriter;
+import org.forester.io.writers.SequenceWriter;
 import org.forester.msa.BasicMsa;
 import org.forester.msa.Mafft;
 import org.forester.msa.Msa;
@@ -173,6 +174,15 @@ public final class Test {
             System.exit( -1 );
         }
         final long start_time = new Date().getTime();
+        System.out.print( "Sequence writer: " );
+        if ( testSequenceWriter() ) {
+            System.out.println( "OK." );
+            succeeded++;
+        }
+        else {
+            System.out.println( "failed." );
+            failed++;
+        }
         System.out.print( "Sequence id parsing: " );
         if ( testSequenceIdParsing() ) {
             System.out.println( "OK." );
@@ -209,6 +219,15 @@ public final class Test {
             System.out.println( "failed." );
             failed++;
         }
+        System.out.print( "SN extraction: " );
+        if ( Test.testExtractSNFromNodeName() ) {
+            System.out.println( "OK." );
+            succeeded++;
+        }
+        else {
+            System.out.println( "failed." );
+            failed++;
+        }
         System.out.print( "Taxonomy extraction (general): " );
         if ( Test.testTaxonomyExtraction() ) {
             System.out.println( "OK." );
@@ -1041,12 +1060,55 @@ public final class Test {
             if ( !AptxUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.NCBI_NUCCORE + "XM_002122186" ) ) {
                 return false;
             }
-            n.setName( "AAA34956" );
+            n.setName( "dgh_AAA34956_gdg" );
             if ( !AptxUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.NCBI_PROTEIN + "AAA34956" ) ) {
                 return false;
             }
-            n.setName( "Q06891.1" );
-            if ( !AptxUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.NCBI_PROTEIN + "Q06891" ) ) {
+            n.setName( "j40f4_Q06891.1_fndn2 fnr3" );
+            if ( !AptxUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.NCBI_PROTEIN + "Q06891.1" ) ) {
+                return false;
+            }
+            n.setName( "GI:394892" );
+            if ( !AptxUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.NCBI_GI + "394892" ) ) {
+                System.out.println( AptxUtil.createUriForSeqWeb( n, null, null ) );
+                return false;
+            }
+            n.setName( "gi_394892" );
+            if ( !AptxUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.NCBI_GI + "394892" ) ) {
+                System.out.println( AptxUtil.createUriForSeqWeb( n, null, null ) );
+                return false;
+            }
+            n.setName( "gi6335_gi_394892_56635_Gi_43" );
+            if ( !AptxUtil.createUriForSeqWeb( n, null, null ).equals( ForesterUtil.NCBI_GI + "394892" ) ) {
+                System.out.println( AptxUtil.createUriForSeqWeb( n, null, null ) );
+                return false;
+            }
+        }
+        catch ( final Exception e ) {
+            e.printStackTrace( System.out );
+            return false;
+        }
+        return true;
+    }
+
+    private static boolean testExtractSNFromNodeName() {
+        try {
+            if ( !ParserUtils.extractScientificNameFromNodeName( "BCDO2_Mus_musculus" ).equals( "Mus musculus" ) ) {
+                return false;
+            }
+            if ( !ParserUtils.extractScientificNameFromNodeName( "BCDO2_Mus_musculus_musculus" )
+                    .equals( "Mus musculus musculus" ) ) {
+                return false;
+            }
+            if ( !ParserUtils.extractScientificNameFromNodeName( "BCDO2_Mus_musculus_musculus-12" )
+                    .equals( "Mus musculus musculus" ) ) {
+                return false;
+            }
+            if ( !ParserUtils.extractScientificNameFromNodeName( " -XS12_Mus_musculus-12" ).equals( "Mus musculus" ) ) {
+                return false;
+            }
+            if ( !ParserUtils.extractScientificNameFromNodeName( " -1234_Mus_musculus-12 affrre e" )
+                    .equals( "Mus musculus" ) ) {
                 return false;
             }
         }
@@ -1059,23 +1121,83 @@ public final class Test {
 
     private static boolean testExtractTaxonomyCodeFromNodeName() {
         try {
-            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "MOUSE", TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED )
-                    .equals( "MOUSE" ) ) {
+            if ( ParserUtils.extractTaxonomyCodeFromNodeName( "MOUSE", TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED ) != null ) {
                 return false;
             }
-            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "RAT", TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED )
-                    .equals( "RAT" ) ) {
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "SOYBN", TAXONOMY_EXTRACTION.AGGRESSIVE )
+                    .equals( "SOYBN" ) ) {
+                return false;
+            }
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( " ARATH ", TAXONOMY_EXTRACTION.AGGRESSIVE )
+                    .equals( "ARATH" ) ) {
+                return false;
+            }
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( " ARATH ", TAXONOMY_EXTRACTION.AGGRESSIVE )
+                    .equals( "ARATH" ) ) {
+                return false;
+            }
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "RAT", TAXONOMY_EXTRACTION.AGGRESSIVE ).equals( "RAT" ) ) {
+                return false;
+            }
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "RAT", TAXONOMY_EXTRACTION.AGGRESSIVE ).equals( "RAT" ) ) {
                 return false;
             }
             if ( ParserUtils.extractTaxonomyCodeFromNodeName( "RAT1", TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED ) != null ) {
                 return false;
             }
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( " _SOYBN", TAXONOMY_EXTRACTION.AGGRESSIVE )
+                    .equals( "SOYBN" ) ) {
+                return false;
+            }
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "SOYBN", TAXONOMY_EXTRACTION.AGGRESSIVE )
+                    .equals( "SOYBN" ) ) {
+                return false;
+            }
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "qwerty SOYBN", TAXONOMY_EXTRACTION.AGGRESSIVE )
+                    .equals( "SOYBN" ) ) {
+                return false;
+            }
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "qwerty_SOYBN", TAXONOMY_EXTRACTION.AGGRESSIVE )
+                    .equals( "SOYBN" ) ) {
+                return false;
+            }
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "ABCD_SOYBN ", TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED )
+                    .equals( "SOYBN" ) ) {
+                return false;
+            }
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "SOYBN", TAXONOMY_EXTRACTION.AGGRESSIVE )
+                    .equals( "SOYBN" ) ) {
+                return false;
+            }
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( ",SOYBN,", TAXONOMY_EXTRACTION.AGGRESSIVE )
+                    .equals( "SOYBN" ) ) {
+                return false;
+            }
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "xxx,SOYBN,xxx", TAXONOMY_EXTRACTION.AGGRESSIVE )
+                    .equals( "SOYBN" ) ) {
+                return false;
+            }
+            if ( ParserUtils.extractTaxonomyCodeFromNodeName( "xxxSOYBNxxx", TAXONOMY_EXTRACTION.AGGRESSIVE ) != null ) {
+                return false;
+            }
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "-SOYBN~", TAXONOMY_EXTRACTION.AGGRESSIVE )
+                    .equals( "SOYBN" ) ) {
+                return false;
+            }
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "NNN8_ECOLI/1-2:0.01",
+                                                               TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT ).equals( "ECOLI" ) ) {
+                return false;
+            }
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "blag_9YX45-blag", TAXONOMY_EXTRACTION.AGGRESSIVE )
+                    .equals( "9YX45" ) ) {
+                return false;
+            }
             if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "BCL2_MOUSE function = 23445",
                                                                TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED )
                     .equals( "MOUSE" ) ) {
                 return false;
             }
-            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "BCL2_MOUSE_function = 23445",
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "BCL2_MOUSE+function = 23445",
                                                                TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED )
                     .equals( "MOUSE" ) ) {
                 return false;
@@ -1097,7 +1219,7 @@ public final class Test {
                                                                TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED ).equals( "RAT" ) ) {
                 return false;
             }
-            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "BCL2_RAT_function = 23445",
+            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "BCL2_RAT function = 23445",
                                                                TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED ).equals( "RAT" ) ) {
                 return false;
             }
@@ -1130,19 +1252,7 @@ public final class Test {
                     .equals( "MOUSE" ) ) {
                 return false;
             }
-            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "_MOUSE_", TAXONOMY_EXTRACTION.AGRESSIVE )
-                    .equals( "MOUSE" ) ) {
-                return false;
-            }
-            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "_MOUSE_", TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED )
-                    .equals( "MOUSE" ) ) {
-                return false;
-            }
-            if ( ParserUtils.extractTaxonomyCodeFromNodeName( "_MOUSE_", TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT ) != null ) {
-                return false;
-            }
-            if ( !ParserUtils.extractTaxonomyCodeFromNodeName( "x_MOUSE_x", TAXONOMY_EXTRACTION.AGRESSIVE )
-                    .equals( "MOUSE" ) ) {
+            if ( ParserUtils.extractTaxonomyCodeFromNodeName( "_MOUSE ", TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED ) != null ) {
                 return false;
             }
         }
@@ -1882,7 +1992,7 @@ public final class Test {
             source.append( "40 41 42 43" + l );
             source.append( "  # 1 1 1 1 1 " + l );
             source.append( "50 51 52 53 54" + l );
-            final BasicTable<String> t1 = BasicTableParser.parse( source.toString(), " " );
+            final BasicTable<String> t1 = BasicTableParser.parse( source.toString(), ' ' );
             if ( t1.getNumberOfColumns() != 5 ) {
                 return false;
             }
@@ -1911,7 +2021,7 @@ public final class Test {
             source1.append( "40;41;42;43" + l );
             source1.append( "  # 1 1 1 1 1 " + l );
             source1.append( ";;;50  ;  ;52; 53;;54   " + l );
-            final BasicTable<String> t2 = BasicTableParser.parse( source1.toString(), ";" );
+            final BasicTable<String> t2 = BasicTableParser.parse( source1.toString(), ';' );
             if ( t2.getNumberOfColumns() != 5 ) {
                 return false;
             }
@@ -1948,7 +2058,7 @@ public final class Test {
             source2.append( "  comment: 1 1 1 1 1 " + l );
             source2.append( ";;;50  ;   52; 53;;54   " + l );
             final List<BasicTable<String>> tl = BasicTableParser.parse( source2.toString(),
-                                                                        ";",
+                                                                        ';',
                                                                         false,
                                                                         false,
                                                                         "comment:",
@@ -6220,12 +6330,6 @@ public final class Test {
                 System.out.println( n1.toString() );
                 return false;
             }
-            final PhylogenyNode n2 = PhylogenyNode
-                    .createInstanceFromNhxString( "12345", NHXParser.TAXONOMY_EXTRACTION.AGRESSIVE );
-            if ( !n2.getNodeData().getTaxonomy().getIdentifier().getValue().equals( "12345" ) ) {
-                System.out.println( n2.toString() );
-                return false;
-            }
             final PhylogenyNode n2x = PhylogenyNode
                     .createInstanceFromNhxString( "12345", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
             if ( n2x.getNodeData().isHasTaxonomy() ) {
@@ -6268,7 +6372,7 @@ public final class Test {
                 return false;
             }
             final PhylogenyNode n9 = PhylogenyNode
-                    .createInstanceFromNhxString( "blag_12345_blag", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
+                    .createInstanceFromNhxString( "blag_12345/blag", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
             if ( !n9.getNodeData().getTaxonomy().getIdentifier().getValue().equals( "12345" ) ) {
                 System.out.println( n9.toString() );
                 return false;
@@ -6292,53 +6396,24 @@ public final class Test {
                 return false;
             }
             final PhylogenyNode n11 = PhylogenyNode
-                    .createInstanceFromNhxString( "blag_Mus_musculus", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
+                    .createInstanceFromNhxString( "BLAG_Mus_musculus", NHXParser.TAXONOMY_EXTRACTION.AGGRESSIVE );
             if ( !n11.getNodeData().getTaxonomy().getScientificName().equals( "Mus musculus" ) ) {
                 System.out.println( n11.toString() );
                 return false;
             }
             final PhylogenyNode n12 = PhylogenyNode
-                    .createInstanceFromNhxString( "blag_Mus_musculus_musculus",
-                                                  NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
+                    .createInstanceFromNhxString( "BLAG_Mus_musculus_musculus",
+                                                  NHXParser.TAXONOMY_EXTRACTION.AGGRESSIVE );
             if ( !n12.getNodeData().getTaxonomy().getScientificName().equals( "Mus musculus musculus" ) ) {
                 System.out.println( n12.toString() );
                 return false;
             }
             final PhylogenyNode n13 = PhylogenyNode
-                    .createInstanceFromNhxString( "blag_Mus_musculus1",
-                                                  NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
+                    .createInstanceFromNhxString( "BLAG_Mus_musculus1", NHXParser.TAXONOMY_EXTRACTION.AGGRESSIVE );
             if ( n13.getNodeData().isHasTaxonomy() ) {
                 System.out.println( n13.toString() );
                 return false;
             }
-            final PhylogenyNode n14 = PhylogenyNode
-                    .createInstanceFromNhxString( "blag_Mus_musculus_11",
-                                                  NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
-            if ( n14.getNodeData().isHasTaxonomy() ) {
-                System.out.println( n14.toString() );
-                return false;
-            }
-            final PhylogenyNode n15 = PhylogenyNode
-                    .createInstanceFromNhxString( "blag_Mus_musculus_v11",
-                                                  NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
-            if ( !n15.getNodeData().getTaxonomy().getScientificName().equals( "Mus musculus v11" ) ) {
-                System.out.println( n15.toString() );
-                return false;
-            }
-            final PhylogenyNode n16 = PhylogenyNode
-                    .createInstanceFromNhxString( "blag_Mus_musculus_/11",
-                                                  NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
-            if ( n16.getNodeData().isHasTaxonomy() ) {
-                System.out.println( n16.toString() );
-                return false;
-            }
-            final PhylogenyNode n17 = PhylogenyNode
-                    .createInstanceFromNhxString( "blag_Mus_musculus_v",
-                                                  NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
-            if ( n17.getNodeData().isHasTaxonomy() ) {
-                System.out.println( n17.toString() );
-                return false;
-            }
         }
         catch ( final Exception e ) {
             e.printStackTrace( System.out );
@@ -6395,20 +6470,21 @@ public final class Test {
                 return false;
             }
             final PhylogenyNode n8 = PhylogenyNode
-                    .createInstanceFromNhxString( "n8_ECOLI/12:0.01", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
-            if ( !n8.getName().equals( "n8_ECOLI/12" ) ) {
+                    .createInstanceFromNhxString( "ABCD_ECOLI/1-2:0.01",
+                                                  NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
+            if ( !n8.getName().equals( "ABCD_ECOLI/1-2" ) ) {
                 return false;
             }
-            if ( PhylogenyMethods.getSpecies( n8 ).equals( "ECOLI" ) ) {
+            if ( !PhylogenyMethods.getSpecies( n8 ).equals( "ECOLI" ) ) {
                 return false;
             }
             final PhylogenyNode n9 = PhylogenyNode
-                    .createInstanceFromNhxString( "n9_ECOLI/12=12:0.01",
+                    .createInstanceFromNhxString( "ABCD_ECOLI/1-12:0.01",
                                                   NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
-            if ( !n9.getName().equals( "n9_ECOLI/12=12" ) ) {
+            if ( !n9.getName().equals( "ABCD_ECOLI/1-12" ) ) {
                 return false;
             }
-            if ( PhylogenyMethods.getSpecies( n9 ).equals( "ECOLI" ) ) {
+            if ( !PhylogenyMethods.getSpecies( n9 ).equals( "ECOLI" ) ) {
                 return false;
             }
             final PhylogenyNode n10 = PhylogenyNode
@@ -6417,24 +6493,24 @@ public final class Test {
                 return false;
             }
             final PhylogenyNode n20 = PhylogenyNode
-                    .createInstanceFromNhxString( "n20_ECOLI/1-2", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
-            if ( !n20.getName().equals( "n20_ECOLI/1-2" ) ) {
+                    .createInstanceFromNhxString( "ABCD_ECOLI/1-2", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
+            if ( !n20.getName().equals( "ABCD_ECOLI/1-2" ) ) {
                 return false;
             }
             if ( !PhylogenyMethods.getSpecies( n20 ).equals( "ECOLI" ) ) {
                 return false;
             }
             final PhylogenyNode n20x = PhylogenyNode
-                    .createInstanceFromNhxString( "n20_ECOL1/1-2", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
-            if ( !n20x.getName().equals( "n20_ECOL1/1-2" ) ) {
+                    .createInstanceFromNhxString( "N20_ECOL1/1-2", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
+            if ( !n20x.getName().equals( "N20_ECOL1/1-2" ) ) {
                 return false;
             }
             if ( !PhylogenyMethods.getSpecies( n20x ).equals( "ECOL1" ) ) {
                 return false;
             }
             final PhylogenyNode n20xx = PhylogenyNode
-                    .createInstanceFromNhxString( "n20_eCOL1/1-2", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
-            if ( !n20xx.getName().equals( "n20_eCOL1/1-2" ) ) {
+                    .createInstanceFromNhxString( "N20_eCOL1/1-2", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
+            if ( !n20xx.getName().equals( "N20_eCOL1/1-2" ) ) {
                 return false;
             }
             if ( PhylogenyMethods.getSpecies( n20xx ).length() > 0 ) {
@@ -6457,8 +6533,8 @@ public final class Test {
                 return false;
             }
             final PhylogenyNode n21 = PhylogenyNode
-                    .createInstanceFromNhxString( "n21_PIG", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
-            if ( !n21.getName().equals( "n21_PIG" ) ) {
+                    .createInstanceFromNhxString( "N21_PIG", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
+            if ( !n21.getName().equals( "N21_PIG" ) ) {
                 return false;
             }
             if ( !PhylogenyMethods.getSpecies( n21 ).equals( "PIG" ) ) {
@@ -6489,70 +6565,29 @@ public final class Test {
                 return false;
             }
             final PhylogenyNode a = PhylogenyNode
-                    .createInstanceFromNhxString( "n10_ECOLI/1-2", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
-            if ( !a.getName().equals( "n10_ECOLI/1-2" ) ) {
+                    .createInstanceFromNhxString( "ABCD_ECOLI/1-2", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
+            if ( !a.getName().equals( "ABCD_ECOLI/1-2" ) ) {
                 return false;
             }
             if ( !PhylogenyMethods.getSpecies( a ).equals( "ECOLI" ) ) {
                 return false;
             }
-            final PhylogenyNode b = PhylogenyNode
-                    .createInstanceFromNhxString( "n10_ECOLI1/1-2", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
-            if ( !b.getName().equals( "n10_ECOLI1/1-2" ) ) {
-                return false;
-            }
-            if ( PhylogenyMethods.getSpecies( b ).equals( "ECOLI" ) ) {
-                return false;
-            }
-            final PhylogenyNode c = PhylogenyNode
-                    .createInstanceFromNhxString( "n10_RATAF12/1000-2000",
-                                                  NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
-            if ( !c.getName().equals( "n10_RATAF12/1000-2000" ) ) {
-                return false;
-            }
-            if ( PhylogenyMethods.getSpecies( c ).equals( "RATAF" ) ) {
-                return false;
-            }
             final PhylogenyNode c1 = PhylogenyNode
-                    .createInstanceFromNhxString( "n10_BOVIN_1/1000-2000",
-                                                  NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
-            if ( !c1.getName().equals( "n10_BOVIN_1/1000-2000" ) ) {
+                    .createInstanceFromNhxString( "n10_BOVIN/1000-2000",
+                                                  NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
+            if ( !c1.getName().equals( "n10_BOVIN/1000-2000" ) ) {
                 return false;
             }
-            if ( PhylogenyMethods.getSpecies( c1 ).equals( "BOVIN" ) ) {
+            if ( !PhylogenyMethods.getSpecies( c1 ).equals( "BOVIN" ) ) {
                 return false;
             }
             final PhylogenyNode c2 = PhylogenyNode
-                    .createInstanceFromNhxString( "n10_Bovin_1/1000-2000",
+                    .createInstanceFromNhxString( "N10_Bovin_1/1000-2000",
                                                   NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
-            if ( !c2.getName().equals( "n10_Bovin_1/1000-2000" ) ) {
-                return false;
-            }
-            if ( !PhylogenyMethods.getSpecies( c2 ).equals( "" ) ) {
-                return false;
-            }
-            final PhylogenyNode d = PhylogenyNode
-                    .createInstanceFromNhxString( "n10_RAT1/1-2", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
-            if ( !d.getName().equals( "n10_RAT1/1-2" ) ) {
-                return false;
-            }
-            if ( PhylogenyMethods.getSpecies( d ).equals( "RAT" ) ) {
+            if ( !c2.getName().equals( "N10_Bovin_1/1000-2000" ) ) {
                 return false;
             }
-            final PhylogenyNode e = PhylogenyNode
-                    .createInstanceFromNhxString( "n10_RAT1", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
-            if ( !e.getName().equals( "n10_RAT1" ) ) {
-                return false;
-            }
-            if ( !ForesterUtil.isEmpty( PhylogenyMethods.getSpecies( e ) ) ) {
-                return false;
-            }
-            final PhylogenyNode e2 = PhylogenyNode
-                    .createInstanceFromNhxString( "n10_RAT1", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
-            if ( !e2.getName().equals( "n10_RAT1" ) ) {
-                return false;
-            }
-            if ( PhylogenyMethods.getSpecies( e2 ).equals( "RAT" ) ) {
+            if ( PhylogenyMethods.getSpecies( c2 ).length() > 0 ) {
                 return false;
             }
             final PhylogenyNode e3 = PhylogenyNode
@@ -6564,21 +6599,21 @@ public final class Test {
                 return false;
             }
             final PhylogenyNode n11 = PhylogenyNode
-                    .createInstanceFromNhxString( "n111111_ECOLI/jdj:0.4",
+                    .createInstanceFromNhxString( "N111111_ECOLI/1-2:0.4",
                                                   NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
-            if ( !n11.getName().equals( "n111111_ECOLI/jdj" ) ) {
+            if ( !n11.getName().equals( "N111111_ECOLI/1-2" ) ) {
                 return false;
             }
             if ( n11.getDistanceToParent() != 0.4 ) {
                 return false;
             }
-            if ( PhylogenyMethods.getSpecies( n11 ).equals( "ECOLI" ) ) {
+            if ( !PhylogenyMethods.getSpecies( n11 ).equals( "ECOLI" ) ) {
                 return false;
             }
             final PhylogenyNode n12 = PhylogenyNode
-                    .createInstanceFromNhxString( "n111111-ECOLI---/jdj:0.4",
+                    .createInstanceFromNhxString( "N111111-ECOLI---/jdj:0.4",
                                                   NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
-            if ( !n12.getName().equals( "n111111-ECOLI---/jdj" ) ) {
+            if ( !n12.getName().equals( "N111111-ECOLI---/jdj" ) ) {
                 return false;
             }
             if ( n12.getDistanceToParent() != 0.4 ) {
@@ -6587,17 +6622,9 @@ public final class Test {
             if ( PhylogenyMethods.getSpecies( n12 ).length() > 0 ) {
                 return false;
             }
-            final PhylogenyNode m = PhylogenyNode
-                    .createInstanceFromNhxString( "n10_MOUSEa", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
-            if ( !m.getName().equals( "n10_MOUSEa" ) ) {
-                return false;
-            }
-            if ( PhylogenyMethods.getSpecies( m ).equals( "MOUSE" ) ) {
-                return false;
-            }
             final PhylogenyNode o = PhylogenyNode
-                    .createInstanceFromNhxString( "n10_MOUSE_", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
-            if ( !o.getName().equals( "n10_MOUSE_" ) ) {
+                    .createInstanceFromNhxString( "ABCD_MOUSE", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
+            if ( !o.getName().equals( "ABCD_MOUSE" ) ) {
                 return false;
             }
             if ( !PhylogenyMethods.getSpecies( o ).equals( "MOUSE" ) ) {
@@ -6634,7 +6661,7 @@ public final class Test {
                 return false;
             }
             final PhylogenyNode n13 = PhylogenyNode
-                    .createInstanceFromNhxString( "blah_12345/1-2", NHXParser.TAXONOMY_EXTRACTION.AGRESSIVE );
+                    .createInstanceFromNhxString( "blah_12345/1-2", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
             if ( !n13.getName().equals( "blah_12345/1-2" ) ) {
                 return false;
             }
@@ -6648,8 +6675,8 @@ public final class Test {
                 return false;
             }
             final PhylogenyNode n14 = PhylogenyNode
-                    .createInstanceFromNhxString( "blah_9QX45/1-2", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
-            if ( !n14.getName().equals( "blah_9QX45/1-2" ) ) {
+                    .createInstanceFromNhxString( "BLA1_9QX45/1-2", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
+            if ( !n14.getName().equals( "BLA1_9QX45/1-2" ) ) {
                 return false;
             }
             if ( !PhylogenyMethods.getSpecies( n14 ).equals( "9QX45" ) ) {
@@ -6727,6 +6754,31 @@ public final class Test {
             if ( n32.getNodeData().isHasTaxonomy() ) {
                 return false;
             }
+            final PhylogenyNode n40 = PhylogenyNode
+                    .createInstanceFromNhxString( "bcl2_12345", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
+            if ( !n40.getNodeData().getTaxonomy().getIdentifier().getValue().equals( "12345" ) ) {
+                return false;
+            }
+            final PhylogenyNode n41 = PhylogenyNode
+                    .createInstanceFromNhxString( "12345", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
+            if ( n41.getNodeData().isHasTaxonomy() ) {
+                return false;
+            }
+            final PhylogenyNode n42 = PhylogenyNode
+                    .createInstanceFromNhxString( "12345", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT );
+            if ( n42.getNodeData().isHasTaxonomy() ) {
+                return false;
+            }
+            final PhylogenyNode n43 = PhylogenyNode.createInstanceFromNhxString( "12345",
+                                                                                 NHXParser.TAXONOMY_EXTRACTION.NO );
+            if ( n43.getNodeData().isHasTaxonomy() ) {
+                return false;
+            }
+            final PhylogenyNode n44 = PhylogenyNode
+                    .createInstanceFromNhxString( "12345~1-2", NHXParser.TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED );
+            if ( n44.getNodeData().isHasTaxonomy() ) {
+                return false;
+            }
         }
         catch ( final Exception e ) {
             e.printStackTrace( System.out );
@@ -9376,7 +9428,10 @@ public final class Test {
         if ( !SequenceIdParser.parseGenbankAccessor( "AY423861" ).equals( "AY423861" ) ) {
             return false;
         }
-        if ( !SequenceIdParser.parseGenbankAccessor( ".AY423861." ).equals( "AY423861" ) ) {
+        if ( !SequenceIdParser.parseGenbankAccessor( ".AY423861.2" ).equals( "AY423861.2" ) ) {
+            return false;
+        }
+        if ( !SequenceIdParser.parseGenbankAccessor( "345_.AY423861.24_345" ).equals( "AY423861.24" ) ) {
             return false;
         }
         if ( SequenceIdParser.parseGenbankAccessor( "AAY423861" ) != null ) {
@@ -9416,45 +9471,6 @@ public final class Test {
     }
 
     private static boolean testUniprotEntryRetrieval() {
-        if ( !SequenceDbWsTools.parseUniProtAccessor( "P12345" ).equals( "P12345" ) ) {
-            return false;
-        }
-        if ( SequenceDbWsTools.parseUniProtAccessor( "EP12345" ) != null ) {
-            return false;
-        }
-        if ( SequenceDbWsTools.parseUniProtAccessor( "3 4P12345" ) != null ) {
-            return false;
-        }
-        if ( SequenceDbWsTools.parseUniProtAccessor( "P12345E" ) != null ) {
-            return false;
-        }
-        if ( SequenceDbWsTools.parseUniProtAccessor( "P123455" ) != null ) {
-            return false;
-        }
-        if ( SequenceDbWsTools.parseUniProtAccessor( "EP12345E" ) != null ) {
-            return false;
-        }
-        if ( SequenceDbWsTools.parseUniProtAccessor( "AY423861" ) != null ) {
-            return false;
-        }
-        if ( !SequenceDbWsTools.parseUniProtAccessor( "P1DDD5" ).equals( "P1DDD5" ) ) {
-            return false;
-        }
-        if ( SequenceDbWsTools.parseUniProtAccessor( "P1DDDD" ) != null ) {
-            return false;
-        }
-        if ( !SequenceDbWsTools.parseUniProtAccessor( "P1234X/P12345/12-42" ).equals( "P12345" ) ) {
-            return false;
-        }
-        if ( !SequenceDbWsTools.parseUniProtAccessor( "P1234X P12345 12-42" ).equals( "P12345" ) ) {
-            return false;
-        }
-        if ( !SequenceDbWsTools.parseUniProtAccessor( "P12345/12-42" ).equals( "P12345" ) ) {
-            return false;
-        }
-        if ( !SequenceDbWsTools.parseUniProtAccessor( "P1234X/P12345" ).equals( "P12345" ) ) {
-            return false;
-        }
         try {
             final SequenceDatabaseEntry entry = SequenceDbWsTools.obtainUniProtEntry( "P12345", 200 );
             if ( !entry.getAccession().equals( "P12345" ) ) {
@@ -9466,9 +9482,6 @@ public final class Test {
             if ( !entry.getSequenceName().equals( "Aspartate aminotransferase, mitochondrial" ) ) {
                 return false;
             }
-            if ( !entry.getSequenceSymbol().equals( "GOT2" ) ) {
-                return false;
-            }
             if ( !entry.getTaxonomyIdentifier().equals( "9986" ) ) {
                 return false;
             }
@@ -9576,6 +9589,37 @@ public final class Test {
         return true;
     }
 
+    private static boolean testSequenceWriter() {
+        try {
+            final String n = ForesterUtil.LINE_SEPARATOR;
+            if ( !SequenceWriter.toFasta( "name", "awes", 5 ).toString().equals( ">name" + n + "awes" ) ) {
+                return false;
+            }
+            if ( !SequenceWriter.toFasta( "name", "awes", 4 ).toString().equals( ">name" + n + "awes" ) ) {
+                return false;
+            }
+            if ( !SequenceWriter.toFasta( "name", "awes", 3 ).toString().equals( ">name" + n + "awe" + n + "s" ) ) {
+                return false;
+            }
+            if ( !SequenceWriter.toFasta( "name", "awes", 2 ).toString().equals( ">name" + n + "aw" + n + "es" ) ) {
+                return false;
+            }
+            if ( !SequenceWriter.toFasta( "name", "awes", 1 ).toString()
+                    .equals( ">name" + n + "a" + n + "w" + n + "e" + n + "s" ) ) {
+                return false;
+            }
+            if ( !SequenceWriter.toFasta( "name", "abcdefghij", 3 ).toString()
+                    .equals( ">name" + n + "abc" + n + "def" + n + "ghi" + n + "j" ) ) {
+                return false;
+            }
+        }
+        catch ( final Exception e ) {
+            e.printStackTrace();
+            return false;
+        }
+        return true;
+    }
+
     private static boolean testCreateBalancedPhylogeny() {
         try {
             final Phylogeny p0 = DevelopmentTools.createBalancedPhylogeny( 6, 5 );