+/*\r
+ * Jalview - A Sequence Alignment Editor and Viewer\r
+ * Copyright (C) 2006 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.util;\r
\r
+import jalview.datamodel.SequenceI;\r
+\r
import java.util.*;\r
\r
/**\r
* ShiftList\r
* Simple way of mapping a linear series to a new linear range with new points introduced.\r
* Use at your own risk!\r
- * <p>Title: ShiftList</p>\r
- *\r
- * <p>Description: </p>\r
- *\r
- * <p>Copyright: Copyright (c) 2004</p>\r
- *\r
- * <p>Company: Dundee University</p>\r
- *\r
- * @author not attributable\r
- * @version 1.0\r
+ * Now growing to be used for interval ranges (position, offset) storing deletions/insertions\r
*/\r
public class ShiftList\r
{\r
- Vector shifts;\r
+ public Vector shifts;\r
public ShiftList()\r
{\r
shifts = new Vector();\r
{\r
shifts.removeAllElements();\r
}\r
+ /**\r
+ * invert the shifts\r
+ * @return ShiftList with inverse shift operations\r
+ */\r
+ public ShiftList getInverse() {\r
+ ShiftList inverse=new ShiftList();\r
+ if (shifts!=null) {\r
+ for (int i=0,j=shifts.size(); i<j; i++) {\r
+ int[] sh=(int[]) shifts.elementAt(i);\r
+ if (sh!=null)\r
+ inverse.shifts.addElement(new int[] {sh[0], -sh[1]});\r
+ }\r
+ }\r
+ return inverse;\r
+ }\r
\r
+ /**\r
+ * parse a 1d map of position 1<i<n to L<pos[i]<N\r
+ * such as that returned from SequenceI.gapMap()\r
+ * @param gapMap\r
+ * @return shifts from map index to mapped position\r
+ */\r
+ public static ShiftList parseMap(int[] gapMap) {\r
+ ShiftList shiftList = null;\r
+ if (gapMap!=null && gapMap.length>0) {\r
+ shiftList=new ShiftList();\r
+ for (int i=0,p=0; i<gapMap.length; p++,i++) {\r
+ if (p!=gapMap[i]) {\r
+ shiftList.addShift(p, gapMap[i]-p);\r
+ p=gapMap[i];\r
+ }\r
+ }\r
+ }\r
+ return shiftList;\r
+ }\r
}\r