Merge branch 'feature/JAL-1601_jpred4' into Release_2_8_2b1_Branch
authorJim Procter <jprocter@issues.jalview.org>
Thu, 7 May 2015 14:19:12 +0000 (15:19 +0100)
committerJim Procter <jprocter@issues.jalview.org>
Thu, 7 May 2015 14:19:12 +0000 (15:19 +0100)
src/jalview/io/JnetAnnotationMaker.java
src/jalview/ws/jws1/Discoverer.java

index c2e3b4a..eebd719 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
@@ -61,12 +64,18 @@ public class JnetAnnotationMaker
     if ((delMap != null && delMap.length > width)
             || (delMap == null && gapmap.length != 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()
-      })));
+      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;
@@ -78,6 +87,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 +97,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 +220,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();
 
     /*
index 7cb0481..31018a8 100644 (file)
@@ -22,11 +22,17 @@ package jalview.ws.jws1;
 
 import jalview.util.MessageManager;
 
-import java.util.*;
+import java.util.Hashtable;
+import java.util.StringTokenizer;
+import java.util.Vector;
 
-import javax.swing.*;
+import javax.swing.JOptionPane;
 
-import ext.vamsas.*;
+import ext.vamsas.IRegistry;
+import ext.vamsas.IRegistryServiceLocator;
+import ext.vamsas.RegistryServiceSoapBindingStub;
+import ext.vamsas.ServiceHandle;
+import ext.vamsas.ServiceHandles;
 
 public class Discoverer implements Runnable
 {
@@ -211,9 +217,9 @@ public class Discoverer implements Runnable
                     MessageManager.getString("label.clustalw_multiple_sequence_alignment")),
             new ServiceHandle(
                     "SecStrPred",
-                    "Cole C., Barber J. D., Barton G.J (2008) "
-                            + "The Jpred 3 secondary structure prediction server "
-                            + "Nucleic Acids Research, 36 W197-W201",
+                    "Drozdetskiy A, Cole C, Procter J & Barton GJ. (2015)\nJPred4: a protein secondary structure prediction server"
+                            + "\nNucleic Acids Research, Web Server issue (first published 15th April 2015)"
+                            + "\ndoi://10.1093/nar/gkv332",
                     "http://www.compbio.dundee.ac.uk/JalviewWS/services/jpred",
                     "JNet Secondary Structure Prediction") };
         services = new Hashtable();
@@ -356,7 +362,7 @@ public class Discoverer implements Runnable
       {
         jalview.bin.Cache.log
                 .warn("No services at "
-                        + ((java.net.URL) ServiceURLList.get(s_url))
+                        + (ServiceURLList.get(s_url))
                         + " - check DISCOVERY_URLS property in .jalview_properties");
       }
       s_url++;