18 #define ih_assert(bed) arb_assert(bed)
24 i[
T][
T]=1; i[
T][
C]=0; i[
T][
A]=0; i[
T][
G]=0;
25 i[
C][
T]=0; i[
C][
C]=1; i[
C][
A]=0; i[
C][
G]=0;
26 i[
A][
T]=0; i[
A][
C]=0; i[
A][
A]=1; i[
A][
G]=0;
27 i[
G][
T]=0; i[
G][
C]=0; i[
G][
A]=0; i[
G][
G]=1;
32 static void copy(
double **i,
double **j) {
41 static void ipol(
double **i,
double **j,
double **k,
double f) {
double g; g=1.0-f;
50 static void addmul(
double **i,
double **j,
double f) {
51 i[
T][
T]+=j[
T][
T]*f; i[
T][
C]+=j[
T][
C]*f; i[
T][
A]+=j[
T][
A]*f; i[
T][
G]+=j[
T][
G]*f;
52 i[
C][
T]+=j[
C][
T]*f; i[
C][
C]+=j[
C][
C]*f; i[
C][
A]+=j[
C][
A]*f; i[
C][
G]+=j[
C][
G]*f;
53 i[
A][
T]+=j[
A][
T]*f; i[
A][
C]+=j[
A][
C]*f; i[
A][
A]+=j[
A][
A]*f; i[
A][
G]+=j[
A][
G]*f;
54 i[
G][
T]+=j[
G][
T]*f; i[
G][
C]+=j[
G][
C]*f; i[
G][
A]+=j[
G][
A]*f; i[
G][
G]+=j[
G][
G]*f;
59 static void dot(
double **i,
double **j,
double **k) {
103 default :
return '-';
111 double *F,
double fT,
double fC,
double fA,
double fG
117 if(s<
REAL_MIN) {fT=1.; fC=1.; fA=1.; fG=1.; s=4.;}
119 fT/=
s; fC/=
s; fA/=
s; fG/=
s;
126 F[
T]=fT; F[
C]=fC; F[
A]=fA; F[
G]=fG;
133 double *X,
double a,
double b,
double c,
double d,
double e,
double f
139 if(s<
REAL_MIN) {a=1.; b=1.; c=1.; d=1.; e=1.; s=6.;}
141 a/=
s; b/=
s; c/=
s; d/=
s; e/=
s;
149 X[0]=a; X[1]=b; X[2]=c; X[3]=d; X[4]=e;
156 double ***
P;
short j;
158 P=(
double***)
newVector(128,
sizeof(
double **));
159 for(j=0;j<128;j++) P[j]=(
double **)
newMatrix(
N,
N,
sizeof(
double));
168 double ***
P;
short j;
181 double *Y[
N],YT[
N],YC[
N],YA[
N],YG[
N];
182 double *
Z[
N],ZT[
N],ZC[
N],ZA[
N],ZG[
N];
183 double *X[
N],XT[
N],XC[
N],XA[
N],XG[
N];
187 if( I < 0 ) {
copy(P,PP[0]);
return;}
189 X[
T]=XT; X[
C]=XC; X[
A]=XA; X[
G]=XG;
191 if( I < 32 ) {
ipol(X,PP[I],PP[I==31?33:I+1],d-I);
copy(P,X);
return;}
194 J=I%32;
ipol(X,PP[J],PP[J==31?33:J+1],d-I);
195 dot(P,PP[ I/32 + 32 ],X);
199 Y[
T]=YT; Y[
C]=YC; Y[
A]=YA; Y[
G]=YG;
202 J=I%32;
ipol(X,PP[J],PP[J==31?33:J+1],d-I);
203 J=I%1024;
dot(Y,PP[ J/32 + 32 ],X);
204 dot(P,PP[ I/1024 + 64 ],Y);
208 Z[
T]=ZT; Z[
C]=ZC; Z[
A]=ZA; Z[
G]=ZG;
211 J=I%32;
ipol(X,PP[J],PP[J==31?33:J+1],d-I);
212 J=I%1024;
dot(Y,PP[ J/32 + 32 ],X);
213 J=I%32768;
dot(Z,PP[ J/1024 + 64 ],Y);
214 dot(P,PP[ I/32768 + 96 ],Z);
218 dot(Y,PP[ 31 + 32 ],PP[31]);
219 dot(Z,PP[ 31 + 64 ],Y);
220 dot(P,PP[ 31 + 96 ],Z);
227 double s,a,b,c,d,e,f;
228 double *Q[
N],QT[
N],QC[
N],QA[
N],QG[
N];
229 double *R[
N],RT[
N],RC[
N],RA[
N],RG[
N];
230 double *S[
N],ST[
N],SC[
N],SA[
N],SG[
N];
232 Q[
T]=QT; Q[
C]=QC; Q[
A]=QA; Q[
G]=QG;
233 R[
T]=RT; R[
C]=RC; R[
A]=RA; R[
G]=RG;
234 S[
T]=ST; S[
C]=SC; S[
A]=SA; S[
G]=SG;
237 case REV: a = X[0]; b=X[1]; c=X[2]; d=X[3]; e=X[4]; f=1.0-(a+b+c+d+e);
break;
238 case TN93: a = X[0]; b=c=d=e=X[1]; f=1.0-(a+b+c+d+e);
break;
239 case HKY85: a = f=X[0]; b=c=d=e=0.25*(1.0-(a+f));
break;
243 s=0.5/(a*F[
T]*F[
C]+b*F[
T]*F[
A]+c*F[
T]*F[
G]+d*F[
C]*F[
A]+e*F[
C]*F[
G]+f*F[
A]*F[
G]);
250 Q[
T][
T] = - ( Q[
T][
C] + Q[
T][
A] + Q[
T][
G] );
251 Q[
C][
C] = - ( Q[
C][
T] + Q[
C][
A] + Q[
C][
G] );
252 Q[
A][
A] = - ( Q[
A][
T] + Q[
A][
C] + Q[
A][
G] );
253 Q[
G][
G] = - ( Q[
G][
T] + Q[
G][
C] + Q[
G][
A] );
269 dot(PP[ 2 ],PP[ 1 ],PP[ 1 ]);
270 dot(PP[ 4 ],PP[ 2 ],PP[ 2 ]);
271 dot(PP[ 8 ],PP[ 4 ],PP[ 4 ]);
272 dot(PP[ 16 ],PP[ 8 ],PP[ 8 ]);
273 dot(PP[ 1 + 32 ],PP[ 16 ],PP[ 16 ]);
274 dot(PP[ 2 + 32 ],PP[ 1 + 32 ],PP[ 1 + 32 ]);
275 dot(PP[ 4 + 32 ],PP[ 2 + 32 ],PP[ 2 + 32 ]);
276 dot(PP[ 8 + 32 ],PP[ 4 + 32 ],PP[ 4 + 32 ]);
277 dot(PP[ 16 + 32 ],PP[ 8 + 32 ],PP[ 8 + 32 ]);
278 dot(PP[ 1 + 64 ],PP[ 16 + 32 ],PP[ 16 + 32 ]);
279 dot(PP[ 2 + 64 ],PP[ 1 + 64 ],PP[ 1 + 64 ]);
280 dot(PP[ 4 + 64 ],PP[ 2 + 64 ],PP[ 2 + 64 ]);
281 dot(PP[ 8 + 64 ],PP[ 4 + 64 ],PP[ 4 + 64 ]);
282 dot(PP[ 16 + 64 ],PP[ 8 + 64 ],PP[ 8 + 64 ]);
283 dot(PP[ 1 + 96 ],PP[ 16 + 64 ],PP[ 16 + 64 ]);
284 dot(PP[ 2 + 96 ],PP[ 1 + 96 ],PP[ 1 + 96 ]);
285 dot(PP[ 4 + 96 ],PP[ 2 + 96 ],PP[ 2 + 96 ]);
286 dot(PP[ 8 + 96 ],PP[ 4 + 96 ],PP[ 4 + 96 ]);
287 dot(PP[ 16 + 96 ],PP[ 8 + 96 ],PP[ 8 + 96 ]);
289 dot(PP[ 3 ],PP[ 2 ],PP[ 1 ]);
290 dot(PP[ 6 ],PP[ 3 ],PP[ 3 ]);
291 dot(PP[ 12 ],PP[ 6 ],PP[ 6 ]);
292 dot(PP[ 24 ],PP[ 12 ],PP[ 12 ]);
293 dot(PP[ 3 + 32 ],PP[ 2 + 32 ],PP[ 1 + 32 ]);
294 dot(PP[ 6 + 32 ],PP[ 3 + 32 ],PP[ 3 + 32 ]);
295 dot(PP[ 12 + 32 ],PP[ 6 + 32 ],PP[ 6 + 32 ]);
296 dot(PP[ 24 + 32 ],PP[ 12 + 32 ],PP[ 12 + 32 ]);
297 dot(PP[ 3 + 64 ],PP[ 2 + 64 ],PP[ 1 + 64 ]);
298 dot(PP[ 6 + 64 ],PP[ 3 + 64 ],PP[ 3 + 64 ]);
299 dot(PP[ 12 + 64 ],PP[ 6 + 64 ],PP[ 6 + 64 ]);
300 dot(PP[ 24 + 64 ],PP[ 12 + 64 ],PP[ 12 + 64 ]);
301 dot(PP[ 3 + 96 ],PP[ 2 + 96 ],PP[ 1 + 96 ]);
302 dot(PP[ 6 + 96 ],PP[ 3 + 96 ],PP[ 3 + 96 ]);
303 dot(PP[ 12 + 96 ],PP[ 6 + 96 ],PP[ 6 + 96 ]);
304 dot(PP[ 24 + 96 ],PP[ 12 + 96 ],PP[ 12 + 96 ]);
306 dot(PP[ 5 ],PP[ 3 ],PP[ 2 ]);
307 dot(PP[ 10 ],PP[ 5 ],PP[ 5 ]);
308 dot(PP[ 20 ],PP[ 10 ],PP[ 10 ]);
309 dot(PP[ 5 + 32 ],PP[ 3 + 32 ],PP[ 2 + 32 ]);
310 dot(PP[ 10 + 32 ],PP[ 5 + 32 ],PP[ 5 + 32 ]);
311 dot(PP[ 20 + 32 ],PP[ 10 + 32 ],PP[ 10 + 32 ]);
312 dot(PP[ 5 + 64 ],PP[ 3 + 64 ],PP[ 2 + 64 ]);
313 dot(PP[ 10 + 64 ],PP[ 5 + 64 ],PP[ 5 + 64 ]);
314 dot(PP[ 20 + 64 ],PP[ 10 + 64 ],PP[ 10 + 64 ]);
315 dot(PP[ 5 + 96 ],PP[ 3 + 96 ],PP[ 2 + 96 ]);
316 dot(PP[ 10 + 96 ],PP[ 5 + 96 ],PP[ 5 + 96 ]);
317 dot(PP[ 20 + 96 ],PP[ 10 + 96 ],PP[ 10 + 96 ]);
319 dot(PP[ 7 ],PP[ 4 ],PP[ 3 ]);
320 dot(PP[ 14 ],PP[ 7 ],PP[ 7 ]);
321 dot(PP[ 28 ],PP[ 14 ],PP[ 14 ]);
322 dot(PP[ 7 + 32 ],PP[ 4 + 32 ],PP[ 3 + 32 ]);
323 dot(PP[ 14 + 32 ],PP[ 7 + 32 ],PP[ 7 + 32 ]);
324 dot(PP[ 28 + 32 ],PP[ 14 + 32 ],PP[ 14 + 32 ]);
325 dot(PP[ 7 + 64 ],PP[ 4 + 64 ],PP[ 3 + 64 ]);
326 dot(PP[ 14 + 64 ],PP[ 7 + 64 ],PP[ 7 + 64 ]);
327 dot(PP[ 28 + 64 ],PP[ 14 + 64 ],PP[ 14 + 64 ]);
328 dot(PP[ 7 + 96 ],PP[ 4 + 96 ],PP[ 3 + 96 ]);
329 dot(PP[ 14 + 96 ],PP[ 7 + 96 ],PP[ 7 + 96 ]);
330 dot(PP[ 28 + 96 ],PP[ 14 + 96 ],PP[ 14 + 96 ]);
332 dot(PP[ 9 ],PP[ 5 ],PP[ 4 ]);
333 dot(PP[ 18 ],PP[ 9 ],PP[ 9 ]);
334 dot(PP[ 9 + 32 ],PP[ 5 + 32 ],PP[ 4 + 32 ]);
335 dot(PP[ 18 + 32 ],PP[ 9 + 32 ],PP[ 9 + 32 ]);
336 dot(PP[ 9 + 64 ],PP[ 5 + 64 ],PP[ 4 + 64 ]);
337 dot(PP[ 18 + 64 ],PP[ 9 + 64 ],PP[ 9 + 64 ]);
338 dot(PP[ 9 + 96 ],PP[ 5 + 96 ],PP[ 4 + 96 ]);
339 dot(PP[ 18 + 96 ],PP[ 9 + 96 ],PP[ 9 + 96 ]);
341 dot(PP[ 11 ],PP[ 6 ],PP[ 5 ]);
342 dot(PP[ 22 ],PP[ 11 ],PP[ 11 ]);
343 dot(PP[ 11 + 32 ],PP[ 6 + 32 ],PP[ 5 + 32 ]);
344 dot(PP[ 22 + 32 ],PP[ 11 + 32 ],PP[ 11 + 32 ]);
345 dot(PP[ 11 + 64 ],PP[ 6 + 64 ],PP[ 5 + 64 ]);
346 dot(PP[ 22 + 64 ],PP[ 11 + 64 ],PP[ 11 + 64 ]);
347 dot(PP[ 11 + 96 ],PP[ 6 + 96 ],PP[ 5 + 96 ]);
348 dot(PP[ 22 + 96 ],PP[ 11 + 96 ],PP[ 11 + 96 ]);
350 dot(PP[ 13 ],PP[ 7 ],PP[ 6 ]);
351 dot(PP[ 26 ],PP[ 13 ],PP[ 13 ]);
352 dot(PP[ 13 + 32 ],PP[ 7 + 32 ],PP[ 6 + 32 ]);
353 dot(PP[ 26 + 32 ],PP[ 13 + 32 ],PP[ 13 + 32 ]);
354 dot(PP[ 13 + 64 ],PP[ 7 + 64 ],PP[ 6 + 64 ]);
355 dot(PP[ 26 + 64 ],PP[ 13 + 64 ],PP[ 13 + 64 ]);
356 dot(PP[ 13 + 96 ],PP[ 7 + 96 ],PP[ 6 + 96 ]);
357 dot(PP[ 26 + 96 ],PP[ 13 + 96 ],PP[ 13 + 96 ]);
359 dot(PP[ 15 ],PP[ 8 ],PP[ 7 ]);
360 dot(PP[ 30 ],PP[ 15 ],PP[ 15 ]);
361 dot(PP[ 15 + 32 ],PP[ 8 + 32 ],PP[ 7 + 32 ]);
362 dot(PP[ 30 + 32 ],PP[ 15 + 32 ],PP[ 15 + 32 ]);
363 dot(PP[ 15 + 64 ],PP[ 8 + 64 ],PP[ 7 + 64 ]);
364 dot(PP[ 30 + 64 ],PP[ 15 + 64 ],PP[ 15 + 64 ]);
365 dot(PP[ 15 + 96 ],PP[ 8 + 96 ],PP[ 7 + 96 ]);
366 dot(PP[ 30 + 96 ],PP[ 15 + 96 ],PP[ 15 + 96 ]);
368 dot(PP[ 17 ],PP[ 9 ],PP[ 8 ]);
369 dot(PP[ 17 + 32 ],PP[ 9 + 32 ],PP[ 8 + 32 ]);
370 dot(PP[ 17 + 64 ],PP[ 9 + 64 ],PP[ 8 + 64 ]);
371 dot(PP[ 17 + 96 ],PP[ 9 + 96 ],PP[ 8 + 96 ]);
373 dot(PP[ 19 ],PP[ 10 ],PP[ 9 ]);
374 dot(PP[ 19 + 32 ],PP[ 10 + 32 ],PP[ 9 + 32 ]);
375 dot(PP[ 19 + 64 ],PP[ 10 + 64 ],PP[ 9 + 64 ]);
376 dot(PP[ 19 + 96 ],PP[ 10 + 96 ],PP[ 9 + 96 ]);
378 dot(PP[ 21 ],PP[ 11 ],PP[ 10 ]);
379 dot(PP[ 21 + 32 ],PP[ 11 + 32 ],PP[ 10 + 32 ]);
380 dot(PP[ 21 + 64 ],PP[ 11 + 64 ],PP[ 10 + 64 ]);
381 dot(PP[ 21 + 96 ],PP[ 11 + 96 ],PP[ 10 + 96 ]);
383 dot(PP[ 23 ],PP[ 12 ],PP[ 11 ]);
384 dot(PP[ 23 + 32 ],PP[ 12 + 32 ],PP[ 11 + 32 ]);
385 dot(PP[ 23 + 64 ],PP[ 12 + 64 ],PP[ 11 + 64 ]);
386 dot(PP[ 23 + 96 ],PP[ 12 + 96 ],PP[ 11 + 96 ]);
388 dot(PP[ 25 ],PP[ 13 ],PP[ 12 ]);
389 dot(PP[ 25 + 32 ],PP[ 13 + 32 ],PP[ 12 + 32 ]);
390 dot(PP[ 25 + 64 ],PP[ 13 + 64 ],PP[ 12 + 64 ]);
391 dot(PP[ 25 + 96 ],PP[ 13 + 96 ],PP[ 12 + 96 ]);
393 dot(PP[ 27 ],PP[ 14 ],PP[ 13 ]);
394 dot(PP[ 27 + 32 ],PP[ 14 + 32 ],PP[ 13 + 32 ]);
395 dot(PP[ 27 + 64 ],PP[ 14 + 64 ],PP[ 13 + 64 ]);
396 dot(PP[ 27 + 96 ],PP[ 14 + 96 ],PP[ 13 + 96 ]);
398 dot(PP[ 29 ],PP[ 15 ],PP[ 14 ]);
399 dot(PP[ 29 + 32 ],PP[ 15 + 32 ],PP[ 14 + 32 ]);
400 dot(PP[ 29 + 64 ],PP[ 15 + 64 ],PP[ 14 + 64 ]);
401 dot(PP[ 29 + 96 ],PP[ 15 + 96 ],PP[ 14 + 96 ]);
403 dot(PP[ 31 ],PP[ 16 ],PP[ 15 ]);
404 dot(PP[ 31 + 32 ],PP[ 16 + 32 ],PP[ 15 + 32 ]);
405 dot(PP[ 31 + 64 ],PP[ 16 + 64 ],PP[ 15 + 64 ]);
406 dot(PP[ 31 + 96 ],PP[ 16 + 96 ],PP[ 15 + 96 ]);
void initTrnsprob(double ****PP)
void uninitTrnsprob(double ****PP)
static void dot(double **i, double **j, double **k)
void normalizeBaseFreqs(double *F, double fT, double fC, double fA, double fG)
void updateTrnsprob(double ***PP, double *F, double *X, short M)
static void identity(double **i)
static void ipol(double **i, double **j, double **k, double f)
static void copy(double **i, double **j)
static void addmul(double **i, double **j, double f)
void ** newMatrix(size_t nrow, size_t ncol, size_t s)
void getTrnsprob(double **P, double ***PP, double d)
void normalizeRateParams(double *X, double a, double b, double c, double d, double e, double f)
GB_write_int const char s