JAL-3053
[jalview.git] / src / jalview / io / StockholmFile.java
index 71e369e..606540f 100644 (file)
@@ -83,7 +83,13 @@ public class StockholmFile extends AlignFile
   public static final Regex DETECT_BRACKETS = new Regex(
           "(<|>|\\[|\\]|\\(|\\)|\\{|\\})");
 
-  public static final String RNASS_BRACKETS = "<>[]() {}AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
+  // WUSS extended symbols. Avoid ambiguity with protein SS annotations by using NOT_RNASS first.
+  public static final String RNASS_BRACKETS = "<>[](){}AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
+
+  // use the following regex to decide an annotations (whole) line is NOT an RNA
+  // SS (it contains only E,H,e,h and other non-brace/non-alpha chars)
+  private static final Regex NOT_RNASS = new Regex(
+          "^[^<>[\\](){}A-DF-Za-df-z]*$");
 
   StringBuffer out; // output buffer
 
@@ -199,7 +205,7 @@ public class StockholmFile extends AlignFile
     String version;
     // String id;
     Hashtable seqAnn = new Hashtable(); // Sequence related annotations
-    LinkedHashMap<String, String> seqs = new LinkedHashMap<>();
+    LinkedHashMap<String, String> seqs = new LinkedHashMap<String, String>();
     Regex p, r, rend, s, x;
     // Temporary line for processing RNA annotation
     // String RNAannot = "";
@@ -660,7 +666,7 @@ public class StockholmFile extends AlignFile
               strucAnn = new Hashtable();
             }
 
-            Vector<AlignmentAnnotation> newStruc = new Vector<>();
+            Vector<AlignmentAnnotation> newStruc = new Vector<AlignmentAnnotation>();
             parseAnnotationRow(newStruc, type, ns);
             for (AlignmentAnnotation alan : newStruc)
             {
@@ -712,7 +718,7 @@ public class StockholmFile extends AlignFile
   private void guessDatabaseFor(Sequence seqO, String dbr, String dbsource)
   {
     DBRefEntry dbrf = null;
-    List<DBRefEntry> dbrs = new ArrayList<>();
+    List<DBRefEntry> dbrs = new ArrayList<DBRefEntry>();
     String seqdb = "Unknown", sdbac = "" + dbr;
     int st = -1, en = -1, p;
     if ((st = sdbac.indexOf("/")) > -1)
@@ -816,12 +822,6 @@ public class StockholmFile extends AlignFile
     // convert1 = OPEN_PAREN.replaceAll(annots);
     // convert2 = CLOSE_PAREN.replaceAll(convert1);
     // annots = convert2;
-    
-    // DEBUG
-    System.out.println(
-            "*** parseAnnotationRow called with\n      annotation='"
-                    + annotation + "'\n      label='" + label
-                    + "'\n      annots='" + annots + "'");
 
     String type = label;
     if (label.contains("_cons"))
@@ -837,7 +837,9 @@ public class StockholmFile extends AlignFile
     if (type.equalsIgnoreCase("secondary structure"))
     {
       ss = true;
-      isrnass = DETECT_BRACKETS.search(annots);
+      isrnass = !NOT_RNASS.search(annots); // sorry about the double negative
+                                           // here (it's easier for dealing with
+                                           // other non-alpha-non-brace chars)
     }
     if (type.equalsIgnoreCase("posterior probability"))
     {
@@ -1019,9 +1021,7 @@ public class StockholmFile extends AlignFile
 
           String key = type2id(alAnot[j].label);
           boolean isrna = alAnot[j].isValidStruc();
-          // bs debug
-          System.out.println("SEQUENCE " + i + "/" + s.length + " ISRNA="
-                  + isrna + ".");
+
           if (isrna)
           {
             // hardwire to secondary structure if there is RNA secondary
@@ -1043,9 +1043,6 @@ public class StockholmFile extends AlignFile
           {
             seq += outputCharacter(key, k, isrna, ann, s[i]);
           }
-          // bs debug
-          System.out.println("APPENDING SEQ: KEY=" + key + " ISRNA=" + isrna
-                  + ".\n" + "SEQ=" + seq + "\n");
           out.append(seq);
           out.append(newline);
         }
@@ -1054,8 +1051,6 @@ public class StockholmFile extends AlignFile
       out.append(new Format("%-" + maxid + "s")
               .form(printId(s[i], jvSuffix) + " "));
       out.append(s[i].getSequenceAsString());
-      // bs debug
-      System.out.println("ALSO APPENDING " + s[i].getSequenceAsString());
       out.append(newline);
       i++;
     }
@@ -1103,12 +1098,6 @@ public class StockholmFile extends AlignFile
         {
           seq += outputCharacter(key, j, isrna, aa.annotations, null);
         }
-        
-        // bs debug
-        System.out.println(
-                "PRINTING SEQ: KEY=" + key + " ISRNA=" + isrna + ".\n"
-                        + "SEQ=" + seq + "\n");
-        
         out.append(seq);
         out.append(newline);
       }