69789b9c46e499bec5838ecdce516ff1792e115b
[jalview.git] / src / jalview / gui / PairwiseAlignPanel.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4  *\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
9  *\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
14  *\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
18  */\r
19 package jalview.gui;\r
20 \r
21 import java.util.*;\r
22 \r
23 import java.awt.event.*;\r
24 \r
25 import jalview.analysis.*;\r
26 import jalview.datamodel.*;\r
27 import jalview.jbgui.*;\r
28 \r
29 public class PairwiseAlignPanel\r
30     extends GPairwiseAlignPanel\r
31 {\r
32   Vector sequences = new Vector();\r
33   AlignViewport av;\r
34 \r
35   public PairwiseAlignPanel(AlignViewport av)\r
36   {\r
37     super();\r
38     this.av = av;\r
39 \r
40     Vector selsubset = new Vector();\r
41 \r
42     for (int i = 0, j = av.getSelectionGroup().getSize(); i < j; i++)\r
43     {\r
44       if (av.getAlignment().getSequences().contains(av.getSelectionGroup()\r
45           .getSequenceAt(i)))\r
46       {\r
47         selsubset.add(av.getSelectionGroup().getSequenceAt(i));\r
48       }\r
49     }\r
50 \r
51     float[][] scores = new float[selsubset.size()][selsubset.size()];\r
52     double totscore = 0;\r
53     int count = selsubset.size();\r
54 \r
55     int acount = 0;\r
56 \r
57     for (int i = 1; i < count; i++)\r
58     {\r
59       for (int j = 0; j < i; j++)\r
60       {\r
61         acount++;\r
62 \r
63         AlignSeq as = new AlignSeq( (SequenceI) selsubset.elementAt(i),\r
64                                    (SequenceI) selsubset.elementAt(j), "pep");\r
65         as.calcScoreMatrix();\r
66         as.traceAlignment();\r
67         as.printAlignment();\r
68         scores[i][j] = (float) as.getMaxScore() / (float) as.getASeq1().length;\r
69         totscore = totscore + scores[i][j];\r
70 \r
71         textarea.append(as.getOutput());\r
72         sequences.add(new Sequence(as.getS1().getName(), as.getAStr1()));\r
73         sequences.add(new Sequence(as.getS2().getName(), as.getAStr2()));\r
74       }\r
75     }\r
76 \r
77     if (count > 2)\r
78     {\r
79       System.out.println(\r
80           "Pairwise alignment scaled similarity score matrix\n");\r
81 \r
82       for (int i = 0; i < count; i++)\r
83       {\r
84         jalview.util.Format.print(System.out, "%s \n",\r
85                                   ("" + i) + " " +\r
86                                   ( (SequenceI) selsubset.elementAt(i)).getName());\r
87       }\r
88 \r
89       System.out.println("\n");\r
90 \r
91       for (int i = 0; i < count; i++)\r
92       {\r
93         for (int j = 0; j < i; j++)\r
94         {\r
95           jalview.util.Format.print(System.out, "%7.3f",\r
96                                     scores[i][j] / totscore);\r
97         }\r
98       }\r
99 \r
100       System.out.println("\n");\r
101     }\r
102   }\r
103 \r
104   protected void viewInEditorButton_actionPerformed(ActionEvent e)\r
105   {\r
106     Sequence[] seq = new Sequence[sequences.size()];\r
107 \r
108     for (int i = 0; i < sequences.size(); i++)\r
109     {\r
110       seq[i] = (Sequence) sequences.elementAt(i);\r
111     }\r
112 \r
113     AlignFrame af = new AlignFrame(new Alignment(seq));\r
114     Desktop.addInternalFrame(af, "Pairwise Aligned Sequences",\r
115                              AlignFrame.NEW_WINDOW_WIDTH,\r
116                              AlignFrame.NEW_WINDOW_HEIGHT);\r
117   }\r
118 }\r