JAL-1645 Version-Rel Version 2.9 Year-Rel 2015 Licensing glob
[jalview.git] / src / jalview / io / JnetAnnotationMaker.java
index 957c5e7..5192454 100755 (executable)
@@ -1,23 +1,30 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
- * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9)
+ * Copyright (C) 2015 The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  * Jalview is free software: you can redistribute it and/or
  * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
  *  
  * Jalview is distributed in the hope that it will be useful, but 
  * WITHOUT ANY WARRANTY; without even the implied warranty 
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
  * PURPOSE.  See the GNU General Public License for more details.
  * 
- * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 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
 {
@@ -57,13 +64,17 @@ public class JnetAnnotationMaker
     if ((delMap != null && delMap.length > width)
             || (delMap == null && gapmap.length != width))
     {
-      throw (new Exception("Number of residues in "
-              + (delMap == null ? "" : " mapped ")
-              + "supposed query sequence ('"
-              + al.getSequenceAt(firstSeq).getName() + "'\n"
-              + al.getSequenceAt(firstSeq).getSequenceAsString()
-              + ")\ndiffer from number of prediction sites in prediction ("
-              + width + ")"));
+      throw (new Exception(
+              MessageManager
+                      .formatMessage(
+                              "exception.number_of_residues_in_query_sequence_differ_from_prediction",
+                              new String[] {
+                                  (delMap == null ? "" : MessageManager
+                                          .getString("label.mapped")),
+                                  al.getSequenceAt(firstSeq).getName(),
+                                  al.getSequenceAt(firstSeq)
+                                          .getSequenceAsString(),
+                                  Integer.valueOf(width).toString() })));
     }
 
     AlignmentAnnotation annot;
@@ -75,6 +86,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();
@@ -82,98 +96,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]
+                    : gapmap[delMap[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[sposw].value == 0f || sol[sposw].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]);
@@ -182,7 +219,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();
 
     /*