Applet has hidden regions
[jalview.git] / src / jalview / appletgui / 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 \r
20 package jalview.appletgui;\r
21 \r
22 import java.util.*;\r
23 \r
24 import java.awt.event.*;\r
25 \r
26 import jalview.analysis.*;\r
27 import jalview.datamodel.*;\r
28 import java.awt.*;\r
29 \r
30 public class PairwiseAlignPanel\r
31     extends Panel implements ActionListener\r
32 {\r
33   Vector sequences = new Vector();\r
34   AlignmentPanel ap;\r
35 \r
36   public PairwiseAlignPanel(AlignmentPanel ap)\r
37   {\r
38     try\r
39     {\r
40       jbInit();\r
41     }\r
42     catch (Exception e)\r
43     {\r
44       e.printStackTrace();\r
45     }\r
46     this.ap = ap;\r
47     sequences = new Vector();\r
48 \r
49     SequenceI[] seqs;\r
50     String[] seqStrings = ap.av.getViewAsString(true);\r
51 \r
52     if (ap.av.getSelectionGroup() == null)\r
53     {\r
54       seqs = ap.av.alignment.getSequencesArray();\r
55     }\r
56     else\r
57     {\r
58       seqs = ap.av.getSelectionGroup().getSequencesInOrder(ap.av.alignment);\r
59     }\r
60 \r
61     float scores[][] = new float[seqs.length][seqs.length];\r
62     double totscore = 0;\r
63     int count = ap.av.getSelectionGroup().getSize(false);\r
64 \r
65     Sequence seq;\r
66 \r
67     for (int i = 1; i < count; i++)\r
68     {\r
69       for (int j = 0; j < i; j++)\r
70       {\r
71 \r
72         AlignSeq as = new AlignSeq(seqs[i], seqStrings[i],\r
73                                    seqs[j], seqStrings[j], "pep");\r
74 \r
75         if (as.s1str.length() == 0 || as.s2str.length() == 0)\r
76         {\r
77           continue;\r
78         }\r
79 \r
80         as.calcScoreMatrix();\r
81         as.traceAlignment();\r
82 \r
83         as.printAlignment(System.out);\r
84         scores[i][j] = (float) as.getMaxScore() / (float) as.getASeq1().length;\r
85         totscore = totscore + scores[i][j];\r
86 \r
87         textarea.append(as.getOutput());\r
88         seq = new Sequence(as.getS1().getName(),\r
89                            as.getAStr1(),\r
90                            as.getS1().getStart(),\r
91                            as.getS1().getEnd()\r
92             );\r
93         sequences.addElement(seq);\r
94 \r
95         seq = new Sequence(as.getS2().getName(),\r
96                            as.getAStr2(),\r
97                            as.getS2().getStart(),\r
98                            as.getS2().getEnd());\r
99         sequences.addElement(seq);\r
100       }\r
101     }\r
102 \r
103     if (count > 2)\r
104     {\r
105       System.out.println(\r
106           "Pairwise alignment scaled similarity score matrix\n");\r
107 \r
108       for (int i = 0; i < count; i++)\r
109       {\r
110         jalview.util.Format.print(System.out, "%s \n",\r
111                                   ("" + i) + " " +\r
112                                   seqs[i].getName());\r
113       }\r
114 \r
115       System.out.println("\n");\r
116 \r
117       for (int i = 0; i < count; i++)\r
118       {\r
119         for (int j = 0; j < i; j++)\r
120         {\r
121           jalview.util.Format.print(System.out, "%7.3f",\r
122                                     scores[i][j] / totscore);\r
123         }\r
124       }\r
125 \r
126       System.out.println("\n");\r
127     }\r
128   }\r
129   public void actionPerformed(ActionEvent evt)\r
130   {\r
131     if(evt.getSource()==viewInEditorButton)\r
132       viewInEditorButton_actionPerformed();\r
133   }\r
134 \r
135   protected void viewInEditorButton_actionPerformed()\r
136   {\r
137 \r
138     Sequence[] seq = new Sequence[sequences.size()];\r
139 \r
140     for (int i = 0; i < sequences.size(); i++)\r
141     {\r
142       seq[i] = (Sequence) sequences.elementAt(i);\r
143     }\r
144 \r
145     new AlignFrame(new Alignment(seq),\r
146                                    ap.av.applet,\r
147                                    "Pairwise Aligned Sequences",\r
148                                    false);\r
149 \r
150   }\r
151   protected ScrollPane scrollPane = new ScrollPane();\r
152   protected TextArea textarea = new TextArea();\r
153   protected Button viewInEditorButton = new Button();\r
154   Panel jPanel1 = new Panel();\r
155   BorderLayout borderLayout1 = new BorderLayout();\r
156 \r
157   private void jbInit() throws Exception {\r
158       this.setLayout(borderLayout1);\r
159       textarea.setFont(new java.awt.Font("Monospaced", 0, 12));\r
160       textarea.setText("");\r
161       viewInEditorButton.setFont(new java.awt.Font("Verdana", 0, 12));\r
162       viewInEditorButton.setLabel("View in alignment editor");\r
163       viewInEditorButton.addActionListener(this);\r
164       this.add(scrollPane, BorderLayout.CENTER);\r
165       scrollPane.add(textarea);\r
166       this.add(jPanel1, BorderLayout.SOUTH);\r
167       jPanel1.add(viewInEditorButton, null);\r
168   }\r
169 \r
170 }\r