2 * Jalview - A Sequence Alignment Editor and Viewer
\r
3 * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
\r
5 * This program is free software; you can redistribute it and/or
\r
6 * modify it under the terms of the GNU General Public License
\r
7 * as published by the Free Software Foundation; either version 2
\r
8 * of the License, or (at your option) any later version.
\r
10 * This program is distributed in the hope that it will be useful,
\r
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
13 * GNU General Public License for more details.
\r
15 * You should have received a copy of the GNU General Public License
\r
16 * along with this program; if not, write to the Free Software
\r
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
\r
19 package jalview.analysis;
\r
21 import jalview.datamodel.*;
\r
23 import jalview.io.*;
\r
28 public class CompareAlignments {
\r
33 public CompareAlignments(Vector align) {
\r
38 Alignment al0 = (Alignment) align.elementAt(0);
\r
40 for (int i = 0; i < al0.getHeight(); i++) {
\r
41 SequenceI seq = al0.getSequenceAt(i);
\r
43 ids.addElement(seq.getName());
\r
46 setReferenceId(seq.getName());
\r
51 public void compare() {
\r
52 Hashtable positions = new Hashtable();
\r
54 for (int k = 0; k < ids.size(); k++) {
\r
55 String id = (String) ids.elementAt(k);
\r
57 System.out.println("Ids " + id + " " + refId);
\r
59 if (!id.equals(refId)) {
\r
60 Hashtable fullhash = new Hashtable();
\r
62 for (int i = 0; i < align.size(); i++) {
\r
63 System.out.println("Alignment " + i);
\r
65 Alignment al = (Alignment) align.elementAt(i);
\r
67 SequenceI refseq = null;
\r
69 for (int j = 0; j < al.getHeight(); j++) {
\r
70 if (((SequenceI) al.getSequenceAt(j)).getName().equals(refId)) {
\r
71 refseq = (SequenceI) al.getSequenceAt(j);
\r
75 if (refseq != null) {
\r
76 System.out.println("Refseq " + refseq.getName());
\r
78 for (int jj = 0; jj < al.getHeight(); jj++) {
\r
79 SequenceI seq = (SequenceI) al.getSequenceAt(jj);
\r
81 if (seq.getName().equals(id)) {
\r
82 Hashtable hash = getAlignPositions(seq, refseq);
\r
84 Enumeration keys = hash.keys();
\r
86 while (keys.hasMoreElements()) {
\r
87 Integer key = (Integer) keys.nextElement();
\r
89 // System.out.println(key + " " + hash.get(key));
\r
90 if (fullhash.get(key) == null) {
\r
91 fullhash.put(key, new Vector());
\r
94 Vector tmp = (Vector) fullhash.get(key);
\r
96 tmp.addElement(hash.get(key));
\r
103 System.out.println("\nId " + id);
\r
105 Enumeration keys = fullhash.keys();
\r
109 while (keys.hasMoreElements()) {
\r
110 Integer key = (Integer) keys.nextElement();
\r
112 Vector tmp = (Vector) fullhash.get(key);
\r
114 int diff0 = ((Integer) tmp.elementAt(0)).intValue();
\r
119 for (int l = 1; l < tmp.size(); l++) {
\r
120 diff += Math.abs(diff0 -
\r
121 ((Integer) tmp.elementAt(l)).intValue());
\r
126 System.out.print(id + " Ref pos " + key + " : " +
\r
127 diff0 + " " + diff + " : ");
\r
129 for (int l = 1; l < tmp.size(); l++) {
\r
130 System.out.print(diff0 -
\r
131 ((Integer) tmp.elementAt(l)).intValue() + " ");
\r
134 System.out.println();
\r
138 System.out.println("Total " + id + " " + totdiff);
\r
143 public void setReferenceId(String id) {
\r
147 public Hashtable getAlignPositions(SequenceI seq1, SequenceI seq2) {
\r
148 Hashtable hash = new Hashtable();
\r
155 while (i < seq1.getLength()) {
\r
156 char c1 = seq1.getCharAt(i);
\r
157 char c2 = seq2.getCharAt(i);
\r
168 hash.put(new Integer(pos1), new Integer(pos2));
\r