- // We need to take the previous set of values\r
- // subtract the pid at winstart-1\r
- // and add the pid at winend;\r
-\r
- String pre_refchar = refseq.getSequence().substring(winstart-1,winstart);\r
- String pos_refchar = "-";\r
-\r
- if (refseq.getSequence().length() > winend) {\r
- pos_refchar = refseq.getSequence().substring(winend,winend+1);\r
- }\r
-\r
- for (int j = 0; j < sequences.size(); j++) {\r
- // First copy the pid value from i-1\r
-\r
- int val = ((Integer)prev.elementAt(j)).intValue();\r
-\r
- Sequence s = (Sequence)sequences.elementAt(j);\r
-\r
- String pre_char = s.getSequence().substring(winstart-1,winstart);\r
-\r
- String pos_char = "-";\r
-\r
- if (s.getSequence().length() > winend) {\r
- pos_char = s.getSequence().substring(winend,winend+1);\r
- }\r
-\r
- // Now substract 1 if the chars at winstart-1 match\r
-\r
- if (jalview.util.Comparison.isGap(pre_refchar.charAt(0)) == false\r
- && pre_char.equals(pre_refchar)) {\r
- val--;\r
- }\r
-\r
- if (jalview.util.Comparison.isGap(pos_refchar.charAt(0)) == false\r
- && pos_char.equals(pos_refchar)) {\r
- val++;\r
- }\r
-\r
- values.addElement(new Integer(val));\r
-\r
-\r
- }\r
- prev = values;\r
- }\r
- }\r
-\r
- return result;\r
- }\r
-\r
- public static Hashtable findBlocks(Vector seqs, int start, int end,Vector exc) {\r
-\r
- // start and end are in real (not relative coords);\r
-\r
- // The coords in the hashtable that is returned are in relative coords\r
- // i.e. start from 0\r
-\r
- Hashtable blocks = new Hashtable();\r
-\r
- boolean prev = false;\r
- int bstart = -1;\r
-\r
- for (int i = start; i <= end ; i++) {\r
- SequenceI seq = (SequenceI)seqs.elementAt(0);\r
-\r
- char c = seq.getCharAt(i);\r
-\r
- boolean found = true;\r
-\r
- int j = 1;\r
-\r
- while (j < seqs.size() && found == true) {\r
-\r
- SequenceI jseq = (SequenceI)seqs.elementAt(j);\r
-\r
- if (!exc.contains(jseq)) {\r
-\r
- char cc = jseq.getCharAt(i);\r
-\r
- if ( cc != c) {\r
- found = false;\r
- }\r
- }\r
- j++;\r
- }\r
-\r
-\r
- if (prev == false && found == true) {\r
- bstart = i;\r
- } else if (prev == true && found == false && bstart != -1) {\r
-\r
- int blockstart = bstart-start;\r
- int blocklen = i-bstart;\r
-\r
- //System.out.println("Start len " + blockstart + " " + blocklen);\r
-\r
- for (int jj = blockstart; jj < blockstart + blocklen;jj++) {\r
- blocks.put(new Integer(jj),new Integer(blocklen));\r
- }\r
-\r
- bstart = -1;\r
- }\r
- prev = found;\r
- }\r
-\r
- if (bstart != -1) {\r
-\r
- int blockstart = bstart-start;\r
- int blocklen = end-bstart;\r
-\r
- // System.out.println("Start len " + blockstart + " " + blocklen);\r
-\r
- for (int jj = blockstart; jj < blockstart + blocklen;jj++) {\r
- blocks.put(new Integer(blockstart),new Integer(blocklen));\r
- }\r
-\r
- }\r
- return blocks;\r
- }\r
-\r
-\r