JAL-1379 new look JPred results
authorj.procter@dundee.ac.uk <jprocter@jims-mbp-2.dyn.lifesci.dundee.ac.uk>
Fri, 18 Jul 2014 12:30:29 +0000 (13:30 +0100)
committerj.procter@dundee.ac.uk <jprocter@jims-mbp-2.dyn.lifesci.dundee.ac.uk>
Fri, 18 Jul 2014 12:30:29 +0000 (13:30 +0100)
src/jalview/ws/jws2/JPred301Client.java

index 71cbb7e..8328d45 100644 (file)
@@ -30,6 +30,7 @@ import jalview.ws.params.OptionI;
 import jalview.ws.params.WsParamSetI;
 import jalview.ws.uimodel.AlignAnalysisUIText;
 
+import java.awt.Color;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -50,14 +51,14 @@ public class JPred301Client extends JabawsMsaInterfaceAlignCalcWorker
   public List<Argument> selectDefaultArgs()
   {
     List<ArgumentI> rgs = new ArrayList<ArgumentI>();
-    for (ArgumentI argi: service.getParamStore().getServiceParameters())
+    for (ArgumentI argi : service.getParamStore().getServiceParameters())
     {
       if (argi instanceof OptionI)
       {
         List<String> o = ((OptionI) argi).getPossibleValues();
         if (o.contains("-pred-nohits"))
         {
-          OptionI cpy = ((OptionI)argi).copy();
+          OptionI cpy = ((OptionI) argi).copy();
           cpy.setValue("-pred-nohits");
           rgs.add(cpy);
         }
@@ -88,15 +89,20 @@ public class JPred301Client extends JabawsMsaInterfaceAlignCalcWorker
   {
     return "calculating consensus secondary structure prediction using JPred service";
   }
-  private static HashMap<String, String[]> jpredRowLabels = new HashMap<String,String[]>();
-  private static HashSet<String>jpredRes_graph,jpredRes_ssonly;
+
+  private static HashMap<String, String[]> jpredRowLabels = new HashMap<String, String[]>();
+
+  private static HashSet<String> jpredRes_graph, jpredRes_ssonly;
   {
-    jpredRes_ssonly=new HashSet();
+    jpredRes_ssonly = new HashSet();
     jpredRes_ssonly.add("jnetpred".toLowerCase());
-    jpredRes_graph=new HashSet();
+    jpredRes_ssonly.add("jnetpssm".toLowerCase());
+    jpredRes_ssonly.add("jnethmm".toLowerCase());
+    jpredRes_graph = new HashSet();
     jpredRes_graph.add("jnetconf".toLowerCase());
-    
+    jpredRes_graph.add("jnet burial".toLowerCase());
   }
+
   /**
    * update the consensus annotation from the sequence profile data using
    * current visualization settings.
@@ -110,27 +116,62 @@ public class JPred301Client extends JabawsMsaInterfaceAlignCalcWorker
         JpredAlignment jpres = (JpredAlignment) msascoreset;
         int alWidth = alignViewport.getAlignment().getWidth();
         ArrayList<AlignmentAnnotation> ourAnnot = new ArrayList<AlignmentAnnotation>();
-        for (FastaSequence fsq:jpres.getJpredSequences())
+        char[] sol = new char[jpres.getJpredSequences().get(0).getLength()];
+        boolean firstsol = true;
+        for (FastaSequence fsq : jpres.getJpredSequences())
         {
           String[] k = jpredRowLabels.get(fsq.getId());
-          if (k==null)
+          if (k == null)
+          {
+            k = new String[]
+            { fsq.getId(), "JNet Output" };
+          }
+          if (fsq.getId().startsWith("JNETSOL"))
+          {
+            char amnt = (fsq.getId().endsWith("25") ? "3" : fsq.getId()
+                    .endsWith("5") ? "6" : "9").charAt(0);
+            char[] vseq = fsq.getSequence().toCharArray();
+            for (int spos = 0, sposL = fsq.getLength(); spos < sposL; spos++)
+            {
+              if (firstsol)
+              {
+                sol[spos] = '0';
+              }
+              if (vseq[spos] == 'B' && (sol[spos]=='0' || sol[spos] < amnt))
+              {
+                sol[spos] = amnt;
+              }
+            }
+            firstsol = false;
+          }
+          else
           {
-            k = new String[] { fsq.getId(), "JNet Output"};
+            createAnnotationRowFromString(
+                    ourAnnot,
+                    getCalcId(),
+                    alWidth,
+                    k[0],
+                    k[1],
+                    jpredRes_graph.contains(fsq.getId()) ? AlignmentAnnotation.BAR_GRAPH
+                            : AlignmentAnnotation.NO_GRAPH, 0f, 9f,
+                    fsq.getSequence());
           }
-          createAnnotationRowFromString(ourAnnot, getCalcId(), alWidth,
-                  k[0],k[1],
-                  jpredRes_graph.contains(fsq.getId()) ?  AlignmentAnnotation.BAR_GRAPH : AlignmentAnnotation.NO_GRAPH, 0f, 0f,
-                  fsq.getSequence());
 
         }
-        for (FastaSequence fsq: jpres.getSequences())
+        createAnnotationRowFromString(
+                ourAnnot,
+                getCalcId(),
+                alWidth,
+                "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>",
+                AlignmentAnnotation.BAR_GRAPH, 0f, 9f, new String(sol));
+        for (FastaSequence fsq : jpres.getSequences())
         {
           if (fsq.getId().equalsIgnoreCase("QUERY"))
           {
             createAnnotationRowFromString(ourAnnot, getCalcId(), alWidth,
                     "Query", "JPred Reference Sequence",
-                    AlignmentAnnotation.NO_GRAPH, 0f, 0f,
-                    fsq.getSequence());
+                    AlignmentAnnotation.NO_GRAPH, 0f, 0f, fsq.getSequence());
           }
         }
         if (ourAnnot.size() > 0)
@@ -161,6 +202,7 @@ public class JPred301Client extends JabawsMsaInterfaceAlignCalcWorker
       {
         // created a valid annotation from the data
         ourAnnot.add(annotation);
+        // annotation.validateRangeAndDisplay();
       }
     }
   }
@@ -169,11 +211,19 @@ public class JPred301Client extends JabawsMsaInterfaceAlignCalcWorker
           AlignmentAnnotation annotation, String sourceData, int alWidth,
           int rowType)
   {
-    if (sourceData.length()==0 && alWidth>0)
+    if (sourceData.length() == 0 && alWidth > 0)
     {
       return false;
     }
     Annotation[] elm = new Annotation[alWidth];
+    boolean ssOnly = jpredRes_ssonly.contains(annotation.label
+            .toLowerCase());
+    boolean graphOnly = rowType != AlignmentAnnotation.NO_GRAPH;
+    if (!ssOnly && !graphOnly)
+    {
+      // for burial 'B'
+      annotation.showAllColLabels = true;
+    }
 
     for (int i = 0, iSize = sourceData.length(); i < iSize; i++)
     {
@@ -189,13 +239,15 @@ public class JPred301Client extends JabawsMsaInterfaceAlignCalcWorker
       switch (rowType)
       {
       case AlignmentAnnotation.NO_GRAPH:
-        elm[i] = new Annotation("" + annot, "" + annot, annot, Float.NaN);
+        elm[i] = ssOnly ? new Annotation("", "", annot, Float.NaN,
+                colourSS(annot)) : new Annotation("" + annot, "" + annot,
+                '\0', Float.NaN);
         break;
       default:
         try
         {
           elm[i] = new Annotation("" + annot, "" + annot, annot,
-                  Integer.valueOf(annot));
+                  Integer.valueOf(""+annot));
         } catch (Exception x)
         {
           System.err.println("Expected numeric value in character '"
@@ -210,6 +262,18 @@ public class JPred301Client extends JabawsMsaInterfaceAlignCalcWorker
     return true;
   }
 
+  private Color colourSS(char annot)
+  {
+    switch (annot)
+    {
+    case 'H':
+      return jalview.renderer.AnnotationRenderer.HELIX_COLOUR;
+    case 'E':
+      return jalview.renderer.AnnotationRenderer.SHEET_COLOUR;
+    }
+    return jalview.renderer.AnnotationRenderer.GLYPHLINE_COLOR;
+  }
+
   @Override
   public String getCalcId()
   {