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.util.*;
\r
28 public class AlignmentUtil {
\r
29 private AlignmentUtil() {
\r
32 public static int[][] percentIdentity2(AlignmentI align) {
\r
33 return percentIdentity2(align, 0, align.getWidth() - 1);
\r
36 public static int[][] percentIdentity2(AlignmentI align, int start, int end) {
\r
37 int[][] cons2 = new int[align.getWidth()][24];
\r
39 // Initialize the array
\r
40 for (int j = 0; j < 24; j++) {
\r
41 for (int i = 0; i < align.getWidth(); i++) {
\r
49 public static int getPixelHeight(int i, int j, int charHeight) {
\r
60 public static Vector substitution_rates(AlignmentI align, int start, int end) {
\r
61 Vector rates = new Vector();
\r
63 int len = (end - start + 1);
\r
65 // Turn seqs into char arrays
\r
66 int[][] seqint = new int[align.getHeight()][len];
\r
68 for (int j = 0; j < align.getHeight(); j++) {
\r
69 SequenceI seq = align.getSequenceAt(j);
\r
71 for (int i = 0; i < len; i++) {
\r
72 char c = seq.getCharAt((start + i) - 1);
\r
76 } else if (c == 'C') {
\r
78 } else if (c == 'T') {
\r
80 } else if (c == 'G') {
\r
88 // print_matrix(seqint,2,len); for (int j = 0; j < align.getHeight(); j++) {
\r
89 for (int j = 0; j < align.getHeight(); j++) {
\r
90 for (int k = 0; k < align.getHeight(); k++) {
\r
91 int[][] counts = new int[4][4];
\r
93 int[] tots = new int[4];
\r
95 int[] fulltots = new int[4];
\r
97 for (int i = 0; i < len; i++) {
\r
99 // System.out.println("Seq " + j + " " + k + " " + i + " " + seqint[j][i] + " " + seqint[k][i]);
\r
100 if ((seqint[j][i] >= 0) && (seqint[k][i] >= 0)) {
\r
101 counts[seqint[k][i]][seqint[j][i]]++;
\r
103 // print_matrix(counts,4,4);
\r
104 tots[seqint[j][i]]++;
\r
108 if (seqint[j][i] != -1) {
\r
109 fulltots[seqint[j][i]]++;
\r
116 System.out.println();
\r
118 System.out.println("Sequence " +
\r
119 align.getSequenceAt(j).getName() + " " +
\r
120 align.getSequenceAt(k).getName());
\r
122 System.out.println();
\r
123 print_matrix(counts, 4, 4);
\r
124 System.out.println();
\r
126 double[][] out = new double[4][4]; // = constant_multiply_matrix(counts,1.0/tot,4,4);
\r
128 for (int i = 0; i < 4; i++) {
\r
129 for (int jj = 0; jj < 4; jj++) {
\r
130 out[i][jj] = (double) counts[i][jj] / tots[jj];
\r
134 print_matrix(out, 4, 4);
\r
135 System.out.println();
\r
137 System.out.print("RATES\t");
\r
138 System.out.print(align.getSequenceAt(j).getName() + "\t" +
\r
139 align.getSequenceAt(k).getName() + "\t");
\r
141 for (int i = 0; i < 4; i++) {
\r
142 for (int jj = 0; jj < 4; jj++) {
\r
143 Format.print(System.out, "%4.3f\t", out[i][jj]);
\r
147 System.out.println();
\r
149 for (int i = 0; i < 4; i++) {
\r
150 Format.print(System.out, "%4.3f\t",
\r
151 ((double) fulltots[i] * 1.0) / fulltot);
\r
154 System.out.println();
\r
155 System.out.print("\nGC ");
\r
157 Format.print(System.out, "%4.3f\t",
\r
158 (double) ((100 * fulltots[1]) + fulltots[3]) / fulltot);
\r
160 System.out.print((fulltots[1] + fulltots[3]) + "\t" +
\r
163 System.out.println();
\r
165 rates.addElement(out);
\r
173 public static double[][] constant_multiply_matrix(int[][] matrix, double c,
\r
175 double[][] out = new double[n][m];
\r
177 for (int i = 0; i < n; i++) {
\r
178 for (int j = 0; j < m; j++) {
\r
179 out[i][j] = matrix[i][j] * c;
\r
186 public static void print_matrix(int[][] matrix, int n, int m) {
\r
187 for (int i = 0; i < n; i++) {
\r
188 for (int j = 0; j < m; j++) {
\r
189 System.out.print(matrix[i][j] + "\t");
\r
192 System.out.println();
\r
196 public static void print_matrix(double[][] matrix, int n, int m) {
\r
197 for (int i = 0; i < n; i++) {
\r
198 for (int j = 0; j < m; j++) {
\r
199 Format.print(System.out, "%4.3f\t", matrix[i][j]);
\r
202 System.out.println();
\r