+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @return DOCUMENT ME!\r
+ */\r
+ public String getDescription()\r
+ {\r
+ return this.description;\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param pos DOCUMENT ME!\r
+ *\r
+ * @return DOCUMENT ME!\r
+ */\r
+ public int findIndex(int pos)\r
+ {\r
+ // returns the alignment position for a residue\r
+ int j = start;\r
+ int i = 0;\r
+\r
+ while ((i < sequence.length()) && (j <= end) && (j <= pos))\r
+ {\r
+ char c = sequence.charAt(i);\r
+\r
+ if (!jalview.util.Comparison.isGap((c)))\r
+ {\r
+ j++;\r
+ }\r
+\r
+ i++;\r
+ }\r
+\r
+ if ((j == end) && (j < pos))\r
+ {\r
+ return end + 1;\r
+ }\r
+ else\r
+ {\r
+ return i;\r
+ }\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param i DOCUMENT ME!\r
+ *\r
+ * @return DOCUMENT ME!\r
+ */\r
+ public int findPosition(int i)\r
+ {\r
+ // Returns the sequence position for an alignment position\r
+ int j = 0;\r
+ int pos = start;\r
+\r
+ while ((j < i) && (j < sequence.length()))\r
+ {\r
+ char c = sequence.charAt(j);\r
+\r
+ if (!jalview.util.Comparison.isGap((c)))\r
+ {\r
+ pos++;\r
+ }\r
+\r
+ j++;\r
+ }\r
+\r
+ return pos;\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @return DOCUMENT ME!\r
+ */\r
+ public int[] gapMap()\r
+ {\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
+\r
+ while (j < sequence.length())\r
+ {\r
+ if (!jalview.util.Comparison.isGap(sequence.charAt(j)))\r
+ {\r
+ map[p++] = j;\r
+ }\r
+\r
+ j++;\r
+ }\r
+\r
+ return map;\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param i DOCUMENT ME!\r
+ */\r
+ public void deleteCharAt(int i)\r
+ {\r
+ if (i >= sequence.length())\r
+ {\r
+ return;\r
+ }\r
+\r
+ sequence = sequence.substring(0, i) + sequence.substring(i + 1);\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param i DOCUMENT ME!\r
+ * @param j DOCUMENT ME!\r
+ */\r
+ public void deleteChars(int i, int j)\r
+ {\r
+ if (i >= sequence.length())\r
+ {\r
+ return;\r
+ }\r
+\r
+ if (j >= sequence.length())\r
+ {\r
+ sequence = sequence.substring(0, i);\r
+ }\r
+ else\r
+ {\r
+ sequence = sequence.substring(0, i) + sequence.substring(j);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param i DOCUMENT ME!\r
+ * @param c DOCUMENT ME!\r
+ */\r
+ public void insertCharAt(int i, char c)\r
+ {\r
+ insertCharAt(i, c, true);\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param i DOCUMENT ME!\r
+ * @param c DOCUMENT ME!\r
+ * @param chop DOCUMENT ME!\r
+ */\r
+ public void insertCharAt(int i, char c, boolean chop)\r
+ {\r
+ String tmp = new String(sequence);\r
+\r
+ if (i < sequence.length())\r
+ {\r
+ sequence = tmp.substring(0, i) + String.valueOf(c) +\r
+ tmp.substring(i);\r
+ }\r
+ else\r
+ {\r
+ // JBPNote : padding char at end of sequence. We'll not get away with this when we insert residues, I bet!\r
+ char[] ch = new char[(1 + i) - sequence.length()];\r
+\r
+ for (int j = 0, k = ch.length; j < k; j++)\r
+ ch[j] = c;\r
+\r
+ sequence = tmp + String.valueOf(ch);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param c DOCUMENT ME!\r
+ */\r
+ public void setColor(Color c)\r
+ {\r
+ this.color = c;\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @return DOCUMENT ME!\r
+ */\r
+ public Color getColor()\r
+ {\r
+ return color;\r
+ }\r