Formatting
[jalview.git] / src / jalview / io / JnetAnnotationMaker.java
index 17b4d68..be063c8 100755 (executable)
-package jalview.io;\r
-\r
-import jalview.datamodel.*;\r
-import java.net.URL;\r
-import java.io.BufferedReader;\r
-import java.io.InputStreamReader;\r
-import java.io.FileReader;\r
-\r
-\r
-public class JnetAnnotationMaker\r
-{\r
-  /**\r
-   * adds the annotation parsed by prediction to al.\r
-   * @param prediction JPredFile\r
-   * @param al AlignmentI\r
-   * @param FirstSeq int -\r
-   * @param noMsa boolean\r
-   */\r
-  public static void add_annotation(JPredFile prediction, AlignmentI al,\r
-                                    int FirstSeq, boolean noMsa)\r
-      throws Exception\r
-  {\r
-    int i = 0;\r
-    SequenceI[] preds = prediction.getSeqsAsArray();\r
-    // in the future we could search for the query\r
-    // sequence in the alignment before calling this function.\r
-    SequenceI seqRef = al.getSequenceAt(FirstSeq);\r
-    int width = preds[0].getSequence().length();\r
-    int[] gapmap = al.getSequenceAt(FirstSeq).gapMap();\r
-    if (gapmap.length != width)\r
-    {\r
-      throw (new Exception(\r
-          "Number of residues in supposed query sequence ('" +\r
-          al.getSequenceAt(FirstSeq).getName() + "'\n" +\r
-          al.getSequenceAt(FirstSeq).getSequence() +\r
-          ")\ndiffer from number of prediction sites in prediction (" + width +\r
-          ")"));\r
-    }\r
-\r
-    AlignmentAnnotation annot;\r
-    Annotation[] annotations = null;\r
-\r
-    while (i < preds.length)\r
-    {\r
-      String id = preds[i].getName().toUpperCase();\r
-\r
-      if (id.startsWith("LUPAS") || id.startsWith("JNET") ||\r
-          id.startsWith("JPRED"))\r
-      {\r
-        annotations = new Annotation[al.getWidth()];\r
-\r
-        if (id.equals("JNETPRED") || id.equals("JNETPSSM") ||\r
-            id.equals("JNETFREQ") || id.equals("JNETHMM") ||\r
-            id.equals("JNETALIGN") || id.equals("JPRED"))\r
-        {\r
-          for (int j = 0; j < width; j++)\r
-          {\r
-            annotations[gapmap[j]] = new Annotation("", "",\r
-                preds[i].getCharAt(j), 0);\r
-          }\r
-        }\r
-        else if (id.equals("JNETCONF"))\r
-        {\r
-          for (int j = 0; j < width; j++)\r
-          {\r
-            float value = Float.parseFloat(preds[i].getCharAt(\r
-                j) + "");\r
-            annotations[gapmap[j]] = new Annotation(preds[i].getCharAt(\r
-                j) + "", "", preds[i].getCharAt(j),\r
-                value);\r
-          }\r
-        }\r
-        else\r
-        {\r
-          for (int j = 0; j < width; j++)\r
-          {\r
-            annotations[gapmap[j]] = new Annotation(preds[i].getCharAt(\r
-                j) + "", "", ' ', 0);\r
-          }\r
-        }\r
-\r
-        if (id.equals("JNETCONF"))\r
-        {\r
-          annot = new AlignmentAnnotation(preds[i].getName(),\r
-                                          "JNet Output", annotations, 0f,\r
-                                          10f,\r
-                                          AlignmentAnnotation.BAR_GRAPH);\r
-        }\r
-        else\r
-        {\r
-          annot = new AlignmentAnnotation(preds[i].getName(),\r
-                                          "JNet Output", annotations);\r
-        }\r
-\r
-        if (seqRef != null)\r
-        {\r
-          annot.createSequenceMapping(seqRef, 0);\r
-          seqRef.addAlignmentAnnotation(annot);\r
-        }\r
-\r
-        al.addAnnotation(annot);\r
-\r
-        if (noMsa)\r
-        {\r
-          al.deleteSequence(preds[i]);\r
-        }\r
-      }\r
-\r
-      i++;\r
-    }\r
-\r
-    //Hashtable scores = prediction.getScores();\r
-\r
-    /*  addFloatAnnotations(al, gapmap,  (Vector)scores.get("JNETPROPH"),\r
-                          "JnetpropH", "Jnet Helix Propensity", 0f,1f,1);\r
-\r
-      addFloatAnnotations(al, gapmap,  (Vector)scores.get("JNETPROPB"),\r
-     "JnetpropB", "Jnet Beta Sheet Propensity", 0f,1f,1);\r
-\r
-      addFloatAnnotations(al, gapmap,  (Vector)scores.get("JNETPROPC"),\r
-                          "JnetpropC", "Jnet Coil Propensity", 0f,1f,1);\r
-     */\r
-\r
-  }\r
-}\r
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer
+ * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ *
+ * This program 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 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+*/package jalview.io;
+
+import jalview.datamodel.*;
+
+public class JnetAnnotationMaker
+{
+  public static void add_annotation(JPredFile prediction, AlignmentI al,
+                                    int firstSeq, boolean noMsa)
+      throws Exception
+  {
+    JnetAnnotationMaker.add_annotation(prediction, al, firstSeq, noMsa, (int[])null);
+  }
+
+  /**
+   * adds the annotation parsed by prediction to al.
+   * @param prediction JPredFile
+   * @param al AlignmentI
+   * @param firstSeq int -
+   * @param noMsa boolean
+   * @param delMap mapping from columns in JPredFile prediction to residue number in al.getSequence(firstSeq)
+   */
+  public static void add_annotation(JPredFile prediction, AlignmentI al,
+                                    int firstSeq, boolean noMsa, int[] delMap)
+      throws Exception
+  {
+    int i = 0;
+    SequenceI[] preds = prediction.getSeqsAsArray();
+    // in the future we could search for the query
+    // sequence in the alignment before calling this function.
+    SequenceI seqRef = al.getSequenceAt(firstSeq);
+    int width = preds[0].getSequence().length;
+    int[] gapmap = al.getSequenceAt(firstSeq).gapMap();
+    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 +
+          ")"));
+    }
+
+    AlignmentAnnotation annot;
+    Annotation[] annotations = null;
+
+    int existingAnnotations = 0;
+    if (al.getAlignmentAnnotation() != null)
+    {
+      existingAnnotations = al.getAlignmentAnnotation().length;
+    }
+
+    while (i < preds.length)
+    {
+      String id = preds[i].getName().toUpperCase();
+
+      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 (delMap == null)
+          {
+            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);
+            }
+          }
+        }
+        else if (id.equals("JNETCONF"))
+        {
+          if (delMap == null)
+          {
+            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
+        {
+          if (delMap == null)
+          {
+            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);
+        }
+
+        al.addAnnotation(annot);
+        al.setAnnotationIndex(annot,
+                              al.getAlignmentAnnotation().
+                              length - existingAnnotations - 1);
+
+        if (noMsa)
+        {
+          al.deleteSequence(preds[i]);
+        }
+      }
+
+      i++;
+    }
+
+    //Hashtable scores = prediction.getScores();
+
+    /*  addFloatAnnotations(al, gapmap,  (Vector)scores.get("JNETPROPH"),
+                          "JnetpropH", "Jnet Helix Propensity", 0f,1f,1);
+
+      addFloatAnnotations(al, gapmap,  (Vector)scores.get("JNETPROPB"),
+     "JnetpropB", "Jnet Beta Sheet Propensity", 0f,1f,1);
+
+      addFloatAnnotations(al, gapmap,  (Vector)scores.get("JNETPROPC"),
+                          "JnetpropC", "Jnet Coil Propensity", 0f,1f,1);
+     */
+
+  }
+}