New method for helping to quickly map different aligned versions of a
[jalview.git] / src / jalview / datamodel / Sequence.java
index eceddf1..5db051a 100755 (executable)
@@ -139,6 +139,8 @@ public class Sequence implements SequenceI
     return this.sequence;\r
   }\r
   public String getSequence(int start,int end) {\r
+    if(end>sequence.length())\r
+      end = sequence.length();\r
     return this.sequence.substring(start,end);\r
   }\r
 \r
@@ -182,10 +184,9 @@ public class Sequence implements SequenceI
     int j   = 0;\r
     int pos = start;\r
 \r
-    while (j < i)\r
+    while (j < i && j<sequence.length())\r
     {\r
       char c = sequence.charAt(j);\r
-\r
       if (!jalview.util.Comparison.isGap((c)))\r
         pos++;\r
 \r
@@ -193,6 +194,22 @@ public class Sequence implements SequenceI
     }\r
     return pos;\r
   }\r
+\r
+  public int[] gapMap() {\r
+    // Returns an int array giving the position of each residue in the sequence in the alignment\r
+    String seq = jalview.analysis.AlignSeq.extractGaps("-. ",sequence);\r
+    int[] map = new int[seq.length()];\r
+    int j=0;\r
+    int p=0;\r
+    while (j<sequence.length()) {\r
+      if (!jalview.util.Comparison.isGap(sequence.charAt(j))) {\r
+        map[p++]=j;\r
+      }\r
+      j++;\r
+    }\r
+    return map;\r
+  }\r
+\r
   public void deleteCharAt(int i)\r
   {\r
     StringBuffer sbuffer = new StringBuffer(sequence);\r
@@ -200,6 +217,13 @@ public class Sequence implements SequenceI
     sequence = sbuffer.toString();\r
   }\r
 \r
+  public void deleteChars(int i, int j)\r
+  {\r
+    StringBuffer sbuffer = new StringBuffer(sequence);\r
+    sbuffer.delete(i,j);\r
+    sequence = sbuffer.toString();\r
+  }\r
+\r
   public void insertCharAt(int i, char c)\r
   {\r
     insertCharAt(i,c,true);\r