Now displays sequence features
[jalview.git] / src / jalview / analysis / AlignmentUtil.java
1 package jalview.analysis;\r
2 \r
3 import jalview.datamodel.*;\r
4 import jalview.util.*;\r
5 import java.util.*;\r
6 \r
7 public class AlignmentUtil {\r
8 \r
9   private AlignmentUtil() {\r
10   }\r
11 \r
12   public static int[][] percentIdentity2(AlignmentI align) {\r
13     return percentIdentity2(align,0,align.getWidth()-1);\r
14   }\r
15 \r
16   public static int[][] percentIdentity2(AlignmentI align, int start, int end) {\r
17     int [][] cons2 = new int[align.getWidth()][24];\r
18     // Initialize the array\r
19     for (int j=0;j<24;j++) {\r
20       for (int i=0; i < align.getWidth();i++) {\r
21         cons2[i][j] = 0;\r
22       }\r
23     }\r
24 \r
25     return cons2;\r
26   }\r
27   public static int getPixelHeight(int i, int j,int charHeight) {\r
28     int h=0;\r
29     while (i < j) {\r
30       h += charHeight;\r
31       i++;\r
32     }\r
33     return h;\r
34   }\r
35 \r
36 \r
37     public static Vector substitution_rates (AlignmentI align, int start, int end) {\r
38 \r
39         Vector rates = new Vector();\r
40 \r
41         int len = (end-start+1);\r
42 \r
43         // Turn seqs into char arrays\r
44 \r
45         int[][] seqint = new int[align.getHeight()][len];\r
46 \r
47 \r
48         for (int j = 0; j < align.getHeight(); j++) {\r
49 \r
50             SequenceI seq = align.getSequenceAt(j);\r
51 \r
52             for (int i = 0 ; i < len; i++) {\r
53                 char c = seq.getCharAt(start + i - 1);\r
54 \r
55                 if (c == 'A') {\r
56                     seqint[j][i] = 0;\r
57                 } else if (c == 'C') {\r
58                     seqint[j][i] = 1;\r
59                 } else if (c == 'T') {\r
60                     seqint[j][i] = 2;\r
61                 } else if (c == 'G') {\r
62                     seqint[j][i] = 3;\r
63                 } else {\r
64                     seqint[j][i] = -1;\r
65                 }\r
66 \r
67             }\r
68 \r
69         }\r
70 \r
71 \r
72         //      print_matrix(seqint,2,len);     for (int j = 0; j < align.getHeight(); j++) {\r
73 \r
74             for (int j = 0; j < align.getHeight(); j++) {\r
75 \r
76                 for (int k = 0; k < align.getHeight(); k++) {\r
77 \r
78                 int counts[][] = new int[4][4];\r
79                 int tot  = 0;\r
80                 int tots[] = new int[4];\r
81                 int fulltot = 0;\r
82                 int fulltots[] = new int[4];\r
83 \r
84                 for (int i = 0 ; i < len; i++) {\r
85 \r
86                     if (k != j) {\r
87 \r
88                         //                      System.out.println("Seq " + j + " " + k + " " + i + " " + seqint[j][i] + " " + seqint[k][i]);\r
89                         if (seqint[j][i] >= 0 &&\r
90                             seqint[k][i] >= 0) {\r
91                             counts[seqint[k][i]][seqint[j][i]]++;\r
92 \r
93                             //  print_matrix(counts,4,4);\r
94                             tots[seqint[j][i]]++;\r
95                             tot++;\r
96                         }\r
97                         if (seqint[j][i] != -1) {\r
98                             fulltots[seqint[j][i]]++;\r
99                             fulltot++;\r
100                         }\r
101                     }\r
102                 }\r
103 \r
104                 if (k != j) {\r
105 \r
106                     System.out.println();\r
107 \r
108                     System.out.println("Sequence " + align.getSequenceAt(j).getName() + " "  + align.getSequenceAt(k).getName());\r
109 \r
110                     System.out.println();\r
111                     print_matrix(counts,4,4);\r
112                     System.out.println();\r
113 \r
114 \r
115 \r
116                     double[][] out = new double[4][4];// = constant_multiply_matrix(counts,1.0/tot,4,4);\r
117 \r
118                     for (int i = 0; i < 4; i++) {\r
119                         for (int jj = 0; jj < 4; jj++) {\r
120                             out[i][jj] = (double)counts[i][jj]/tots[jj];\r
121                         }\r
122                     }\r
123 \r
124                     print_matrix(out,4,4);\r
125                     System.out.println();\r
126 \r
127 \r
128                     System.out.print("RATES\t");\r
129                     System.out.print(align.getSequenceAt(j).getName() + "\t"  + align.getSequenceAt(k).getName() + "\t");\r
130 \r
131                     for (int i = 0; i < 4; i++) {\r
132                         for (int jj = 0; jj < 4; jj++) {\r
133                             Format.print(System.out,"%4.3f\t",out[i][jj]);\r
134                         }\r
135                     }\r
136                     System.out.println();\r
137 \r
138                     for (int i = 0; i < 4; i++) {\r
139                         Format.print(System.out,"%4.3f\t",(double)fulltots[i]*1.0/fulltot);\r
140                     }\r
141 \r
142                     System.out.println();\r
143                     System.out.print("\nGC ");\r
144 \r
145                     Format.print(System.out,"%4.3f\t",(double)(100*fulltots[1]+fulltots[3])/fulltot);\r
146 \r
147                     System.out.print((fulltots[1]+fulltots[3]) + "\t" + fulltot);\r
148 \r
149 \r
150                     System.out.println();\r
151 \r
152                     rates.addElement(out);\r
153                 }\r
154 \r
155             }\r
156         }\r
157         return rates;\r
158     }\r
159 \r
160     public static double[][]  constant_multiply_matrix(int[][] matrix, double c,int n, int m) {\r
161         double[][] out = new double[n][m];\r
162 \r
163         for (int i = 0; i < n; i++) {\r
164             for (int j = 0; j < m; j++) {\r
165 \r
166                 out[i][j] = matrix[i][j]*c;\r
167             }\r
168         }\r
169         return out;\r
170     }\r
171 \r
172 \r
173     public static void print_matrix(int[][] matrix, int n, int m) {\r
174 \r
175 \r
176         for (int i = 0; i < n; i++) {\r
177             for (int j = 0; j < m; j++) {\r
178 \r
179                 System.out.print(matrix[i][j] + "\t");\r
180             }\r
181             System.out.println();\r
182         }\r
183     }\r
184     public static void print_matrix(double[][] matrix, int n, int m) {\r
185 \r
186 \r
187         for (int i = 0; i < n; i++) {\r
188             for (int j = 0; j < m; j++) {\r
189 \r
190                 Format.print(System.out,"%4.3f\t",matrix[i][j]);\r
191 \r
192             }\r
193             System.out.println();\r
194         }\r
195     }\r
196 \r
197     public static Hashtable findKmers(SequenceI seq, int start, int end, Vector kmers) {\r
198 \r
199          Hashtable pos = new Hashtable();\r
200 \r
201          for (int j = 0; j < kmers.size(); j++) {\r
202 \r
203            String   kmer    = ((Sequence)kmers.elementAt(j)).getSequence();\r
204            Sequence kmerseq = (Sequence)kmers.elementAt(j);\r
205 \r
206            if (end < seq.getLength()) {\r
207 \r
208                String str = seq.getSequence(start,end);\r
209 \r
210                int i = 0;\r
211 \r
212                while (str.indexOf(kmer,i) != -1) {\r
213 \r
214                //               System.out.println("STring " + str + " " + i);\r
215                    int coord = str.indexOf(kmer,i);\r
216 \r
217                    pos.put(new Integer(coord),new Integer(kmerseq.getLength()));\r
218 \r
219                    i  = coord + 1;\r
220 \r
221                }\r
222            }\r
223          }\r
224          return pos;\r
225     }\r
226 \r
227     public static void fetchSequenceFeatures(AlignmentI al, jalview.gui.AlignmentPanel ap)\r
228     {\r
229       SequenceFeatureFetcher sft = new SequenceFeatureFetcher(al, ap);\r
230     }\r
231 \r
232 }\r