+ /**\r
+ * invert the shifts\r
+ * \r
+ * @return ShiftList with inverse shift operations\r
+ */\r
+ public ShiftList getInverse()\r
+ {\r
+ ShiftList inverse = new ShiftList();\r
+ if (shifts != null)\r
+ {\r
+ for (int i = 0, j = shifts.size(); i < j; i++)\r
+ {\r
+ int[] sh = (int[]) shifts.elementAt(i);\r
+ if (sh != null)\r
+ {\r
+ inverse.shifts.addElement(new int[]\r
+ { sh[0], -sh[1] });\r
+ }\r
+ }\r
+ }\r
+ return inverse;\r
+ }\r
+\r
+ /**\r
+ * parse a 1d map of position 1<i<n to L<pos[i]<N such as that returned from\r
+ * SequenceI.gapMap()\r
+ * \r
+ * @param gapMap\r
+ * @return shifts from map index to mapped position\r
+ */\r
+ public static ShiftList parseMap(int[] gapMap)\r
+ {\r
+ ShiftList shiftList = null;\r
+ if (gapMap != null && gapMap.length > 0)\r
+ {\r
+ shiftList = new ShiftList();\r
+ for (int i = 0, p = 0; i < gapMap.length; p++, i++)\r
+ {\r
+ if (p != gapMap[i])\r
+ {\r
+ shiftList.addShift(p, gapMap[i] - p);\r
+ p = gapMap[i];\r
+ }\r
+ }\r
+ }\r
+ return shiftList;\r
+ }\r