JAL-1601 migrated the JABAWS 2.1 jpred burial representation to the core jpred concis...
authorJim Procter <jprocter@issues.jalview.org>
Thu, 7 May 2015 13:55:11 +0000 (14:55 +0100)
committerJim Procter <jprocter@issues.jalview.org>
Thu, 7 May 2015 14:25:03 +0000 (15:25 +0100)
src/jalview/io/JnetAnnotationMaker.java

index 731bd99..f97cd96 100755 (executable)
  */
 package jalview.io;
 
-import jalview.datamodel.*;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Annotation;
+import jalview.datamodel.SequenceI;
 import jalview.util.MessageManager;
 
 public class JnetAnnotationMaker
@@ -78,6 +81,9 @@ public class JnetAnnotationMaker
       existingAnnotations = al.getAlignmentAnnotation().length;
     }
 
+    Annotation[] sol = new Annotation[al.getWidth()];
+    boolean firstsol = true;
+
     while (i < preds.length)
     {
       String id = preds[i].getName().toUpperCase();
@@ -85,98 +91,121 @@ public class JnetAnnotationMaker
       if (id.startsWith("LUPAS") || id.startsWith("JNET")
               || id.startsWith("JPRED"))
       {
-        annotations = new Annotation[al.getWidth()];
-        /*
-         * if (delMap!=null) { for (int j=0; j<annotations.length; j++)
-         * annotations[j] = new Annotation("","",'',0); }
-         */
-        if (id.equals("JNETPRED") || id.equals("JNETPSSM")
-                || id.equals("JNETFREQ") || id.equals("JNETHMM")
-                || id.equals("JNETALIGN") || id.equals("JPRED"))
+        if (id.startsWith("JNETSOL"))
         {
-          if (delMap == null)
+          float amnt = (id.endsWith("25") ? 3f : id.endsWith("5") ? 6f : 9f);
+          for (int spos = 0; spos < width; spos++)
           {
-            for (int j = 0; j < width; j++)
+            int sposw = (delMap == null) ? gapmap[spos]
+                    : delMap[gapmap[spos]];
+            if (firstsol)
             {
-              annotations[gapmap[j]] = new Annotation("", "",
-                      preds[i].getCharAt(j), 0);
+              sol[sposw] = new Annotation(0f);
             }
-          }
-          else
-          {
-            for (int j = 0; j < width; j++)
+            if (preds[i].getCharAt(spos) == 'B'
+                    && (sol[spos].value == 0f || sol[spos].value < amnt))
             {
-              annotations[gapmap[delMap[j]]] = new Annotation("", "",
-                      preds[i].getCharAt(j), 0);
+              sol[sposw].value = amnt;
             }
           }
+          firstsol = false;
         }
-        else if (id.equals("JNETCONF"))
+        else
         {
-          if (delMap == null)
+          // some other kind of annotation
+          annotations = new Annotation[al.getWidth()];
+          /*
+           * if (delMap!=null) { for (int j=0; j<annotations.length; j++)
+           * annotations[j] = new Annotation("","",'',0); }
+           */
+          if (id.equals("JNETPRED") || id.equals("JNETPSSM")
+                  || id.equals("JNETFREQ") || id.equals("JNETHMM")
+                  || id.equals("JNETALIGN") || id.equals("JPRED"))
           {
-            for (int j = 0; j < width; j++)
+            if (delMap == null)
             {
-              float value = new Float(preds[i].getCharAt(j) + "")
-                      .floatValue();
-              annotations[gapmap[j]] = new Annotation(preds[i].getCharAt(j)
-                      + "", "", preds[i].getCharAt(j), value);
+              for (int j = 0; j < width; j++)
+              {
+                annotations[gapmap[j]] = new Annotation("", "",
+                        preds[i].getCharAt(j), 0);
+              }
             }
-          }
-          else
-          {
-            for (int j = 0; j < width; j++)
+            else
             {
-              float value = new Float(preds[i].getCharAt(j) + "")
-                      .floatValue();
-              annotations[gapmap[delMap[j]]] = new Annotation(
-                      preds[i].getCharAt(j) + "", "",
-                      preds[i].getCharAt(j), value);
+              for (int j = 0; j < width; j++)
+              {
+                annotations[gapmap[delMap[j]]] = new Annotation("", "",
+                        preds[i].getCharAt(j), 0);
+              }
             }
           }
-        }
-        else
-        {
-          if (delMap == null)
+          else if (id.equals("JNETCONF"))
           {
-            for (int j = 0; j < width; j++)
+            if (delMap == null)
             {
-              annotations[gapmap[j]] = new Annotation(preds[i].getCharAt(j)
-                      + "", "", ' ', 0);
+              for (int j = 0; j < width; j++)
+              {
+                float value = new Float(preds[i].getCharAt(j) + "")
+                        .floatValue();
+                annotations[gapmap[j]] = new Annotation(
+                        preds[i].getCharAt(j) + "", "",
+                        preds[i].getCharAt(j), value);
+              }
+            }
+            else
+            {
+              for (int j = 0; j < width; j++)
+              {
+                float value = new Float(preds[i].getCharAt(j) + "")
+                        .floatValue();
+                annotations[gapmap[delMap[j]]] = new Annotation(
+                        preds[i].getCharAt(j) + "", "",
+                        preds[i].getCharAt(j), value);
+              }
             }
           }
           else
           {
-            for (int j = 0; j < width; j++)
+            if (delMap == null)
             {
-              annotations[gapmap[delMap[j]]] = new Annotation(
-                      preds[i].getCharAt(j) + "", "", ' ', 0);
+              for (int j = 0; j < width; j++)
+              {
+                annotations[gapmap[j]] = new Annotation(
+                        preds[i].getCharAt(j) + "", "", ' ', 0);
+              }
+            }
+            else
+            {
+              for (int j = 0; j < width; j++)
+              {
+                annotations[gapmap[delMap[j]]] = new Annotation(
+                        preds[i].getCharAt(j) + "", "", ' ', 0);
+              }
             }
           }
-        }
-
-        if (id.equals("JNETCONF"))
-        {
-          annot = new AlignmentAnnotation(preds[i].getName(),
-                  "JNet Output", annotations, 0f, 10f,
-                  AlignmentAnnotation.BAR_GRAPH);
-        }
-        else
-        {
-          annot = new AlignmentAnnotation(preds[i].getName(),
-                  "JNet Output", annotations);
-        }
 
-        if (seqRef != null)
-        {
-          annot.createSequenceMapping(seqRef, 1, true);
-          seqRef.addAlignmentAnnotation(annot);
-        }
+          if (id.equals("JNETCONF"))
+          {
+            annot = new AlignmentAnnotation(preds[i].getName(),
+                    "JNet Output", annotations, 0f, 10f,
+                    AlignmentAnnotation.BAR_GRAPH);
+          }
+          else
+          {
+            annot = new AlignmentAnnotation(preds[i].getName(),
+                    "JNet Output", annotations);
+          }
 
-        al.addAnnotation(annot);
-        al.setAnnotationIndex(annot, al.getAlignmentAnnotation().length
-                - existingAnnotations - 1);
+          if (seqRef != null)
+          {
+            annot.createSequenceMapping(seqRef, 1, true);
+            seqRef.addAlignmentAnnotation(annot);
+          }
 
+          al.addAnnotation(annot);
+          al.setAnnotationIndex(annot, al.getAlignmentAnnotation().length
+                  - existingAnnotations - 1);
+        }
         if (noMsa)
         {
           al.deleteSequence(preds[i]);
@@ -185,7 +214,24 @@ public class JnetAnnotationMaker
 
       i++;
     }
+    if (!firstsol)
+    {
+      // add the solvent accessibility
+      annot = new AlignmentAnnotation(
+              "Jnet Burial",
+              "<html>Prediction of Solvent Accessibility<br/>levels are<ul><li>0 - Exposed</li><li>3 - 25% or more S.A. accessible</li><li>6 - 5% or more S.A. accessible</li><li>9 - Buried (<5% exposed)</li></ul>",
+              sol, 0f, 9f, AlignmentAnnotation.BAR_GRAPH);
 
+      annot.validateRangeAndDisplay();
+      if (seqRef != null)
+      {
+        annot.createSequenceMapping(seqRef, 1, true);
+        seqRef.addAlignmentAnnotation(annot);
+      }
+      al.addAnnotation(annot);
+      al.setAnnotationIndex(annot, al.getAlignmentAnnotation().length
+              - existingAnnotations - 1);
+    }
     // Hashtable scores = prediction.getScores();
 
     /*