searchresult highlighting on common dataset or specific sequenceI residue range
authorjprocter <Jim Procter>
Sun, 17 Jun 2007 12:45:25 +0000 (12:45 +0000)
committerjprocter <Jim Procter>
Sun, 17 Jun 2007 12:45:25 +0000 (12:45 +0000)
src/jalview/datamodel/SearchResults.java

index f8e1c5a..b9176b4 100755 (executable)
-/*\r
- * Jalview - A Sequence Alignment Editor and Viewer\r
- * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program; if not, write to the Free Software\r
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
- */\r
-package jalview.datamodel;\r
-\r
-public class SearchResults\r
-{\r
-\r
-  Match[] matches;\r
-\r
-  /**\r
-   * This method replaces the old search results which merely\r
-   * held an alignment index of search matches. This broke\r
-   * when sequences were moved around the alignment\r
-   * @param seq Sequence\r
-   * @param start int\r
-   * @param end int\r
-   */\r
-  public void addResult(SequenceI seq, int start, int end)\r
-  {\r
-    if (matches == null)\r
-    {\r
-      matches = new Match[]\r
-          {\r
-          new Match(seq, start, end)};\r
-      return;\r
-    }\r
-\r
-    int mSize = matches.length;\r
-\r
-    Match[] tmp = new Match[mSize + 1];\r
-    int m;\r
-    for (m = 0; m < mSize; m++)\r
-    {\r
-      tmp[m] = matches[m];\r
-    }\r
-\r
-    tmp[m] = new Match(seq, start, end);\r
-\r
-    matches = tmp;\r
-  }\r
-\r
-  /**\r
-   * This Method returns the search matches which lie between the\r
-   * start and end points of the sequence in question. It is\r
-   * optimised for returning objects for drawing on SequenceCanvas\r
-   */\r
-  public int[] getResults(SequenceI sequence, int start, int end)\r
-  {\r
-    if (matches == null)\r
-    {\r
-      return null;\r
-    }\r
-\r
-    int[] result = null;\r
-    int[] tmp = null;\r
-    int resultLength;\r
-\r
-    for (int m = 0; m < matches.length; m++)\r
-    {\r
-      if (matches[m].sequence == sequence)\r
-      {\r
-        int matchStart = matches[m].sequence.findIndex(matches[m].start) - 1;\r
-        int matchEnd = matches[m].sequence.findIndex(matches[m].end) - 1;\r
-\r
-        if (matchStart <= end && matchEnd >= start)\r
-        {\r
-          if (matchStart < start)\r
-          {\r
-            matchStart = start;\r
-          }\r
-\r
-          if (matchEnd > end)\r
-          {\r
-            matchEnd = end;\r
-          }\r
-\r
-          if (result == null)\r
-          {\r
-            result = new int[]\r
-                {\r
-                matchStart, matchEnd};\r
-          }\r
-          else\r
-          {\r
-            resultLength = result.length;\r
-            tmp = new int[resultLength + 2];\r
-            System.arraycopy(result, 0, tmp, 0, resultLength);\r
-            result = tmp;\r
-            result[resultLength] = matchStart;\r
-            result[resultLength + 1] = matchEnd;\r
-          }\r
-        }\r
-      }\r
-    }\r
-    return result;\r
-  }\r
-\r
-  public int getSize()\r
-  {\r
-    return matches == null ? 0 : matches.length;\r
-  }\r
-\r
-  public SequenceI getResultSequence(int index)\r
-  {\r
-    return matches[index].sequence;\r
-  }\r
-\r
-  public int getResultStart(int index)\r
-  {\r
-    return matches[index].start;\r
-  }\r
-\r
-  public int getResultEnd(int index)\r
-  {\r
-    return matches[index].end;\r
-  }\r
-\r
-  class Match\r
-  {\r
-    SequenceI sequence;\r
-    int start;\r
-    int end;\r
-\r
-    public Match(SequenceI seq, int start, int end)\r
-    {\r
-      sequence = seq;\r
-      this.start = start;\r
-      this.end = end;\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.datamodel;
+
+public class SearchResults
+{
+
+  Match[] matches;
+
+  /**
+   * This method replaces the old search results which merely
+   * held an alignment index of search matches. This broke
+   * when sequences were moved around the alignment
+   * @param seq Sequence
+   * @param start int
+   * @param end int
+   */
+  public void addResult(SequenceI seq, int start, int end)
+  {
+    if (matches == null)
+    {
+      matches = new Match[]
+          {
+          new Match(seq, start, end)};
+      return;
+    }
+
+    int mSize = matches.length;
+
+    Match[] tmp = new Match[mSize + 1];
+    int m;
+    for (m = 0; m < mSize; m++)
+    {
+      tmp[m] = matches[m];
+    }
+
+    tmp[m] = new Match(seq, start, end);
+
+    matches = tmp;
+  }
+
+  /**
+   * This Method returns the search matches which lie between the
+   * start and end points of the sequence in question. It is
+   * optimised for returning objects for drawing on SequenceCanvas
+   */
+  public int[] getResults(SequenceI sequence, int start, int end)
+  {
+    if (matches == null)
+    {
+      return null;
+    }
+
+    int[] result = null;
+    int[] tmp = null;
+    int resultLength, matchStart=0, matchEnd=0;
+    boolean mfound;
+    for (int m = 0; m < matches.length; m++)
+    {
+      mfound=false;
+      if (matches[m].sequence == sequence)
+        {
+        mfound = true;
+        // locate aligned position
+        matchStart = sequence.findIndex(matches[m].start) - 1;
+        matchEnd = sequence.findIndex(matches[m].end) - 1;
+        }
+      else if (matches[m].sequence == sequence.getDatasetSequence()) {
+        mfound = true;
+        // locate region in local context
+        matchStart = sequence.findIndex(matches[m].start) - 1;
+        matchEnd = sequence.findIndex(matches[m].end) - 1;
+      }
+      if (mfound) {
+        if (matchStart <= end && matchEnd >= start)
+        {
+          if (matchStart < start)
+          {
+            matchStart = start;
+          }
+
+          if (matchEnd > end)
+          {
+            matchEnd = end;
+          }
+
+          if (result == null)
+          {
+            result = new int[]
+                {
+                matchStart, matchEnd};
+          }
+          else
+          {
+            resultLength = result.length;
+            tmp = new int[resultLength + 2];
+            System.arraycopy(result, 0, tmp, 0, resultLength);
+            result = tmp;
+            result[resultLength] = matchStart;
+            result[resultLength + 1] = matchEnd;
+          }
+        }
+      }
+    }
+    return result;
+  }
+
+  public int getSize()
+  {
+    return matches == null ? 0 : matches.length;
+  }
+
+  public SequenceI getResultSequence(int index)
+  {
+    return matches[index].sequence;
+  }
+
+  public int getResultStart(int index)
+  {
+    return matches[index].start;
+  }
+
+  public int getResultEnd(int index)
+  {
+    return matches[index].end;
+  }
+
+  class Match
+  {
+    SequenceI sequence;
+    int start;
+    int end;
+
+    public Match(SequenceI seq, int start, int end)
+    {
+      sequence = seq;
+      this.start = start;
+      this.end = end;
+    }
+  }
+}