5 * Part of TREE-PUZZLE 5.0 (June 2000)
7 * (c) 1999-2000 by Heiko A. Schmidt, Korbinian Strimmer,
8 * M. Vingron, and Arndt von Haeseler
9 * (c) 1995-1999 by Korbinian Strimmer and Arndt von Haeseler
11 * All parts of the source except where indicated are distributed under
12 * the GNU public licence. See http://www.opensource.org for details.
24 /* number of states of the selected model */
27 if (data_optn == 0) { /* nucleotides */
28 if (nuc_optn) return 4;
29 if (SH_optn) return 16;
30 } else if (data_optn == 1) { /* amino acids */
32 } else { /* two-state model */
38 /* relative transition frequencies */
39 void rtfdata(dmatrix q, double *f)
41 double alp, alpy, alpr;
48 { /* 4x4 nucleotides */
50 alpr = (alp * 2.0) / (YRparam + 1.0);
51 alpy = YRparam * alpr;
53 q[0][1] = 1; q[0][2] = alpr; q[0][3] = 1;
54 q[1][2] = 1; q[1][3] = alpy;
57 f[0] = 0.25; f[1] = 0.25; f[2] = 0.25; f[3] = 0.25;
61 { /* 16x16 nucleotides */
65 q[0][1] = 1; q[0][2] = alp; q[0][3] = 1; q[0][4] = 1;
66 q[0][5] = 0; q[0][6] = 0; q[0][7] = 0; q[0][8] = alp;
67 q[0][9] = 0; q[0][10] = 0; q[0][11] = 0; q[0][12] = 1;
68 q[0][13] = 0; q[0][14] = 0; q[0][15] = 0;
70 q[1][2] = 1; q[1][3] = alp; q[1][4] = 0; q[1][5] = 1;
71 q[1][6] = 0; q[1][7] = 0; q[1][8] = 0; q[1][9] = alp;
72 q[1][10] = 0; q[1][11] = 0; q[1][12] = 0; q[1][13] = 1;
73 q[1][14] = 0; q[1][15] = 0;
75 q[2][3] = 1; q[2][4] = 0; q[2][5] = 0; q[2][6] = 1;
76 q[2][7] = 0; q[2][8] = 0; q[2][9] = 0; q[2][10] = alp;
77 q[2][11] = 0; q[2][12] = 0; q[2][13] = 0; q[2][14] = 1;
80 q[3][4] = 0; q[3][5] = 0; q[3][6] = 0; q[3][7] = 1;
81 q[3][8] = 0; q[3][9] = 0; q[3][10] = 0; q[3][11] = alp;
82 q[3][12] = 0; q[3][13] = 0; q[3][14] = 0; q[3][15] = 1;
84 q[4][5] = 1; q[4][6] = alp; q[4][7] = 1; q[4][8] = 1;
85 q[4][9] = 0; q[4][10] = 0; q[4][11] = 0; q[4][12] = alp;
86 q[4][13] = 0; q[4][14] = 0; q[4][15] = 0;
88 q[5][6] = 1; q[5][7] = alp; q[5][8] = 0; q[5][9] = 1;
89 q[5][10] = 0; q[5][11] = 0; q[5][12] = 0; q[5][13] = alp;
90 q[5][14] = 0; q[5][15] = 0;
92 q[6][7] = 1; q[6][8] = 0; q[6][9] = 0; q[6][10] = 1;
93 q[6][11] = 0; q[6][12] = 0; q[6][13] = 0; q[6][14] = alp;
96 q[7][8] = 0; q[7][9] = 0; q[7][10] = 0; q[7][11] = 1;
97 q[7][12] = 0; q[7][13] = 0; q[7][14] = 0; q[7][15] = alp;
99 q[8][9] = 1; q[8][10] = alp; q[8][11] = 1; q[8][12] = 1;
100 q[8][13] = 0; q[8][14] = 0; q[8][15] = 0;
102 q[9][10] = 1; q[9][11] = alp; q[9][12] = 0; q[9][13] = 1;
103 q[9][14] = 0; q[9][15] = 0;
105 q[10][11] = 1; q[10][12] = 0; q[10][13] = 0; q[10][14] = 1;
108 q[11][12] = 0; q[11][13] = 0; q[11][14] = 0; q[11][15] = 1;
110 q[12][13] = 1; q[12][14] = alp; q[12][15] = 1;
112 q[13][14] = 1; q[13][15] = alp;
117 for (i = 0; i < 16; i++) f[i] = 0.0625;
120 else if (data_optn == 1)
122 if (Dayhf_optn) /* Dayhoff model */
126 else if (Jtt_optn) /* JTT model */
130 else if (blosum62_optn) /* BLOSUM 62 model */
134 else if (mtrev_optn) /* mtREV model */
138 else if (cprev_optn) /* cpREV model */
142 else if (vtmv_optn) /* VT model */
146 else /* if (wag_optn) */ /* WAG model */
152 else /* two-state model */
156 f[0] = 0.5; f[1] = 0.5;
159 /* fill matrix from upper triangle */
160 for (i = 0; i < tpmradix; i++)
163 for (j = i+1; j < tpmradix; j++)
170 /* transform letter codes to state numbers */
171 int code2int(cvector c)
172 { if (data_optn == 0) { /* nucleotides */
173 if (nuc_optn) { /* 4x4 */
183 if (SH_optn) { /* 16x16 */
186 case 'A': return 0; /* AA */
187 case 'C': return 1; /* AC */
188 case 'G': return 2; /* AG */
189 case 'T': return 3; /* AT */
190 case 'U': return 3; /* AT */
196 case 'A': return 4; /* CA */
197 case 'C': return 5; /* CC */
198 case 'G': return 6; /* CG */
199 case 'T': return 7; /* CT */
200 case 'U': return 7; /* CT */
206 case 'A': return 8; /* GA */
207 case 'C': return 9; /* GC */
208 case 'G': return 10; /* GG */
209 case 'T': return 11; /* GT */
210 case 'U': return 11; /* GT */
214 if (c[0] == 'T' || c[0] == 'U') {
216 case 'A': return 12; /* TA */
217 case 'C': return 13; /* TC */
218 case 'G': return 14; /* TG */
219 case 'T': return 15; /* TT */
220 case 'U': return 15; /* TT */
226 } else if (data_optn == 1) { /* amino acids */
250 } else { /* two-state model */
260 /* return letter code belonging to state number */
261 char *int2code(int s)
263 if (data_optn == 0) { /* nucleotides */
264 if (nuc_optn) { /* 4x4 */
270 default : return "?";
273 if (SH_optn) { /* 16x16 */
285 case 10: return "GG";
286 case 11: return "GT";
287 case 12: return "TA";
288 case 13: return "TC";
289 case 14: return "TG";
290 case 15: return "TT";
291 default : return "??";
294 } else if (data_optn == 1) { /* amino acids */
316 default : return "?";
318 } else { /* two-state model */
322 default : return "?";