From 3edbc91b06e90aaeb795168f7361208d639c3a27 Mon Sep 17 00:00:00 2001 From: jprocter Date: Wed, 24 Jan 2007 17:09:40 +0000 Subject: [PATCH] kkv change --- src/jalview/util/MapList.java | 556 ++++++++++++++++++++--------------------- 1 file changed, 278 insertions(+), 278 deletions(-) diff --git a/src/jalview/util/MapList.java b/src/jalview/util/MapList.java index d76ec33..87199bb 100644 --- a/src/jalview/util/MapList.java +++ b/src/jalview/util/MapList.java @@ -1,278 +1,278 @@ -/* - * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2006 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.util; - -import java.util.*; - -/** - * MapList - * Simple way of bijectively mapping a non-contiguous linear range to another non-contiguous linear range - * Use at your own risk! - * TODO: efficient implementation of private posMap method - * TODO: test/ensure that sense of from and to ratio start position is conserved (codon start position recovery) - * TODO: optimize to use int[][] arrays rather than vectors. - */ -public class MapList -{ - public Vector fromShifts; - public Vector toShifts; - int fromRatio; // number of steps in fromShifts to one toRatio unit - int toRatio; // number of steps in toShifts to one fromRatio - public MapList(int from[], int to[], int fromRatio, int toRatio) - { - fromShifts = new Vector(); - for (int i=0;ito) { - from = intv[1]; - to=intv[0]; - } - while (iv.hasNext()) { - intv = (int[]) iv.next(); - if (intv[0]to) - to=intv[0]; - if (intv[1]>to) - to=intv[1]; - } - int tF=0,tT=0; - int mp[][] = new int[to-from+2][]; - for (int i=0;itT) { - tT=m[0]; - } - } - } - mp[i] = m; - } - int[][] map=new int[][] { new int[]{from, to, tF, tT}, new int[to-from+2]}; - - map[0][2] = tF; - map[0][3] = tT; - - for (int i=0;i=intv[0] && pos<=intv[1]) { - return new int[] { count+pos-intv[0]+1, +1 }; - } else { - count+=intv[1]-intv[0]+1; - } - } else { - if (pos>=intv[1] && pos<=intv[0]) { - return new int[] { count+intv[0]-pos+1, -1 }; - } else { - count+=intv[0]-intv[1]+1; - } - } - } - return null; - } - /** - * count out pos positions into a series of intervals and return the position - * @param intVals - * @param pos - * @return position pos in interval set - */ - private int[] countToPos(Iterator intVals, int pos) { - int count=0,diff=0,intv[]={0,0}; - while (intVals.hasNext()) { - intv = (int[])intVals.next(); - diff = intv[1]-intv[0]; - if (diff>=0) { - if (pos<=count+1+diff) { - return new int[] { pos-count-1+intv[0],+1 }; - } else { - count+=1+diff; - } - } else { - if (pos<=count+1-diff) { - return new int[] { intv[0]-(pos-count-1),-1 }; - } else { - count+=1-diff; - } - } - } - return null;//(diff<0) ? (intv[1]-1) : (intv[0]+1); - } - public static void testMap(MapList ml, int fromS,int fromE) { - for (int from=1; from<=25; from++) { - int[] too=ml.shiftFrom(from); - System.out.print("ShiftFrom("+from+")=="); - if (too==null) - System.out.print("NaN\n"); - else { - System.out.print(too[0]+" % "+too[1]); - System.out.print("\t+--+\t"); - int[] toofrom=ml.shiftTo(too[0]); - if (toofrom!=null) - System.out.println("ShiftTo("+too[0]+")=="+toofrom[0]+" % "+toofrom[1]); - else - System.out.println("ShiftTo("+too[0]+")=="+"NaN! - not Bijective Mapping!"); - } - } - int mmap[][] = ml.makeFromMap(); - System.out.println("FromMap : ("+mmap[0][0]+" "+mmap[0][1]+" "+mmap[0][2]+" "+mmap[0][3]+" "); - for (int i=1;i<=mmap[1].length; i++) { - if (mmap[1][i-1]==-1) { - System.out.print(i+"=XXX"); - - } else { - System.out.print(i+"="+(mmap[0][2]+mmap[1][i-1])); - } - if (i % 20==0) - System.out.print("\n"); - else - System.out.print(","); - } - System.out.print("\n"); - } - public static void main(String argv[]) { - MapList ml=new MapList(new int[] { 1,5,10,15,25,20}, - new int[] { 51,1}, 1, 3); - MapList ml1=new MapList(new int[] { 1,3,17,4}, - new int[] { 51,1}, 1, 3); - - // test internal consistency - int to[] = new int[51]; - MapList.testMap(ml, 1, 25); - /* - for (int from=1; from<=51; from++) { - int[] too=ml.shiftTo(from); - int[] toofrom=ml.shiftFrom(too[0]); - System.out.println("ShiftFrom("+from+")=="+too[0]+" % "+too[1]+"\t+-+\tShiftTo("+too[0]+")=="+toofrom[0]+" % "+toofrom[1]); - }*/ - System.out.print("Success?\n"); // if we get here - something must be working! - } -} +/* + * Jalview - A Sequence Alignment Editor and Viewer + * Copyright (C) 2006 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.util; + +import java.util.*; + +/** + * MapList + * Simple way of bijectively mapping a non-contiguous linear range to another non-contiguous linear range + * Use at your own risk! + * TODO: efficient implementation of private posMap method + * TODO: test/ensure that sense of from and to ratio start position is conserved (codon start position recovery) + * TODO: optimize to use int[][] arrays rather than vectors. + */ +public class MapList +{ + public Vector fromShifts; + public Vector toShifts; + int fromRatio; // number of steps in fromShifts to one toRatio unit + int toRatio; // number of steps in toShifts to one fromRatio + public MapList(int from[], int to[], int fromRatio, int toRatio) + { + fromShifts = new Vector(); + for (int i=0;ito) { + from = intv[1]; + to=intv[0]; + } + while (iv.hasNext()) { + intv = (int[]) iv.next(); + if (intv[0]to) + to=intv[0]; + if (intv[1]>to) + to=intv[1]; + } + int tF=0,tT=0; + int mp[][] = new int[to-from+2][]; + for (int i=0;itT) { + tT=m[0]; + } + } + } + mp[i] = m; + } + int[][] map=new int[][] { new int[]{from, to, tF, tT}, new int[to-from+2]}; + + map[0][2] = tF; + map[0][3] = tT; + + for (int i=0;i=intv[0] && pos<=intv[1]) { + return new int[] { count+pos-intv[0]+1, +1 }; + } else { + count+=intv[1]-intv[0]+1; + } + } else { + if (pos>=intv[1] && pos<=intv[0]) { + return new int[] { count+intv[0]-pos+1, -1 }; + } else { + count+=intv[0]-intv[1]+1; + } + } + } + return null; + } + /** + * count out pos positions into a series of intervals and return the position + * @param intVals + * @param pos + * @return position pos in interval set + */ + private int[] countToPos(Iterator intVals, int pos) { + int count=0,diff=0,intv[]={0,0}; + while (intVals.hasNext()) { + intv = (int[])intVals.next(); + diff = intv[1]-intv[0]; + if (diff>=0) { + if (pos<=count+1+diff) { + return new int[] { pos-count-1+intv[0],+1 }; + } else { + count+=1+diff; + } + } else { + if (pos<=count+1-diff) { + return new int[] { intv[0]-(pos-count-1),-1 }; + } else { + count+=1-diff; + } + } + } + return null;//(diff<0) ? (intv[1]-1) : (intv[0]+1); + } + public static void testMap(MapList ml, int fromS,int fromE) { + for (int from=1; from<=25; from++) { + int[] too=ml.shiftFrom(from); + System.out.print("ShiftFrom("+from+")=="); + if (too==null) + System.out.print("NaN\n"); + else { + System.out.print(too[0]+" % "+too[1]); + System.out.print("\t+--+\t"); + int[] toofrom=ml.shiftTo(too[0]); + if (toofrom!=null) + System.out.println("ShiftTo("+too[0]+")=="+toofrom[0]+" % "+toofrom[1]); + else + System.out.println("ShiftTo("+too[0]+")=="+"NaN! - not Bijective Mapping!"); + } + } + int mmap[][] = ml.makeFromMap(); + System.out.println("FromMap : ("+mmap[0][0]+" "+mmap[0][1]+" "+mmap[0][2]+" "+mmap[0][3]+" "); + for (int i=1;i<=mmap[1].length; i++) { + if (mmap[1][i-1]==-1) { + System.out.print(i+"=XXX"); + + } else { + System.out.print(i+"="+(mmap[0][2]+mmap[1][i-1])); + } + if (i % 20==0) + System.out.print("\n"); + else + System.out.print(","); + } + System.out.print("\n"); + } + public static void main(String argv[]) { + MapList ml=new MapList(new int[] { 1,5,10,15,25,20}, + new int[] { 51,1}, 1, 3); + MapList ml1=new MapList(new int[] { 1,3,17,4}, + new int[] { 51,1}, 1, 3); + + // test internal consistency + int to[] = new int[51]; + MapList.testMap(ml, 1, 25); + /* + for (int from=1; from<=51; from++) { + int[] too=ml.shiftTo(from); + int[] toofrom=ml.shiftFrom(too[0]); + System.out.println("ShiftFrom("+from+")=="+too[0]+" % "+too[1]+"\t+-+\tShiftTo("+too[0]+")=="+toofrom[0]+" % "+toofrom[1]); + }*/ + System.out.print("Success?\n"); // if we get here - something must be working! + } +} -- 1.7.10.2