JAL-1503 update version in GPL header
[jalview.git] / src / jalview / ws / jws2 / AADisorderClient.java
index 96635c9..e5a39a7 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * 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.8.1)
+ * Copyright (C) 2014 The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  * 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/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.ws.jws2;
 
 import jalview.api.AlignCalcWorkerI;
+import jalview.bin.Cache;
 import jalview.datamodel.AlignmentAnnotation;
-
 import jalview.datamodel.GraphLine;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
@@ -36,16 +37,18 @@ import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+
 import compbio.data.sequence.Range;
 import compbio.data.sequence.Score;
 import compbio.data.sequence.ScoreManager.ScoreHolder;
 import compbio.metadata.Argument;
 
-public class AADisorderClient extends JabawsAlignCalcWorker implements
+public class AADisorderClient extends JabawsCalcWorker implements
         AlignCalcWorkerI
 {
 
   private static final String THRESHOLD = "THRESHOLD";
+  private static final String RANGE = "RANGE";
 
   String typeName;
 
@@ -117,6 +120,9 @@ public class AADisorderClient extends JabawsAlignCalcWorker implements
     amap.get("Dydx").put(DONTCOMBINE, DONTCOMBINE);
     amap.get("Dydx").put(THRESHOLD, new double[]
     { 1, 0 });
+    amap.get("Dydx").put(RANGE, new float[]
+            { -1, +1 });
+
     amap.put("SmoothedScore", new HashMap<String, Object>());
     amap.get("SmoothedScore").put(INVISIBLE, INVISIBLE);
     amap.put("RawScore", new HashMap<String, Object>());
@@ -128,10 +134,18 @@ public class AADisorderClient extends JabawsAlignCalcWorker implements
     amap.put("REM465", new HashMap<String, Object>());
     amap.get("COILS").put(THRESHOLD, new double[]
     { 1, 0.516 });
+    amap.get("COILS").put(RANGE, new float[]
+            { 0, 1 });
+
     amap.get("HOTLOOPS").put(THRESHOLD, new double[]
     { 1, 0.6 });
+    amap.get("HOTLOOPS").put(RANGE, new float[]
+            { 0, 1 });
     amap.get("REM465").put(THRESHOLD, new double[]
     { 1, 0.1204 });
+    amap.get("REM465").put(RANGE, new float[]
+            { 0, 1 });
+
 
     annotMap.put(compbio.ws.client.Services.IUPredWS.toString(),
             amap = new HashMap<String, Map<String, Object>>());
@@ -139,13 +153,19 @@ public class AADisorderClient extends JabawsAlignCalcWorker implements
     amap.put("Short", new HashMap<String, Object>());
     amap.get("Long").put(THRESHOLD, new double[]
     { 1, 0.5 });
+    amap.get("Long").put(RANGE, new float[]
+            { 0, 1 });
     amap.get("Short").put(THRESHOLD, new double[]
     { 1, 0.5 });
+    amap.get("Short").put(RANGE, new float[]
+            { 0, 1 });
     annotMap.put(compbio.ws.client.Services.JronnWS.toString(),
             amap = new HashMap<String, Map<String, Object>>());
     amap.put("JRonn", new HashMap<String, Object>());
     amap.get("JRonn").put(THRESHOLD, new double[]
     { 1, 0.5 });
+    amap.get("JRonn").put(RANGE, new float[]
+            { 0, 1 });
   }
 
   @Override
@@ -187,8 +207,18 @@ public class AADisorderClient extends JabawsAlignCalcWorker implements
         {
           seq = seq.getDatasetSequence();
         }
-        ;
-        ScoreHolder scores = scoremanager.getAnnotationForSequence(seqId);
+        ScoreHolder scores = null;
+        try {
+          scores = scoremanager.getAnnotationForSequence(seqId);
+        } catch (Exception q)
+        {
+          Cache.log
+                  .info("Couldn't recover disorder prediction for sequence "
+                          + seq.getName()
+                          + "(Prediction name was "
+                          + seqId+")"
+                          + "\nSee http://issues.jalview.org/browse/JAL-1319 for one possible reason why disorder predictions might fail.");
+        }
         float last = Float.NaN, val = Float.NaN;
         int lastAnnot = ourAnnot.size();
         if (scores!=null && scores.scores!=null) {
@@ -243,16 +273,21 @@ public class AADisorderClient extends JabawsAlignCalcWorker implements
                       service.getServiceTypeURI() + "/" + scr.getMethod(),
                       aseq, base + 1, scr);
               annot.graph = AlignmentAnnotation.LINE_GRAPH;
-              annot.visible = (annotTypeMap == null
-                      || annotTypeMap.get(scr.getMethod()) == null || annotTypeMap
-                      .get(scr.getMethod()).get(INVISIBLE) == null);
-              double[] thrsh = (annotTypeMap == null || annotTypeMap
-                      .get(scr.getMethod()) == null) ? null
-                      : (double[]) annotTypeMap.get(scr.getMethod()).get(
+              
+              Map<String,Object> styleMap = (annotTypeMap == null) ? null : annotTypeMap.get(scr.getMethod());
+              
+              annot.visible = (styleMap == null || styleMap.get(INVISIBLE) == null);
+              double[] thrsh = (styleMap==null) ? null
+                      : (double[]) styleMap.get(
                               THRESHOLD);
-              if (annotTypeMap == null
-                      || annotTypeMap.get(scr.getMethod()) == null
-                      || annotTypeMap.get(scr.getMethod()).get(DONTCOMBINE) == null)
+              float[] range = (styleMap==null) ? null : (float[]) styleMap.get(
+                      RANGE);
+              if (range!=null)
+              {
+                annot.graphMin = range[0];
+                annot.graphMax = range[1];
+              }
+              if (styleMap==null || styleMap.get(DONTCOMBINE) == null)
               {
                 {
                   if (!sameGroup)