4
Released under GPL - see the 'COPYING' file
6
Copyright (C) 2006 Timo Lassmann <timolassmann@gmail.com>
8
This program is free software; you can redistribute it and/or modify
9
it under the terms of the GNU General Public License as published by
10
the Free Software Foundation; either version 2 of the License, or
13
This program is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
GNU General Public License for more details.
18
You should have received a copy of the GNU General Public License
19
along with this program; if not, write to the Free Software
20
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22
Please send bug reports, comments etc. to:
23
timolassmann@gmail.com
28
int* f_only_pp_dyn(int* path, struct dp_matrix *dp,const float* fprof1,const float* fprof2,const int len_a,const int len_b,int fdim,int stride)
30
// unsigned int freq[26];
35
register float pa = 0;
36
register float pga = 0;
37
register float pgb = 0;
38
register float ca = 0;
48
trace[len_a][len_b] = 32;
50
fprof1 += len_a * stride;
54
s[len_b].ga = -FLOATINFTY;
55
s[len_b].gb = -FLOATINFTY;
57
tracep = trace[len_a];
64
s[j].ga = s[j+1].a;//+prof2[29];
65
if (s[j+1].ga > s[j].ga){
68
s[j].gb = -FLOATINFTY;
73
s[0].ga = -FLOATINFTY;
74
s[0].gb = -FLOATINFTY;
84
s[len_b].a = -FLOATINFTY;
85
s[len_b].ga = -FLOATINFTY;
88
s[len_b].gb = pa;//+prof1[29];
89
if(pgb > s[len_b].gb){
97
fprof2 += len_b * stride;
114
for (f = 0; f < fdim;f++){
115
// fprintf(stderr,"%d %d: %d\n",i,j,fprof1[pga] * fprof2[pga+fdim]);
116
pa += fprof1[f] * fprof2[f+fdim];
124
if (s[j+1].ga > s[j].ga){
155
for (f = 0; f < fdim;f++){
156
// fprintf(stderr,"%d %d: %d\n",i,j,fprof1[pga] * fprof2[pga+fdim]);
157
pa += fprof1[f] * fprof2[f+fdim];
162
s[0].ga = -FLOATINFTY;
179
fprof2 += len_b * stride;
184
s[j].a = -FLOATINFTY;
185
s[j].ga = -FLOATINFTY;
187
s[len_b].gb = pa;//+prof1[29];
188
if(pgb > s[len_b].gb){
212
for (f = 0; f < fdim;f++){
213
pa += fprof1[f] * fprof2[f+fdim];
214
// fprintf(stderr,"%d %d: %d\n",i,j,fprof1[pga] * fprof2[pga+fdim]);
221
if (s[j+1].ga > s[j].ga){
226
s[j].gb = -FLOATINFTY;
247
for (f = 0; f < fdim;f++){
248
pa += fprof1[f] * fprof2[f+fdim];
249
// fprintf(stderr,"%d %d: %d\n",i,j,fprof1[pga] * fprof2[pga+fdim]);
255
if (s[1].ga > s[0].ga){
279
//fprintf(stderr,"SCORE:%d\n",ca);
285
while(trace[i][j] < 32){
286
// fprintf(stderr,"%d->%d %d:%d %d:%d\n",c,trace[i][j],i,j,len_a,len_b);
289
if (trace[i][j] & 2){
293
// fprintf(stderr,"GAP_CLOSE\n");
297
}else if (trace[i][j] & 4){
301
// fprintf(stderr,"GAP_CLOSE\n");
314
if(i!=0 && i!= len_a){
315
// / fprintf(stderr,"GAP_EXT\n");
326
if(i!=0 && i!= len_a){
327
// fprintf(stderr,"GAP_OPEN\n");
337
if(trace[i][j] & 16){
339
if(j !=0 && j != len_b){
340
// fprintf(stderr,"GAP_EXT\n");
351
if(j!=0 && j != len_b){
352
// fprintf(stderr,"GAP_OPEN\n");
373
int* fpp_dyn(int* path, struct dp_matrix *dp,const float* prof1,const float* prof2,const float* fprof1,const float* fprof2,const int len_a,const int len_b,int fdim,int stride)
375
unsigned int freq[26];
377
struct states* s = 0;
380
register float pa = 0;
381
register float pga = 0;
382
register float pgb = 0;
383
register float ca = 0;
394
trace[len_a][len_b] = 32;
398
fprof1 += len_a * stride;
402
s[len_b].ga = -FLOATINFTY;
403
s[len_b].gb = -FLOATINFTY;
405
tracep = trace[len_a];
409
s[j].a = -FLOATINFTY;
412
s[j].ga = s[j+1].a+prof2[29];//+prof2[29];
413
if (s[j+1].ga+prof2[29] > s[j].ga){
414
s[j].ga = s[j+1].ga+prof2[29];
416
s[j].gb = -FLOATINFTY;
420
s[0].a = -FLOATINFTY;
421
s[0].ga = -FLOATINFTY;
422
s[0].gb = -FLOATINFTY;
442
s[len_b].a = -FLOATINFTY;
443
s[len_b].ga = -FLOATINFTY;
446
s[len_b].gb = pa+prof1[29];//+prof1[29];
447
if(pgb+prof1[29] > s[len_b].gb){
448
s[len_b].gb = pgb+prof1[29];
456
fprof2 += len_b * stride;
465
if((pga += prof2[91]) > pa){
469
if((pgb += prof1[91]) > pa){
475
for (f = freq[0];--f;){
476
pa += prof1[freq[f]]*prof2[freq[f]];
480
for (f = 0; f < fdim;f++){
481
// fprintf(stderr,"%d %d: %d\n",i,j,fprof1[pga] * fprof2[pga+fdim]);
482
pa += fprof1[f] * fprof2[f+fdim];
489
s[j].ga = s[j+1].a+prof2[27];
490
if (s[j+1].ga+prof2[28] > s[j].ga){
491
s[j].ga = s[j+1].ga+prof2[28];
497
s[j].gb = ca+prof1[27];
498
if(pgb+prof1[28] > s[j].gb){
499
s[j].gb = pgb+prof1[28];
514
if((pga+=prof2[91]) > pa){
518
if((pgb+=prof1[91]) > pa){
524
for (f = freq[0];--f;){
525
pa += prof1[freq[f]]*prof2[freq[f]];
529
for (f = 0; f < fdim;f++){
530
// fprintf(stderr,"%d %d: %d\n",i,j,fprof1[pga] * fprof2[pga+fdim]);
531
pa += fprof1[f] * fprof2[f+fdim];
536
s[0].ga = -FLOATINFTY;
539
s[0].gb = ca+prof1[27]+prof1[29];
540
if(pgb+prof1[29] > s[0].gb){
541
s[0].gb = pgb+prof1[29];
564
fprof2 += len_b * stride;
569
s[j].a = -FLOATINFTY;
570
s[j].ga = -FLOATINFTY;
572
s[len_b].gb = pa+prof1[29];//+prof1[29];
573
if(pgb+prof1[29] > s[len_b].gb){
574
s[len_b].gb = pgb+prof1[29];
588
if((pga+=prof2[91]) > pa){
593
if((pgb+=prof1[91]) > pa){
599
for (f = freq[0];--f;){
600
pa += prof1[freq[f]]*prof2[freq[f]];
605
for (f = 0; f < fdim;f++){
606
pa += fprof1[f] * fprof2[f+fdim];
607
// fprintf(stderr,"%d %d: %d\n",i,j,fprof1[pga] * fprof2[pga+fdim]);
613
s[j].ga = s[j+1].a+prof2[27]+prof2[29];
614
if (s[j+1].ga+prof2[29] > s[j].ga){
615
s[j].ga = s[j+1].ga+prof2[29];
619
s[j].gb = -FLOATINFTY;
632
if((pga+=prof2[91]) > pa){
636
if((pgb+=prof1[91]) > pa){
641
for (f = freq[0];--f;){
642
pa += prof1[freq[f]]*prof2[freq[f]];
646
for (f = 0; f < fdim;f++){
647
pa += fprof1[f] * fprof2[f+fdim];
648
// fprintf(stderr,"%d %d: %d\n",i,j,fprof1[pga] * fprof2[pga+fdim]);
653
s[0].ga = s[1].a+prof2[27]+prof2[29];
654
if (s[1].ga+prof2[29] > s[0].ga){
655
s[0].ga = s[1].ga+prof2[29];
660
s[0].gb = ca+prof1[27]+prof1[29];
661
if(pgb +prof1[29]> s[0].gb){
662
s[0].gb = pgb+prof1[29];
678
//fprintf(stderr,"SCORE:%d\n",ca);
684
while(trace[i][j] < 32){
685
// fprintf(stderr,"%d->%d %d:%d %d:%d\n",c,trace[i][j],i,j,len_a,len_b);
688
if (trace[i][j] & 2){
692
// fprintf(stderr,"GAP_CLOSE\n");
696
}else if (trace[i][j] & 4){
700
// fprintf(stderr,"GAP_CLOSE\n");
713
if(i!=0 && i!= len_a){
714
// / fprintf(stderr,"GAP_EXT\n");
725
if(i!=0 && i!= len_a){
726
// fprintf(stderr,"GAP_OPEN\n");
736
if(trace[i][j] & 16){
738
if(j !=0 && j != len_b){
739
// fprintf(stderr,"GAP_EXT\n");
750
if(j!=0 && j != len_b){
751
// fprintf(stderr,"GAP_OPEN\n");
770
int* dna_pp_dyn(int* path, struct dp_matrix *dp,const int* prof1,const int* prof2,const int len_a,const int len_b)
773
struct states* s = 0;
777
register int pga = 0;
778
register int pgb = 0;
788
trace[len_a][len_b] = 32;
793
s[len_b].ga = -INFTY;
794
s[len_b].gb = -INFTY;
796
tracep = trace[len_a];
803
s[j].ga = s[j+1].a+prof2[10];//+prof2[29];
804
if (s[j+1].ga+prof2[10] > s[j].ga){
805
s[j].ga = s[j+1].ga+prof2[10];
823
s[len_b].ga = -INFTY;
826
s[len_b].gb = pa+prof1[10];//+prof1[29];
827
if(pgb+prof1[10] > s[len_b].gb){
828
s[len_b].gb = pgb+prof1[10];
840
if((pga += prof2[30]) > pa){
844
if((pgb += prof1[30]) > pa){
850
for (pga = 8;pga--;){
851
pa += prof1[pga]*prof2[pga];
859
s[j].ga = s[j+1].a+prof2[8];
860
if (s[j+1].ga+prof2[9] > s[j].ga){
861
s[j].ga = s[j+1].ga+prof2[9];
867
s[j].gb = ca+prof1[8];
868
if(pgb+prof1[9] > s[j].gb){
869
s[j].gb = pgb+prof1[9];
882
if((pga+=prof2[30]) > pa){
886
if((pgb+=prof1[30]) > pa){
892
for (pga = 8;pga--;){
893
pa += prof1[pga]*prof2[pga];
902
s[0].gb = ca+prof1[8]+prof1[10];
903
if(pgb+prof1[10] > s[0].gb){
904
s[0].gb = pgb+prof1[10];
921
s[len_b].gb = pa+prof1[10];//+prof1[29];
922
if(pgb+prof1[10] > s[len_b].gb){
923
s[len_b].gb = pgb+prof1[10];
934
if((pga+=prof2[30]) > pa){
939
if((pgb+=prof1[30]) > pa){
946
for (pga = 8;pga--;){
947
pa += prof1[pga]*prof2[pga];
953
s[j].ga = s[j+1].a+prof2[2]+prof2[10];
954
if (s[j+1].ga+prof2[10] > s[j].ga){
955
s[j].ga = s[j+1].ga+prof2[10];
970
if((pga+=prof2[30]) > pa){
974
if((pgb+=prof1[30]) > pa){
979
for (pga = 8;pga--;){
980
pa += prof1[pga]*prof2[pga];
986
s[0].ga = s[1].a+prof2[8]+prof2[10];
987
if (s[1].ga+prof2[10] > s[0].ga){
988
s[0].ga = s[1].ga+prof2[10];
993
s[0].gb = ca+prof1[8]+prof1[10];
994
if(pgb +prof1[10]> s[0].gb){
995
s[0].gb = pgb+prof1[10];
1011
//fprintf(stderr,"SCORE:%d\n",ca);
1017
while(trace[i][j] < 32){
1018
// fprintf(stderr,"%d->%d %d:%d %d:%d\n",c,trace[i][j],i,j,len_a,len_b);
1021
if (trace[i][j] & 2){
1025
// fprintf(stderr,"GAP_CLOSE\n");
1029
}else if (trace[i][j] & 4){
1033
// fprintf(stderr,"GAP_CLOSE\n");
1044
if(trace[i][j] & 8){
1046
if(i!=0 && i!= len_a){
1047
// / fprintf(stderr,"GAP_EXT\n");
1058
if(i!=0 && i!= len_a){
1059
// fprintf(stderr,"GAP_OPEN\n");
1069
if(trace[i][j] & 16){
1071
if(j !=0 && j != len_b){
1072
// fprintf(stderr,"GAP_EXT\n");
1083
if(j!=0 && j != len_b){
1084
// fprintf(stderr,"GAP_OPEN\n");
1104
int* pp_dyn2(int* path, struct dp_matrix *dp,const int* prof1,const int* prof2,const int len_a,const int len_b)
1106
unsigned int freq[26];
1108
struct states* s = 0;
1111
register int pa = 0;
1112
register int pga = 0;
1113
register int pgb = 0;
1114
register int ca = 0;
1123
trace[len_a][len_b] = 32;
1125
prof1 += len_a << 6;
1128
s[len_b].ga = -INFTY;
1129
s[len_b].gb = -INFTY;
1130
//init of first row;
1131
tracep = trace[len_a];
1137
s[j].ga = s[j+1].a+prof2[29];//+prof2[29];
1138
if (s[j+1].ga+prof2[29] > s[j].ga){
1139
s[j].ga = s[j+1].ga+prof2[29];
1165
s[len_b].a = -INFTY;
1166
s[len_b].ga = -INFTY;
1168
s[len_b].gb = pa+prof1[29];
1169
if(pgb+prof1[29] > s[len_b].gb){
1170
s[len_b].gb = pgb+prof1[29];
1176
prof2 += len_b << 6;
1182
if((pga += prof2[91]) > pa){
1186
if((pgb += prof1[91]) > pa){
1192
for (pga = freq[0];--pga;){
1194
pa += prof1[pgb]*prof2[pgb];
1202
s[j].ga = s[j+1].a+prof2[27];
1203
if (s[j+1].ga+prof2[28] > s[j].ga){
1204
s[j].ga = s[j+1].ga+prof2[28];
1210
s[j].gb = ca+prof1[27];
1211
if(pgb+prof1[28] > s[j].gb){
1212
s[j].gb = pgb+prof1[28];
1225
if((pga+=prof2[91]) > pa){
1229
if((pgb+=prof1[91]) > pa){
1235
for (pga = freq[0];--pga;){
1237
pa += prof1[pgb]*prof2[pgb];
1246
s[0].gb = ca+prof1[27]+prof1[29];
1247
if(pgb+prof1[29] > s[0].gb){
1248
s[0].gb = pgb+prof1[29];
1267
prof2 += len_b << 6;
1274
s[len_b].gb = pa+prof1[29];
1275
if(pgb+prof1[29] > s[len_b].gb){
1276
s[len_b].gb = pgb+prof1[29];
1287
if((pga+=prof2[91]) > pa){
1292
if((pgb+=prof1[91]) > pa){
1299
for (pga = freq[0];--pga;){
1301
pa += prof1[pgb]*prof2[pgb];
1307
s[j].ga = s[j+1].a+prof2[27]+prof2[29];
1308
if (s[j+1].ga+prof2[29] > s[j].ga){
1309
s[j].ga = s[j+1].ga+prof2[29];
1324
if((pga+=prof2[91]) > pa){
1328
if((pgb+=prof1[91]) > pa){
1333
for (pga = freq[0];--pga;){
1335
pa += prof1[pgb]*prof2[pgb];
1341
s[0].ga = s[1].a+prof2[27]+prof2[29];
1342
if (s[1].ga+prof2[29] > s[0].ga){
1343
s[0].ga = s[1].ga+prof2[29];
1348
s[0].gb = ca+prof1[27]+prof1[29];
1349
if(pgb +prof1[29]> s[0].gb){
1350
s[0].gb = pgb+prof1[29];
1373
while(trace[i][j] < 32){
1374
if(i ==0 || j == 0){
1377
if(i ==len_a || j == len_b){
1383
if (trace[i][j] & 2){
1385
}else if (trace[i][j] & 4){
1393
if(trace[i][j] & 8){
1396
path[c-(gb-1)] |= gb << 16;
1405
if(trace[i][j] & 16){
1408
path[c-(ga-1)] |= ga << 16;
1420
path[c-(gb-1)] |= (gb-1) << 16;
1423
path[c-(ga-1)] |= (ga-1) << 16;
1431
int* ps_dyn2(int* path, struct dp_matrix *dp,const int* prof1,const int* seq2,const int len_a,const int len_b,int sip)
1434
struct states* s = 0;
1437
register int pa = 0;
1438
register int pga = 0;
1439
register int pgb = 0;
1440
register int ca = 0;
1445
const int open = gpo * sip;
1446
const int ext = gpe *sip;
1454
trace[len_a][len_b] = 32;
1456
prof1 += len_a << 6;
1459
s[len_b].ga = -INFTY;
1460
s[len_b].gb = -INFTY;
1461
tracep = trace[len_a];
1467
s[j].ga = s[j+1].a-tgpe;
1468
if (s[j+1].ga-tgpe > s[j].ga){
1469
s[j].ga = s[j+1].ga-tgpe;
1489
s[len_b].a = -INFTY;
1490
s[len_b].ga = -INFTY;
1492
s[len_b].gb = pa+prof1[29];
1493
if(pgb+prof1[29] > s[len_b].gb){
1494
s[len_b].gb = pgb+prof1[29];
1509
if((pga -= open) > pa){
1513
if((pgb += prof1[91]) > pa){
1518
pa += prof1[32 + seq2[j]];
1524
s[j].ga = s[j+1].a-open;
1525
if (s[j+1].ga-ext > s[j].ga){
1526
s[j].ga = s[j+1].ga-ext;
1532
s[j].gb = ca+prof1[27];
1533
if(pgb+prof1[28] > s[j].gb){
1534
s[j].gb = pgb+prof1[28];
1545
if((pga-=open) > pa){
1549
if((pgb+=prof1[91]) > pa){
1553
pa += prof1[32+seq2[0]];
1559
s[0].gb = ca+prof1[27]+prof1[29];
1560
if(pgb+prof1[29] > s[0].gb){
1561
s[0].gb = pgb+prof1[29];
1579
s[len_b].gb = pa+prof1[29];
1580
if(pgb+prof1[29] > s[len_b].gb){
1581
s[len_b].gb = pgb+prof1[29];
1591
if((pga-=open) > pa){
1596
if((pgb+=prof1[91]) > pa){
1600
pa += prof1[32+seq2[j]];
1603
s[j].ga = s[j+1].a-(open+tgpe);
1604
if (s[j+1].ga-tgpe > s[j].ga){
1605
s[j].ga = s[j+1].ga-tgpe;
1620
if((pga-=open) > pa){
1624
if((pgb+=prof1[91]) > pa){
1628
pa += prof1[32+seq2[0]];
1631
s[0].ga = s[1].a-(open+tgpe);
1632
if (s[1].ga-tgpe > s[0].ga){
1633
s[0].ga = s[1].ga-tgpe;
1638
s[0].gb = ca+prof1[27]+prof1[29];
1639
if(pgb+prof1[29] > s[0].gb){
1640
s[0].gb = pgb+prof1[29];
1663
while(trace[i][j] < 32){
1664
if(i ==0 || j == 0){
1667
if(i ==len_a || j == len_b){
1673
if (trace[i][j] & 2){
1675
}else if (trace[i][j] & 4){
1683
if(trace[i][j] & 8){
1686
path[c-(gb-1)] |= gb << 16;
1695
if(trace[i][j] & 16){
1698
path[c-(ga-1)] |= ga << 16;
1710
path[c-(gb-1)] |= (gb-1) << 16;
1713
path[c-(ga-1)] |= (ga-1) << 16;
1721
int* ss_dyn2(int**subm,int* path, struct dp_matrix *dp,const int* seq1,const int* seq2,const int len_a,const int len_b)
1723
struct states* s = 0;
1727
register int pa = 0;
1728
register int pga = 0;
1729
register int pgb = 0;
1730
register int ca = 0;
1739
trace[len_a][len_b] = 32;
1742
s[len_b].ga = -INFTY;
1743
s[len_b].gb = -INFTY;
1746
tracep = trace[len_a];
1753
s[j].ga = s[j+1].a-tgpe;
1754
if (s[j+1].ga-tgpe > s[j].ga){
1755
s[j].ga = s[j+1].ga-tgpe;
1774
s[len_b].a = -INFTY;
1775
s[len_b].ga = -INFTY;
1777
s[len_b].gb = pa-tgpe;
1778
if(pgb-tgpe > s[len_b].gb){
1779
s[len_b].gb = pgb-tgpe;
1785
subp = subm[seq1[i]];
1790
if((pga -= gpo) > pa){
1794
if((pgb -= gpo) > pa){
1799
pa += subp[seq2[j]];
1805
s[j].ga = s[j+1].a-gpo;
1806
if (s[j+1].ga-gpe > s[j].ga){
1807
s[j].ga = s[j+1].ga-gpe;
1814
if(pgb-gpe > s[j].gb){
1826
if((pga-=gpo) > pa){
1830
if((pgb-=gpo) > pa){
1835
pa += subp[seq2[0]];
1842
s[0].gb = ca-(gpo+tgpe);
1843
if(pgb-tgpe > s[0].gb){
1850
subp = subm[seq1[0]];
1860
if(pgb-tgpe > s[j].gb){
1870
if((pga-=gpo) > pa){
1875
if((pgb-=gpo) > pa){
1880
pa += subp[seq2[j]];
1885
s[j].ga = s[j+1].a-(gpo+tgpe);
1886
if (s[j+1].ga-tgpe > s[j].ga){
1887
s[j].ga = s[j+1].ga-tgpe;
1900
if((pga-=gpo) > pa){
1904
if((pgb-=gpo) > pa){
1909
pa += subp[seq2[0]];
1914
s[0].ga = s[1].a-(gpo+tgpe);
1915
if (s[1].ga-tgpe > s[0].ga){
1916
s[0].ga = s[1].ga-tgpe;
1921
s[0].gb = ca-(gpo+tgpe);
1922
if(pgb-tgpe > s[0].gb){
1947
while(trace[i][j] < 32){
1948
if(i ==0 || j == 0){
1951
if(i ==len_a || j == len_b){
1957
if (trace[i][j] & 2){
1959
}else if (trace[i][j] & 4){
1967
if(trace[i][j] & 8){
1970
path[c-(gb-1)] |= gb << 16;
1979
if(trace[i][j] & 16){
1982
path[c-(ga-1)] |= ga << 16;
1994
path[c-(gb-1)] |= (gb-1) << 16;
1997
path[c-(ga-1)] |= (ga-1) << 16;
2007
int* aapp_dyn(int* path, struct dp_matrix *dp,const int* prof1,const int* prof2,const int len_a,const int len_b,const int mmbonus)
2009
unsigned int freq[26];
2011
struct states* s = 0;
2014
register int pa = 0;
2015
register int pga = 0;
2016
register int pgb = 0;
2017
register int ca = 0;
2026
trace[len_a][len_b] = 32;
2028
prof1 += len_a << 6;
2031
s[len_b].ga = -INFTY;
2032
s[len_b].gb = -INFTY;
2033
//init of first row;
2034
tracep = trace[len_a];
2040
s[j].ga = s[j+1].a+prof2[29];
2041
if (s[j+1].ga+prof2[29] > s[j].ga){
2042
s[j].ga = s[j+1].ga+prof2[29];
2065
pa = s[len_b].a + mmbonus;
2068
s[len_b].a = -INFTY;
2069
s[len_b].ga = -INFTY;
2071
s[len_b].gb = pa+prof1[29];
2072
if(pgb+prof1[29] > s[len_b].gb){
2073
s[len_b].gb = pgb+prof1[29];
2079
prof2 += len_b << 6;
2085
if((pga += prof2[91]) > pa){
2089
if((pgb += prof1[91]) > pa){
2095
for (pga = freq[0];--pga;){
2097
pa += prof1[pgb]*prof2[pgb];
2105
s[j].ga = s[j+1].a+prof2[27];
2106
if (s[j+1].ga+prof2[28] > s[j].ga){
2107
s[j].ga = s[j+1].ga+prof2[28];
2113
s[j].gb = ca+prof1[27];
2114
if(pgb+prof1[28] > s[j].gb){
2115
s[j].gb = pgb+prof1[28];
2128
if((pga+=prof2[91]) > pa){
2132
if((pgb+=prof1[91]) > pa){
2138
for (pga = freq[0];--pga;){
2140
pa += prof1[pgb]*prof2[pgb];
2149
s[0].gb = ca+prof1[27]+prof1[29];
2150
if(pgb+prof1[29] > s[0].gb){
2151
s[0].gb = pgb+prof1[29];
2170
prof2 += len_b << 6;
2171
pa = s[j].a+ mmbonus;
2177
s[len_b].gb = pa+prof1[29];
2178
if(pgb+prof1[29] > s[len_b].gb){
2179
s[len_b].gb = pgb+prof1[29];
2190
if((pga+=prof2[91]) > pa){
2195
if((pgb+=prof1[91]) > pa){
2201
for (pga = freq[0];--pga;){
2203
pa += prof1[pgb]*prof2[pgb];
2209
s[j].ga = s[j+1].a+prof2[27]+prof2[29];
2210
if (s[j+1].ga+prof2[29] > s[j].ga){
2211
s[j].ga = s[j+1].ga+prof2[29];
2226
if((pga+=prof2[91]) > pa){
2230
if((pgb+=prof1[91]) > pa){
2236
for (pga = freq[0];--pga;){
2238
pa += prof1[pgb]*prof2[pgb];
2244
s[0].ga = s[1].a+prof2[27]+prof2[29];
2245
if (s[1].ga+prof2[29] > s[0].ga){
2246
s[0].ga = s[1].ga+prof2[29];
2251
s[0].gb = ca+prof1[27]+prof1[29];
2252
if(pgb +prof1[29]> s[0].gb){
2253
s[0].gb = pgb+prof1[29];
2269
//fprintf(stderr,"SCORE:%d\n",ca);
2275
while(trace[i][j] < 32){
2276
// fprintf(stderr,"%d->%d %d:%d %d:%d\n",c,trace[i][j],i,j,len_a,len_b);
2279
if (trace[i][j] & 2){
2283
// fprintf(stderr,"GAP_CLOSE\n");
2287
}else if (trace[i][j] & 4){
2291
// fprintf(stderr,"GAP_CLOSE\n");
2302
if(trace[i][j] & 8){
2304
if(i!=0 && i!= len_a){
2305
// / fprintf(stderr,"GAP_EXT\n");
2316
if(i!=0 && i!= len_a){
2317
// fprintf(stderr,"GAP_OPEN\n");
2327
if(trace[i][j] & 16){
2329
if(j !=0 && j != len_b){
2330
// fprintf(stderr,"GAP_EXT\n");
2341
if(j!=0 && j != len_b){
2342
// fprintf(stderr,"GAP_OPEN\n");
2366
int* pp_dyn(int* path, struct dp_matrix *dp,const float* prof1,const float* prof2,const int len_a,const int len_b)
2368
unsigned int freq[26];
2370
struct states* s = 0;
2373
register float pa = 0;
2374
register float pga = 0;
2375
register float pgb = 0;
2376
register float ca = 0;
2386
trace[len_a][len_b] = 32;
2388
prof1 += len_a << 6;
2391
s[len_b].ga = -FLOATINFTY;
2392
s[len_b].gb = -FLOATINFTY;
2393
//init of first row;
2394
tracep = trace[len_a];
2398
s[j].a = -FLOATINFTY;
2400
s[j].ga = s[j+1].a+prof2[29];
2401
if (s[j+1].ga+prof2[29] > s[j].ga){
2402
s[j].ga = s[j+1].ga+prof2[29];
2408
s[0].a = -FLOATINFTY;
2409
s[0].ga = -FLOATINFTY;
2410
s[0].gb = -FLOATINFTY;
2428
s[len_b].a = -FLOATINFTY;
2429
s[len_b].ga = -FLOATINFTY;
2431
s[len_b].gb = pa+prof1[29];
2432
if(pgb+prof1[29] > s[len_b].gb){
2433
s[len_b].gb = pgb+prof1[29];
2439
prof2 += len_b << 6;
2445
if((pga += prof2[91]) > pa){
2449
if((pgb += prof1[91]) > pa){
2455
for (f = freq[0];--f;){
2456
pa += prof1[freq[f]]*prof2[freq[f]];
2464
s[j].ga = s[j+1].a+prof2[27];
2465
if (s[j+1].ga+prof2[28] > s[j].ga){
2466
s[j].ga = s[j+1].ga+prof2[28];
2472
s[j].gb = ca+prof1[27];
2473
if(pgb+prof1[28] > s[j].gb){
2474
s[j].gb = pgb+prof1[28];
2487
if((pga+=prof2[91]) > pa){
2491
if((pgb+=prof1[91]) > pa){
2497
for (f = freq[0];--f;){
2498
pa += prof1[freq[f]]*prof2[freq[f]];
2504
s[0].ga = -FLOATINFTY;
2507
s[0].gb = ca+prof1[27]+prof1[29];
2508
if(pgb+prof1[29] > s[0].gb){
2509
s[0].gb = pgb+prof1[29];
2528
prof2 += len_b << 6;
2532
s[j].a = -FLOATINFTY;
2533
s[j].ga = -FLOATINFTY;
2535
s[len_b].gb = pa+prof1[29];
2536
if(pgb+prof1[29] > s[len_b].gb){
2537
s[len_b].gb = pgb+prof1[29];
2548
if((pga+=prof2[91]) > pa){
2553
if((pgb+=prof1[91]) > pa){
2560
for (f = freq[0];--f;){
2561
pa += prof1[freq[f]]*prof2[freq[f]];
2567
s[j].ga = s[j+1].a+prof2[27]+prof2[29];
2568
if (s[j+1].ga+prof2[29] > s[j].ga){
2569
s[j].ga = s[j+1].ga+prof2[29];
2573
s[j].gb = -FLOATINFTY;
2584
if((pga+=prof2[91]) > pa){
2588
if((pgb+=prof1[91]) > pa){
2593
for (f = freq[0];--f;){
2594
pa += prof1[freq[f]]*prof2[freq[f]];
2600
s[0].ga = s[1].a+prof2[27]+prof2[29];
2601
if (s[1].ga+prof2[29] > s[0].ga){
2602
s[0].ga = s[1].ga+prof2[29];
2607
s[0].gb = ca+prof1[27]+prof1[29];
2608
if(pgb +prof1[29]> s[0].gb){
2609
s[0].gb = pgb+prof1[29];
2625
//fprintf(stderr,"SCORE:%d\n",ca);
2631
while(trace[i][j] < 32){
2632
// fprintf(stderr,"%d->%d %d:%d %d:%d\n",c,trace[i][j],i,j,len_a,len_b);
2635
if (trace[i][j] & 2){
2639
// fprintf(stderr,"GAP_CLOSE\n");
2643
}else if (trace[i][j] & 4){
2647
// fprintf(stderr,"GAP_CLOSE\n");
2658
if(trace[i][j] & 8){
2660
if(i!=0 && i!= len_a){
2661
// / fprintf(stderr,"GAP_EXT\n");
2672
if(i!=0 && i!= len_a){
2673
// fprintf(stderr,"GAP_OPEN\n");
2683
if(trace[i][j] & 16){
2685
if(j !=0 && j != len_b){
2686
// fprintf(stderr,"GAP_EXT\n");
2697
if(j!=0 && j != len_b){
2698
// fprintf(stderr,"GAP_OPEN\n");
2718
int* ps_dyn(int* path, struct dp_matrix *dp,const float* prof1,const int* seq2,const int len_a,const int len_b,int sip)
2720
struct states* s = 0;
2723
register float pa = 0;
2724
register float pga = 0;
2725
register float pgb = 0;
2726
register float ca = 0;
2732
const float open = gpo * sip;
2733
const float ext = gpe *sip;
2739
trace[len_a][len_b] = 32;
2741
prof1 += len_a << 6;
2744
s[len_b].ga = -FLOATINFTY;
2745
s[len_b].gb = -FLOATINFTY;
2746
//init of first row;
2747
tracep = trace[len_a];
2752
s[j].a = -FLOATINFTY;
2755
s[j].ga = s[j+1].a-tgpe;//-topen;
2756
if (s[j+1].ga-tgpe > s[j].ga){
2757
s[j].ga = s[j+1].ga-tgpe;
2760
s[j].gb = -FLOATINFTY;
2764
s[0].a = -FLOATINFTY;
2765
s[0].ga = -FLOATINFTY;
2766
s[0].gb = -FLOATINFTY;
2775
s[len_b].a = -FLOATINFTY;
2776
s[len_b].ga = -FLOATINFTY;
2778
s[len_b].gb = pa+prof1[29];//+prof1[29];
2779
if(pgb+prof1[29] > s[len_b].gb){
2780
s[len_b].gb = pgb+prof1[29];
2792
if((pga -= open) > pa){
2796
if((pgb += prof1[91]) > pa){
2801
pa += prof1[32 + seq2[j]];
2807
s[j].ga = s[j+1].a-open;
2808
if (s[j+1].ga-ext > s[j].ga){
2809
s[j].ga = s[j+1].ga-ext;
2815
s[j].gb = ca+prof1[27];
2816
if(pgb+prof1[28] > s[j].gb){
2817
s[j].gb = pgb+prof1[28];
2829
if((pga-=open) > pa){
2833
if((pgb+=prof1[91]) > pa){
2837
pa += prof1[32+seq2[0]];
2840
s[0].ga = -FLOATINFTY;
2843
s[0].gb = ca+prof1[27]+prof1[29];
2844
if(pgb+prof1[29] > s[0].gb){
2845
s[0].gb = pgb+prof1[29];
2860
s[j].a = -FLOATINFTY;
2861
s[j].ga = -FLOATINFTY;
2863
s[len_b].gb = pa+prof1[29];//+prof1[29];
2864
if(pgb+prof1[29] > s[len_b].gb){
2865
s[len_b].gb = pgb+prof1[29];
2875
if((pga-=open) > pa){
2880
if((pgb+=prof1[91]) > pa){
2884
pa += prof1[32+seq2[j]];
2887
s[j].ga = s[j+1].a-(open+tgpe);
2888
if (s[j+1].ga-tgpe > s[j].ga){
2889
s[j].ga = s[j+1].ga-tgpe;
2904
if((pga-=open) > pa){
2908
if((pgb+=prof1[91]) > pa){
2912
pa += prof1[32+seq2[0]];
2915
s[0].ga = s[1].a-(open+tgpe);
2916
if (s[1].ga-tgpe > s[0].ga){
2917
s[0].ga = s[1].ga-tgpe;
2922
s[0].gb = ca+prof1[27]+prof1[29];
2923
if(pgb+prof1[29] > s[0].gb){
2924
s[0].gb = pgb+prof1[29];
2941
//fprintf(stderr,"SCORE:%d\n",ca);
2947
while(trace[i][j] < 32){
2948
// fprintf(stderr,"%d->%d %d:%d %d:%d\n",c,trace[i][j],i,j,len_a,len_b);
2951
if (trace[i][j] & 2){
2955
// fprintf(stderr,"GAP_CLOSE\n");
2959
}else if (trace[i][j] & 4){
2963
// fprintf(stderr,"GAP_CLOSE\n");
2974
if(trace[i][j] & 8){
2976
if(i!=0 && i!= len_a){
2977
// / fprintf(stderr,"GAP_EXT\n");
2988
if(i!=0 && i!= len_a){
2989
// fprintf(stderr,"GAP_OPEN\n");
2999
if(trace[i][j] & 16){
3001
if(j !=0 && j != len_b){
3002
// fprintf(stderr,"GAP_EXT\n");
3013
if(j!=0 && j != len_b){
3014
// fprintf(stderr,"GAP_OPEN\n");
3033
int* ss_dyn(float**subm,int* path, struct dp_matrix *dp,const int* seq1,const int* seq2,const int len_a,const int len_b)
3035
struct states* s = 0;
3036
const float *subp = 0;
3039
register float pa = 0;
3040
register float pga = 0;
3041
register float pgb = 0;
3042
register float ca = 0;
3052
trace[len_a][len_b] = 32;
3055
s[len_b].ga = -FLOATINFTY;
3056
s[len_b].gb = -FLOATINFTY;
3058
//init of first row;
3059
tracep = trace[len_a];
3064
s[j].a = -FLOATINFTY;
3066
s[j].ga = s[j+1].a-tgpe;//-gpo;
3067
if (s[j+1].ga-tgpe > s[j].ga){
3068
s[j].ga = s[j+1].ga-tgpe;
3073
s[j].gb = -FLOATINFTY;
3077
s[0].a = -FLOATINFTY;
3078
s[0].ga = -FLOATINFTY;
3079
s[0].gb = -FLOATINFTY;
3089
s[len_b].a = -FLOATINFTY;
3090
s[len_b].ga = -FLOATINFTY;
3093
s[len_b].gb = pa-tgpe;//-gpo;
3094
if(pgb-tgpe > s[len_b].gb){
3095
s[len_b].gb = pgb-tgpe;
3101
subp = subm[seq1[i]];
3106
if((pga -= gpo) > pa){
3110
if((pgb -= gpo) > pa){
3115
pa += subp[seq2[j]];
3121
s[j].ga = s[j+1].a-gpo;
3122
if (s[j+1].ga-gpe > s[j].ga){
3123
s[j].ga = s[j+1].ga-gpe;
3130
if(pgb-gpe > s[j].gb){
3143
if((pga-=gpo) > pa){
3147
if((pgb-=gpo) > pa){
3152
pa += subp[seq2[0]];
3156
s[0].ga = -FLOATINFTY;
3159
s[0].gb = ca-(gpo+tgpe);
3160
if(pgb-tgpe > s[0].gb){
3167
subp = subm[seq1[0]];
3173
s[j].a = -FLOATINFTY;
3174
s[j].ga = -FLOATINFTY;
3176
s[j].gb = pa-tgpe;//-gpo;
3177
if(pgb-tgpe > s[j].gb){
3188
if((pga-=gpo) > pa){
3193
if((pgb-=gpo) > pa){
3198
pa += subp[seq2[j]];
3203
s[j].ga = s[j+1].a-(gpo+tgpe);
3204
if (s[j+1].ga-tgpe > s[j].ga){
3205
s[j].ga = s[j+1].ga-tgpe;
3209
s[j].gb = -FLOATINFTY;
3218
if((pga-=gpo) > pa){
3222
if((pgb-=gpo) > pa){
3227
pa += subp[seq2[0]];
3232
s[0].ga = s[1].a-(gpo+tgpe);
3233
if (s[1].ga-tgpe > s[0].ga){
3234
s[0].ga = s[1].ga-tgpe;
3239
s[0].gb = ca-(gpo+tgpe);
3240
if(pgb-tgpe > s[0].gb){
3263
while(trace[i][j] < 32){
3264
// fprintf(stderr,"%d->%d %d:%d %d:%d\n",c,trace[i][j],i,j,len_a,len_b);
3267
if (trace[i][j] & 2){
3271
// fprintf(stderr,"GAP_CLOSE\n");
3275
}else if (trace[i][j] & 4){
3279
// fprintf(stderr,"GAP_CLOSE\n");
3290
if(trace[i][j] & 8){
3292
if(i!=0 && i!= len_a){
3293
// / fprintf(stderr,"GAP_EXT\n");
3304
if(i!=0 && i!= len_a){
3305
// fprintf(stderr,"GAP_OPEN\n");
3315
if(trace[i][j] & 16){
3317
if(j !=0 && j != len_b){
3318
// fprintf(stderr,"GAP_EXT\n");
3329
if(j!=0 && j != len_b){
3330
// fprintf(stderr,"GAP_OPEN\n");