15 static int shishagonyuu( double in )
18 if ( in > 0.0 ) out = ( (int)( in + 0.5 ) );
19 else if( in == 0.0 ) out = ( 0 );
20 else if( in < 0.0 ) out = ( (int)( in - 0.5 ) );
25 static void nscore( int *amino_n, int **n_dis )
30 // reporterr( "i=%d (%c), n_dis[%d][%d] = %d\n", i, amino[i], i, amino_n['n'], n_dis[i][amino_n['n']] );
31 n_dis[i][amino_n['n']] = shishagonyuu( (double)0.25 * n_dis[i][i] );
32 // reporterr( "-> i=%d, n_dis[%d][%d] = %d\n", i, i, amino_n['n'], n_dis[i][amino_n['n']] );
33 n_dis[amino_n['n']][i] = n_dis[i][amino_n['n']];
35 // n_dis[amino_n['n']][amino_n['n']] = shishagonyuu( (double)0.25 * 0.25 * ( n_dis[0][0] + n_dis[1][1] + n_dis[2][2] + n_dis[3][3] ) );
36 n_dis[amino_n['n']][amino_n['n']] = shishagonyuu( (double)0.25 * ( n_dis[0][0] + n_dis[1][1] + n_dis[2][2] + n_dis[3][3] ) ); // 2017/Jan/2
38 #if 0 // Ato de kakunin
41 n_dis[i][amino_n['-']] = shishagonyuu( (double)0.25 * n_dis[i][i] );
42 n_dis[amino_n['-']][i] = n_dis[i][amino_n['-']];
44 // n_dis[amino_n['-']][amino_n['-']] = shishagonyuu( (double)0.25 * 0.25 * ( n_dis[0][0] + n_dis[1][1] + n_dis[2][2] + n_dis[3][3] ) ); // DAME!
49 static void ambiguousscore( int *amino_n, int **n_dis )
54 n_dis[i][amino_n['r']] = shishagonyuu( (double)1/2 * ( n_dis[amino_n['a']][i] + n_dis[amino_n['g']][i] ) );
55 n_dis[i][amino_n['y']] = shishagonyuu( (double)1/2 * ( n_dis[amino_n['c']][i] + n_dis[amino_n['t']][i] ) );
56 n_dis[i][amino_n['k']] = shishagonyuu( (double)1/2 * ( n_dis[amino_n['g']][i] + n_dis[amino_n['t']][i] ) );
57 n_dis[i][amino_n['m']] = shishagonyuu( (double)1/2 * ( n_dis[amino_n['a']][i] + n_dis[amino_n['c']][i] ) );
58 n_dis[i][amino_n['s']] = shishagonyuu( (double)1/2 * ( n_dis[amino_n['g']][i] + n_dis[amino_n['c']][i] ) );
59 n_dis[i][amino_n['w']] = shishagonyuu( (double)1/2 * ( n_dis[amino_n['a']][i] + n_dis[amino_n['t']][i] ) );
60 n_dis[i][amino_n['b']] = shishagonyuu( (double)1/3 * ( n_dis[amino_n['c']][i] + n_dis[amino_n['g']][i] + n_dis[amino_n['t']][i] ) );
61 n_dis[i][amino_n['d']] = shishagonyuu( (double)1/3 * ( n_dis[amino_n['a']][i] + n_dis[amino_n['g']][i] + n_dis[amino_n['t']][i] ) );
62 n_dis[i][amino_n['h']] = shishagonyuu( (double)1/3 * ( n_dis[amino_n['a']][i] + n_dis[amino_n['c']][i] + n_dis[amino_n['t']][i] ) );
63 n_dis[i][amino_n['v']] = shishagonyuu( (double)1/3 * ( n_dis[amino_n['a']][i] + n_dis[amino_n['c']][i] + n_dis[amino_n['g']][i] ) );
65 n_dis[amino_n['r']][i] = n_dis[i][amino_n['r']];
66 n_dis[amino_n['y']][i] = n_dis[i][amino_n['y']];
67 n_dis[amino_n['k']][i] = n_dis[i][amino_n['k']];
68 n_dis[amino_n['m']][i] = n_dis[i][amino_n['m']];
69 n_dis[amino_n['s']][i] = n_dis[i][amino_n['s']];
70 n_dis[amino_n['w']][i] = n_dis[i][amino_n['w']];
71 n_dis[amino_n['b']][i] = n_dis[i][amino_n['b']];
72 n_dis[amino_n['d']][i] = n_dis[i][amino_n['d']];
73 n_dis[amino_n['h']][i] = n_dis[i][amino_n['h']];
74 n_dis[amino_n['v']][i] = n_dis[i][amino_n['v']];
77 i = amino_n['r']; n_dis[i][i] = shishagonyuu( (double)1/2 * ( n_dis[amino_n['a']][amino_n['a']] + n_dis[amino_n['g']][amino_n['g']] ) );
78 i = amino_n['y']; n_dis[i][i] = shishagonyuu( (double)1/2 * ( n_dis[amino_n['c']][amino_n['c']] + n_dis[amino_n['t']][amino_n['t']] ) );
79 i = amino_n['k']; n_dis[i][i] = shishagonyuu( (double)1/2 * ( n_dis[amino_n['g']][amino_n['g']] + n_dis[amino_n['t']][amino_n['t']] ) );
80 i = amino_n['m']; n_dis[i][i] = shishagonyuu( (double)1/2 * ( n_dis[amino_n['a']][amino_n['a']] + n_dis[amino_n['c']][amino_n['c']] ) );
81 i = amino_n['s']; n_dis[i][i] = shishagonyuu( (double)1/2 * ( n_dis[amino_n['g']][amino_n['g']] + n_dis[amino_n['c']][amino_n['c']] ) );
82 i = amino_n['w']; n_dis[i][i] = shishagonyuu( (double)1/2 * ( n_dis[amino_n['a']][amino_n['a']] + n_dis[amino_n['t']][amino_n['t']] ) );
83 i = amino_n['b']; n_dis[i][i] = shishagonyuu( (double)1/3 * ( n_dis[amino_n['c']][amino_n['c']] + n_dis[amino_n['g']][amino_n['g']] + n_dis[amino_n['t']][amino_n['t']] ) );
84 i = amino_n['d']; n_dis[i][i] = shishagonyuu( (double)1/3 * ( n_dis[amino_n['a']][amino_n['a']] + n_dis[amino_n['g']][amino_n['g']] + n_dis[amino_n['t']][amino_n['t']] ) );
85 i = amino_n['h']; n_dis[i][i] = shishagonyuu( (double)1/3 * ( n_dis[amino_n['a']][amino_n['a']] + n_dis[amino_n['c']][amino_n['c']] + n_dis[amino_n['t']][amino_n['t']] ) );
86 i = amino_n['v']; n_dis[i][i] = shishagonyuu( (double)1/3 * ( n_dis[amino_n['a']][amino_n['a']] + n_dis[amino_n['c']][amino_n['c']] + n_dis[amino_n['g']][amino_n['g']] ) );
90 static void calcfreq_nuc( int nseq, char **seq, double *datafreq )
98 for( i=0; i<nseq; i++ )
100 l = strlen( seq[i] );
103 aan = amino_n[(int)seq[i][j]];
104 if( aan == 4 ) aan = 3;
105 if( aan >= 0 && aan < 4 )
107 datafreq[aan] += 1.0;
112 total = 0.0; for( i=0; i<4; i++ ) total += datafreq[i];
113 for( i=0; i<4; i++ ) datafreq[i] /= (double)total;
114 for( i=0; i<4; i++ ) if( datafreq[i] < 0.0001 ) datafreq[i] = 0.0001;
117 total = 0.0; for( i=0; i<4; i++ ) total += datafreq[i];
118 // reporterr( "total = %f\n", total );
119 for( i=0; i<4; i++ ) datafreq[i] /= (double)total;
122 reporterr( "\ndatafreq = " );
124 reporterr( "%10.5f ", datafreq[i] );
130 static void calcfreq( int nseq, char **seq, double *datafreq )
135 for( i=0; i<nscoredalphabets; i++ )
138 for( i=0; i<nseq; i++ )
140 l = strlen( seq[i] );
143 aan = amino_n[(int)seq[i][j]];
144 if( aan >= 0 && aan < nscoredalphabets && seq[i][j] != '-' )
146 datafreq[aan] += 1.0;
151 total = 0.0; for( i=0; i<nscoredalphabets; i++ ) total += datafreq[i];
152 for( i=0; i<nscoredalphabets; i++ ) datafreq[i] /= (double)total;
153 for( i=0; i<nscoredalphabets; i++ ) if( datafreq[i] < 0.0001 ) datafreq[i] = 0.0001;
155 // reporterr( "datafreq = \n" );
156 // for( i=0; i<nscoredalphabets; i++ )
157 // reporterr( "%f\n", datafreq[i] );
159 total = 0.0; for( i=0; i<nscoredalphabets; i++ ) total += datafreq[i];
160 // reporterr( "total = %f\n", total );
161 for( i=0; i<nscoredalphabets; i++ ) datafreq[i] /= (double)total;
164 static void calcfreq_extended( int nseq, char **seq, double *datafreq )
169 for( i=0; i<nscoredalphabets; i++ )
172 for( i=0; i<nseq; i++ )
174 l = strlen( seq[i] );
177 aan = amino_n[(unsigned char)seq[i][j]];
178 if( aan >= 0 && aan < nscoredalphabets && seq[i][j] != '-' )
180 datafreq[aan] += 1.0;
185 total = 0.0; for( i=0; i<nscoredalphabets; i++ ) total += datafreq[i];
186 for( i=0; i<nscoredalphabets; i++ ) datafreq[i] /= (double)total;
187 // for( i=0; i<nscoredalphabets; i++ ) if( datafreq[i] < 0.0001 ) datafreq[i] = 0.0001;
190 reporterr( "datafreq = \n" );
191 for( i=0; i<nscoredalphabets; i++ )
192 reporterr( "%d %c %f\n", i, amino[i], datafreq[i] );
195 total = 0.0; for( i=0; i<nscoredalphabets; i++ ) total += datafreq[i];
196 // reporterr( "total = %f\n", total );
197 for( i=0; i<nscoredalphabets; i++ ) datafreq[i] /= (double)total;
200 static void generatenuc1pam( double **pam1, int kimuraR, double *freq )
203 double R[4][4], mut[4], total, tmp;
205 R[0][0] = 0.0; R[0][1] = kimuraR; R[0][2] = 1.0; R[0][3] = 1.0;
206 R[1][0] = kimuraR; R[1][1] = 0.0; R[1][2] = 1.0; R[1][3] = 1.0;
207 R[2][0] = 1.0; R[2][1] = 1.0; R[2][2] = 0.0; R[2][3] = kimuraR;
208 R[3][0] = 1.0; R[3][1] = 1.0; R[3][2] = kimuraR; R[3][3] = 0.0;
215 for( j=0; j<4; j++ ) tmp += R[i][j] * freq[j];
217 total += tmp * freq[i];
219 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
221 if( i != j ) pam1[i][j] = 0.01 / total * R[i][j] * freq[j];
222 else pam1[i][j] = 1.0 - 0.01 / total * mut[i];
227 void constants( int nseq, char **seq )
231 char shiftmodel[100];
234 if( nblosum < 0 ) dorp = 'p';
236 if( penalty_shift_factor >= 10 ) trywarp = 0;
239 if( dorp == 'd' ) /* DNA */
243 double **pamx = AllocateDoubleMtx( 11,11 );
244 double **pam1 = AllocateDoubleMtx( 4, 4 );
245 double *freq = AllocateDoubleVec( 4 );
248 nscoredalphabets = 10;
251 n_dis = AllocateIntMtx( nalphabets, nalphabets );
252 n_disLN = AllocateDoubleMtx( nalphabets, nalphabets );
255 if( RNAppenalty == NOTSPECIFIED ) RNAppenalty = DEFAULTRNAGOP_N;
256 if( RNAppenalty_ex == NOTSPECIFIED ) RNAppenalty_ex = DEFAULTRNAGEP_N;
257 if( ppenalty == NOTSPECIFIED ) ppenalty = DEFAULTGOP_N;
258 if( ppenalty_dist == NOTSPECIFIED ) ppenalty_dist = ppenalty;
259 if( ppenalty_OP == NOTSPECIFIED ) ppenalty_OP = DEFAULTGOP_N;
260 if( ppenalty_ex == NOTSPECIFIED ) ppenalty_ex = DEFAULTGEP_N;
261 if( ppenalty_EX == NOTSPECIFIED ) ppenalty_EX = DEFAULTGEP_N;
262 if( poffset == NOTSPECIFIED ) poffset = DEFAULTOFS_N;
263 if( RNApthr == NOTSPECIFIED ) RNApthr = DEFAULTRNATHR_N;
264 if( pamN == NOTSPECIFIED ) pamN = DEFAULTPAMN;
265 if( kimuraR == NOTSPECIFIED ) kimuraR = 2;
267 RNApenalty = (int)( 3 * 600.0 / 1000.0 * RNAppenalty + 0.5 );
268 RNApenalty_ex = (int)( 3 * 600.0 / 1000.0 * RNAppenalty_ex + 0.5 );
269 // reporterr( "DEFAULTRNAGOP_N = %d\n", DEFAULTRNAGOP_N );
270 // reporterr( "RNAppenalty = %d\n", RNAppenalty );
271 // reporterr( "RNApenalty = %d\n", RNApenalty );
274 RNAthr = (int)( 3 * 600.0 / 1000.0 * RNApthr + 0.5 );
275 penalty = (int)( 3 * 600.0 / 1000.0 * ppenalty + 0.5);
276 penalty_dist = (int)( 3 * 600.0 / 1000.0 * ppenalty_dist + 0.5);
277 penalty_shift = (int)( penalty_shift_factor * penalty );
278 penalty_OP = (int)( 3 * 600.0 / 1000.0 * ppenalty_OP + 0.5);
279 penalty_ex = (int)( 3 * 600.0 / 1000.0 * ppenalty_ex + 0.5);
280 penalty_EX = (int)( 3 * 600.0 / 1000.0 * ppenalty_EX + 0.5);
281 offset = (int)( 1 * 600.0 / 1000.0 * poffset + 0.5);
282 offsetFFT = (int)( 1 * 600.0 / 1000.0 * (-0) + 0.5);
283 offsetLN = (int)( 1 * 600.0 / 1000.0 * 100 + 0.5);
284 penaltyLN = (int)( 3 * 600.0 / 1000.0 * -2000 + 0.5);
285 penalty_exLN = (int)( 3 * 600.0 / 1000.0 * -100 + 0.5);
287 if( trywarp ) sprintf( shiftmodel, "%4.2f (%4.2f)", -(double)penalty_shift/1800, -(double)penalty_shift/600 );
288 else sprintf( shiftmodel, "noshift" );
290 sprintf( modelname, "%s%d (%d), %4.2f (%4.2f), %4.2f (%4.2f), %s", rnakozo?"RNA":"DNA", pamN, kimuraR, -(double)ppenalty*0.001, -(double)ppenalty*0.003, -(double)poffset*0.001, -(double)poffset*0.003, shiftmodel );
292 for( i=0; i<26; i++ ) amino[i] = locaminon[i];
293 for( i=0; i<0x80; i++ ) amino_n[i] = -1;
294 for( i=0; i<26; i++ ) amino_n[(int)amino[i]] = i;
297 calcfreq_nuc( nseq, seq, freq );
298 reporterr( "a, freq[0] = %f\n", freq[0] );
299 reporterr( "g, freq[1] = %f\n", freq[1] );
300 reporterr( "c, freq[2] = %f\n", freq[2] );
301 reporterr( "t, freq[3] = %f\n", freq[3] );
312 if( kimuraR == 9999 )
314 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
315 pamx[i][j] = (double)locn_disn[i][j];
318 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
319 average += pamx[i][j];
323 reporterr( "average = %f\n", average );
325 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
326 pamx[i][j] -= average;
328 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
329 pamx[i][j] *= 600.0 / average;
331 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
332 pamx[i][j] -= offset;
339 double s = (double)kimuraR / ( 2 + kimuraR ) * 0.01;
340 double v = (double)1 / ( 2 + kimuraR ) * 0.01;
341 pam1[0][0] = f; pam1[0][1] = s; pam1[0][2] = v; pam1[0][3] = v;
342 pam1[1][0] = s; pam1[1][1] = f; pam1[1][2] = v; pam1[1][3] = v;
343 pam1[2][0] = v; pam1[2][1] = v; pam1[2][2] = f; pam1[2][3] = s;
344 pam1[3][0] = v; pam1[3][1] = v; pam1[3][2] = s; pam1[3][3] = f;
346 generatenuc1pam( pam1, kimuraR, freq );
349 reporterr( "generating a scoring matrix for nucleotide (dist=%d) ... ", pamN );
353 reporterr( " TPM \n" );
357 reporterr( "%+#6.10f", pam1[i][j] );
364 MtxuntDouble( pamx, 4 );
365 for( x=0; x < pamN; x++ ) MtxmltDouble( pamx, pam1, 4 );
369 reporterr( " TPM \n" );
373 reporterr( "%+#6.10f", pamx[i][j] );
379 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
380 pamx[i][j] /= freq[j];
381 // pamx[i][j] /= 0.25;
383 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
385 if( pamx[i][j] == 0.0 )
387 reporterr( "WARNING: pamx[i][j] = 0.0 ?\n" );
388 pamx[i][j] = 0.00001; /* by J. Thompson */
390 pamx[i][j] = log10( pamx[i][j] ) * 1000.0;
395 reporterr( " after log\n" );
399 reporterr( "%+10.6f ", pamx[i][j] );
409 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
410 average += pamx[i][j] * freq[i] * freq[j];
411 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
412 pamx[i][j] -= average;
416 average += pamx[i][i] * 1.0 / 4.0;
418 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
419 pamx[i][j] *= 600.0 / average;
422 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
423 pamx[i][j] -= offset;
425 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
426 pamx[i][j] = shishagonyuu( pamx[i][j] );
430 reporterr( " after shishagonyuu\n" );
434 reporterr( "%+#6.10f", pamx[i][j] );
439 reporterr( "done\n" );
444 pamx[4][i] = pamx[3][i];
445 pamx[i][4] = pamx[i][3];
448 for( i=5; i<10; i++ ) for( j=5; j<10; j++ )
450 pamx[i][j] = pamx[i-5][j-5];
455 reporterr( " before dis\n" );
459 reporterr( "%+#6.10f", pamx[i][j] );
467 reporterr( " score matrix \n" );
471 reporterr( "%+#6.10f", pamx[i][j] );
478 for( i=0; i<26; i++ ) amino[i] = locaminon[i];
479 for( i=0; i<26; i++ ) amino_grp[(int)amino[i]] = locgrpn[i];
480 for( i=0; i<26; i++ ) for( j=0; j<26; j++ ) n_dis[i][j] = 0;
481 for( i=0; i<10; i++ ) for( j=0; j<10; j++ ) n_dis[i][j] = shishagonyuu( pamx[i][j] );
483 ambiguousscore( amino_n, n_dis );
484 if( nwildcard ) nscore( amino_n, n_dis );
488 reporterr( " score matrix \n" );
489 for( i=0; i<26; i++ )
491 for( j=0; j<26; j++ )
492 reporterr( "%+6d", n_dis[i][j] );
496 reporterr( "penalty = %d, penalty_ex = %d\n", penalty, penalty_ex );
503 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
504 average += ribosum4[i][j] * freq[i] * freq[j];
505 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
506 ribosum4[i][j] -= average;
509 for( i=0; i<4; i++ ) for( j=0; j<4; j++ ) for( k=0; k<4; k++ ) for( m=0; m<4; m++ )
511 // if( i%4==0&&j%4==3 || i%4==3&&j%4==0 || i%4==1&&j%4==2 || i%4==2&&j%4==1 || i%4==1&&j%4==3 || i%4==3&&j%4==1 )
512 // if( k%4==0&&m%4==3 || k%4==3&&m%4==0 || k%4==1&&m%4==2 || k%4==2&&m%4==1 || k%4==1&&m%4==3 || k%4==3&&m%4==1 )
513 average += ribosum16[i*4+j][k*4+m] * freq[i] * freq[j] * freq[k] * freq[m];
515 for( i=0; i<16; i++ ) for( j=0; j<16; j++ )
516 ribosum16[i][j] -= average;
520 average += ribosum4[i][i] * freq[i];
521 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
522 ribosum4[i][j] *= 600.0 / average;
525 average += ribosum16[0*4+3][0*4+3] * freq[0] * freq[3]; // AU
526 average += ribosum16[3*4+0][3*4+0] * freq[3] * freq[0]; // UA
527 average += ribosum16[1*4+2][1*4+2] * freq[1] * freq[2]; // CG
528 average += ribosum16[2*4+1][2*4+1] * freq[2] * freq[1]; // GC
529 average += ribosum16[1*4+3][1*4+3] * freq[1] * freq[3]; // GU
530 average += ribosum16[3*4+1][3*4+1] * freq[3] * freq[1]; // UG
531 for( i=0; i<16; i++ ) for( j=0; j<16; j++ )
532 ribosum16[i][j] *= 600.0 / average;
536 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
537 ribosum4[i][j] -= offset; /* extending gap cost ?????*/
538 for( i=0; i<16; i++ ) for( j=0; j<16; j++ )
539 ribosum16[i][j] -= offset; /* extending gap cost ?????*/
542 for( i=0; i<4; i++ ) for( j=0; j<4; j++ )
543 ribosum4[i][j] = shishagonyuu( ribosum4[i][j] );
544 for( i=0; i<16; i++ ) for( j=0; j<16; j++ )
545 ribosum16[i][j] = shishagonyuu( ribosum16[i][j] );
549 reporterr( "ribosum after shishagonyuu\n" );
553 reporterr( "%+#6.10f", ribosum4[i][j] );
557 reporterr( "ribosum16 after shishagonyuu\n" );
558 for( i=0; i<16; i++ )
560 for( j=0; j<16; j++ )
561 reporterr( "%+#7.0f", ribosum16[i][j] );
566 // reporterr( "done\n" );
569 for( i=0; i<37; i++ ) for( j=0; j<37; j++ ) ribosumdis[i][j] = 0.0; //iru
570 for( m=0; m<9; m++ ) for( i=0; i<4; i++ ) // loop
571 for( k=0; k<9; k++ ) for( j=0; j<4; j++ ) ribosumdis[m*4+i][k*4+j] = ribosum4[i][j]; // loop-loop
572 // for( k=0; k<9; k++ ) for( j=0; j<4; j++ ) ribosumdis[m*4+i][k*4+j] = n_dis[i][j]; // loop-loop
574 for( i=0; i<16; i++ ) for( j=0; j<16; j++ ) ribosumdis[i+4][j+4] = ribosum16[i][j]; // stem5-stem5
575 for( i=0; i<16; i++ ) for( j=0; j<16; j++ ) ribosumdis[i+20][j+20] = ribosum16[i][j]; // stem5-stem5
576 #else // do not use ribosum
577 for( i=0; i<37; i++ ) for( j=0; j<37; j++ ) ribosumdis[i][j] = 0.0; //iru
578 for( m=0; m<9; m++ ) for( i=0; i<4; i++ ) // loop
579 for( k=0; k<9; k++ ) for( j=0; j<4; j++ ) ribosumdis[m*4+i][k*4+j] = n_dis[i][j]; // loop-loop
584 reporterr( "ribosumdis\n" );
585 for( i=0; i<37; i++ )
587 for( j=0; j<37; j++ )
588 reporterr( "%+5d", ribosumdis[i][j] );
593 // reporterr( "done\n" );
596 FreeDoubleMtx( pam1 );
597 FreeDoubleMtx( pamx );
601 else if( dorp == 'p' && scoremtx == 1 && nblosum == -2 ) /* extended */
611 nscoredalphabets = 0x100;
614 reporterr( "nalphabets = %d\n", nalphabets );
616 n_dis = AllocateIntMtx( nalphabets, nalphabets );
617 n_disLN = AllocateDoubleMtx( nalphabets, nalphabets );
618 n_distmp = AllocateDoubleMtx( nalphabets, nalphabets );
619 datafreq = AllocateDoubleVec( nalphabets );
620 freq = AllocateDoubleVec( nalphabets );
622 if( ppenalty == NOTSPECIFIED ) ppenalty = DEFAULTGOP_B;
623 if( ppenalty_dist == NOTSPECIFIED ) ppenalty_dist = ppenalty;
624 if( ppenalty_OP == NOTSPECIFIED ) ppenalty_OP = DEFAULTGOP_B;
625 if( ppenalty_ex == NOTSPECIFIED ) ppenalty_ex = DEFAULTGEP_B;
626 if( ppenalty_EX == NOTSPECIFIED ) ppenalty_EX = DEFAULTGEP_B;
627 if( poffset == NOTSPECIFIED ) poffset = DEFAULTOFS_B;
628 if( pamN == NOTSPECIFIED ) pamN = 0;
629 if( kimuraR == NOTSPECIFIED ) kimuraR = 1;
630 penalty = (int)( 600.0 / 1000.0 * ppenalty + 0.5 );
631 penalty_dist = (int)( 600.0 / 1000.0 * ppenalty_dist + 0.5 );
632 penalty_shift = (int)( penalty_shift_factor * penalty );
633 penalty_OP = (int)( 600.0 / 1000.0 * ppenalty_OP + 0.5 );
634 penalty_ex = (int)( 600.0 / 1000.0 * ppenalty_ex + 0.5 );
635 penalty_EX = (int)( 600.0 / 1000.0 * ppenalty_EX + 0.5 );
636 offset = (int)( 600.0 / 1000.0 * poffset + 0.5 );
637 offsetFFT = (int)( 600.0 / 1000.0 * (-0) + 0.5);
638 offsetLN = (int)( 600.0 / 1000.0 * 100 + 0.5);
639 penaltyLN = (int)( 600.0 / 1000.0 * -2000 + 0.5);
640 penalty_exLN = (int)( 600.0 / 1000.0 * -100 + 0.5);
642 extendedmtx( n_distmp, freq, amino, amino_grp );
644 if( trywarp ) sprintf( shiftmodel, "%4.2f", -(double)penalty_shift/600 );
645 else sprintf( shiftmodel, "noshift" );
647 sprintf( modelname, "Extended, %4.2f, %+4.2f, %+4.2f, %s", -(double)ppenalty/1000, -(double)poffset/1000, -(double)ppenalty_ex/1000, shiftmodel );
649 for( i=0; i<26; i++ ) amino[i] = locaminod[i];
650 for( i=0; i<26; i++ ) amino_grp[(int)amino[i]] = locgrpd[i];
651 for( i=0; i<0x80; i++ ) amino_n[i] = 0;
652 for( i=0; i<26; i++ ) amino_n[(int)amino[i]] = i;
654 for( i=0; i<0x100; i++ )amino_n[i] = -1;
655 for( i=0; i<nalphabets; i++)
657 amino_n[(unsigned char)amino[i]] = i;
658 // reporterr( "i=%d, amino = %c, amino_n = %d\n", i, amino[i], amino_n[amino[i]] );
662 calcfreq_extended( nseq, seq, datafreq );
669 reporterr( "raw scoreing matrix : \n" );
670 for( i=0; i<nalphabets; i++ )
672 for( j=0; j<nalphabets; j++ )
674 fprintf( stdout, "%6.2f", n_distmp[i][j] );
676 fprintf( stdout, "\n" );
683 for( i=0; i<nalphabets; i++ )
685 fprintf( stdout, "freq[%c] = %f, datafreq[%c] = %f, freq1[] = %f\n", amino[i], freq[i], amino[i], datafreq[i], freq1[i] );
688 for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ )
689 average += n_distmp[i][j] * freq1[i] * freq1[j];
692 fprintf( stdout, "####### average2 = %f\n", average );
695 for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ )
696 n_distmp[i][j] -= average;
698 fprintf( stdout, "average2 = %f\n", average );
699 fprintf( stdout, "after average substruction : \n" );
700 for( i=0; i<nalphabets; i++ )
702 for( j=0; j<nalphabets; j++ )
704 fprintf( stdout, "%6.2f", n_distmp[i][j] );
706 fprintf( stdout, "\n" );
711 for( i=0; i<nalphabets; i++ )
712 average += n_distmp[i][i] * freq1[i];
714 fprintf( stdout, "####### average1 = %f\n", average );
717 for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ )
718 n_distmp[i][j] *= 600.0 / average;
720 fprintf( stdout, "after average division : \n" );
721 for( i=0; i<nalphabets; i++ )
723 for( j=0; j<=i; j++ )
725 fprintf( stdout, "%7.1f", n_distmp[i][j] );
727 fprintf( stdout, "\n" );
731 for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ )
732 n_distmp[i][j] -= offset;
734 fprintf( stdout, "after offset substruction (offset = %d): \n", offset );
735 for( i=0; i<nalphabets; i++ )
737 for( j=0; j<=i; j++ )
739 fprintf( stdout, "%7.1f", n_distmp[i][j] );
741 fprintf( stdout, "\n" );
745 /* ÃÃ°Õ ¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª */
750 for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ )
751 n_distmp[i][j] = shishagonyuu( n_distmp[i][j] );
755 fprintf( stdout, "freq = \n" );
756 for( i=0; i<nalphabets; i++ ) fprintf( stdout, "%c %f\n", amino[i], freq1[i] );
757 fprintf( stdout, " scoring matrix \n" );
758 for( i=0; i<nalphabets; i++ )
760 fprintf( stdout, "%c ", amino[i] );
761 for( j=0; j<nalphabets; j++ )
762 fprintf( stdout, "%5.0f", n_distmp[i][j] );
763 fprintf( stdout, "\n" );
765 fprintf( stdout, " " );
766 for( i=0; i<nalphabets; i++ )
767 fprintf( stdout, " %c", amino[i] );
770 for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ )
771 average += n_distmp[i][j] * freq1[i] * freq1[j];
772 fprintf( stdout, "average = %f\n", average );
775 for( i=0; i<nalphabets; i++ )
776 average += n_distmp[i][i] * freq1[i];
777 fprintf( stdout, "itch average = %f\n", average );
778 reporterr( "parameters: %d, %d, %d\n", penalty, penalty_ex, offset );
784 for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ ) n_dis[i][j] = 0;
785 for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ ) n_dis[i][j] = (int)n_distmp[i][j];
786 for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ ) n_dis[i][amino_n['-']] = n_dis[amino_n['-']][i] = 0.0;
788 FreeDoubleMtx( n_distmp );
789 FreeDoubleVec( datafreq );
790 FreeDoubleVec( freq );
792 // reporterr( "done.\n" );
795 else if( dorp == 'p' && scoremtx == 1 ) /* Blosum, user-defined */
809 reporterr( "nblosum=%d??\n", nblosum );
823 nscoredalphabets = 20;
826 n_dis = AllocateIntMtx( nalphabets, nalphabets );
827 n_disLN = AllocateDoubleMtx( nalphabets, nalphabets );
828 n_distmp = AllocateDoubleMtx( 20, 20 );
829 datafreq = AllocateDoubleVec( 20 );
830 freq = AllocateDoubleVec( 20 );
832 if( ppenalty == NOTSPECIFIED ) ppenalty = DEFAULTGOP_B;
833 if( ppenalty_dist == NOTSPECIFIED ) ppenalty_dist = ppenalty;
834 if( ppenalty_OP == NOTSPECIFIED ) ppenalty_OP = DEFAULTGOP_B;
835 if( ppenalty_ex == NOTSPECIFIED ) ppenalty_ex = DEFAULTGEP_B;
836 if( ppenalty_EX == NOTSPECIFIED ) ppenalty_EX = DEFAULTGEP_B;
837 if( poffset == NOTSPECIFIED ) poffset = DEFAULTOFS_B;
838 if( pamN == NOTSPECIFIED ) pamN = 0;
839 if( kimuraR == NOTSPECIFIED ) kimuraR = 1;
840 penalty = (int)( 600.0 / 1000.0 * ppenalty + 0.5 );
841 penalty_dist = (int)( 600.0 / 1000.0 * ppenalty_dist + 0.5 );
842 penalty_shift = (int)( penalty_shift_factor * penalty );
843 penalty_OP = (int)( 600.0 / 1000.0 * ppenalty_OP + 0.5 );
844 penalty_ex = (int)( 600.0 / 1000.0 * ppenalty_ex + 0.5 );
845 penalty_EX = (int)( 600.0 / 1000.0 * ppenalty_EX + 0.5 );
846 offset = (int)( 600.0 / 1000.0 * poffset + 0.5 );
847 offsetFFT = (int)( 600.0 / 1000.0 * (-0) + 0.5);
848 offsetLN = (int)( 600.0 / 1000.0 * 100 + 0.5);
849 penaltyLN = (int)( 600.0 / 1000.0 * -2000 + 0.5);
850 penalty_exLN = (int)( 600.0 / 1000.0 * -100 + 0.5);
852 BLOSUMmtx( nblosum, n_distmp, freq, amino, amino_grp );
854 if( trywarp ) sprintf( shiftmodel, "%4.2f", -(double)penalty_shift/600 );
855 else sprintf( shiftmodel, "noshift" );
858 sprintf( modelname, "User-defined, %4.2f, %+4.2f, %+4.2f, %s", -(double)ppenalty/1000, -(double)poffset/1000, -(double)ppenalty_ex/1000, shiftmodel );
860 sprintf( modelname, "BLOSUM%d, %4.2f, %+4.2f, %+4.2f, %s", nblosum, -(double)ppenalty/1000, -(double)poffset/1000, -(double)ppenalty_ex/1000, shiftmodel );
862 for( i=0; i<26; i++ ) amino[i] = locaminod[i];
863 for( i=0; i<26; i++ ) amino_grp[(int)amino[i]] = locgrpd[i];
864 for( i=0; i<0x80; i++ ) amino_n[i] = 0;
865 for( i=0; i<26; i++ ) amino_n[(int)amino[i]] = i;
867 for( i=0; i<0x80; i++ )amino_n[i] = -1;
868 for( i=0; i<26; i++) amino_n[(int)amino[i]] = i;
871 calcfreq( nseq, seq, datafreq );
877 reporterr( "raw scoreing matrix : \n" );
878 for( i=0; i<20; i++ )
880 for( j=0; j<20; j++ )
882 fprintf( stdout, "%6.2f", n_distmp[i][j] );
884 fprintf( stdout, "\n" );
891 for( i=0; i<20; i++ )
893 fprintf( stdout, "freq[%c] = %f, datafreq[%c] = %f, freq1[] = %f\n", amino[i], freq[i], amino[i], datafreq[i], freq1[i] );
896 for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
897 average += n_distmp[i][j] * freq1[i] * freq1[j];
900 fprintf( stdout, "####### average2 = %f\n", average );
905 for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
906 n_distmp[i][j] -= average;
909 fprintf( stdout, "average2 = %f\n", average );
910 fprintf( stdout, "after average substruction : \n" );
911 for( i=0; i<20; i++ )
913 for( j=0; j<20; j++ )
915 fprintf( stdout, "%6.2f", n_distmp[i][j] );
917 fprintf( stdout, "\n" );
922 for( i=0; i<20; i++ )
923 average += n_distmp[i][i] * freq1[i];
925 fprintf( stdout, "####### average1 = %f\n", average );
928 for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
929 n_distmp[i][j] *= 600.0 / average;
931 fprintf( stdout, "after average division : \n" );
932 for( i=0; i<20; i++ )
934 for( j=0; j<=i; j++ )
936 fprintf( stdout, "%7.1f", n_distmp[i][j] );
938 fprintf( stdout, "\n" );
942 for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
943 n_distmp[i][j] -= offset;
945 fprintf( stdout, "after offset substruction (offset = %d): \n", offset );
946 for( i=0; i<20; i++ )
948 for( j=0; j<=i; j++ )
950 fprintf( stdout, "%7.1f", n_distmp[i][j] );
952 fprintf( stdout, "\n" );
956 /* ÃÃ°Õ ¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª */
961 for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
962 n_distmp[i][j] = shishagonyuu( n_distmp[i][j] );
966 fprintf( stdout, " scoring matrix \n" );
967 for( i=0; i<20; i++ )
969 fprintf( stdout, "%c ", amino[i] );
970 for( j=0; j<20; j++ )
971 fprintf( stdout, "%5.0f", n_distmp[i][j] );
972 fprintf( stdout, "\n" );
974 fprintf( stdout, " " );
975 for( i=0; i<20; i++ )
976 fprintf( stdout, " %c", amino[i] );
979 for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
980 average += n_distmp[i][j] * freq1[i] * freq1[j];
981 fprintf( stdout, "\naverage = %f\n", average );
984 for( i=0; i<20; i++ )
985 iaverage += n_distmp[i][i] * freq1[i];
986 fprintf( stdout, "itch average = %f, E=%f\n", iaverage, average/iaverage );
987 reporterr( "parameters: %d, %d, %d\n", penalty, penalty_ex, offset );
993 for( i=0; i<26; i++ ) for( j=0; j<26; j++ ) n_dis[i][j] = 0;
994 for( i=0; i<20; i++ ) for( j=0; j<20; j++ ) n_dis[i][j] = (int)n_distmp[i][j];
996 FreeDoubleMtx( n_distmp );
997 FreeDoubleVec( datafreq );
998 FreeDoubleVec( freq );
1000 // reporterr( "done.\n" );
1003 else if( dorp == 'p' && scoremtx == 2 ) /* Miyata-Yasunaga */
1005 reporterr( "Not supported\n" );
1024 nscoredalphabets = 20;
1027 n_dis = AllocateIntMtx( nalphabets, nalphabets );
1028 n_disLN = AllocateDoubleMtx( nalphabets, nalphabets );
1029 rsr = AllocateDoubleMtx( 20, 20 );
1030 pam1 = AllocateDoubleMtx( 20, 20 );
1031 pamx = AllocateDoubleMtx( 20, 20 );
1032 freq = AllocateDoubleVec( 20 );
1033 mutab = AllocateDoubleVec( 20 );
1034 datafreq = AllocateDoubleVec( 20 );
1036 if( ppenalty == NOTSPECIFIED ) ppenalty = DEFAULTGOP_J;
1037 if( ppenalty_dist == NOTSPECIFIED ) ppenalty_dist = ppenalty;
1038 if( ppenalty_OP == NOTSPECIFIED ) ppenalty_OP = DEFAULTGOP_J;
1039 if( ppenalty_ex == NOTSPECIFIED ) ppenalty_ex = DEFAULTGEP_J;
1040 if( ppenalty_EX == NOTSPECIFIED ) ppenalty_EX = DEFAULTGEP_J;
1041 if( poffset == NOTSPECIFIED ) poffset = DEFAULTOFS_J;
1042 if( pamN == NOTSPECIFIED ) pamN = DEFAULTPAMN;
1043 if( kimuraR == NOTSPECIFIED ) kimuraR = 1;
1047 reporterr( "pamN=%d??\n", pamN );
1060 penalty = (int)( 600.0 / 1000.0 * ppenalty + 0.5 );
1061 penalty_dist = (int)( 600.0 / 1000.0 * ppenalty_dist + 0.5 );
1062 penalty_shift = (int)( penalty_shift_factor * penalty );
1063 penalty_OP = (int)( 600.0 / 1000.0 * ppenalty_OP + 0.5 );
1064 penalty_ex = (int)( 600.0 / 1000.0 * ppenalty_ex + 0.5 );
1065 penalty_EX = (int)( 600.0 / 1000.0 * ppenalty_EX + 0.5 );
1066 offset = (int)( 600.0 / 1000.0 * poffset + 0.5 );
1067 offsetFFT = (int)( 600.0 / 1000.0 * (-0) + 0.5 );
1068 offsetLN = (int)( 600.0 / 1000.0 * 100 + 0.5);
1069 penaltyLN = (int)( 600.0 / 1000.0 * -2000 + 0.5);
1070 penalty_exLN = (int)( 600.0 / 1000.0 * -100 + 0.5);
1072 if( trywarp ) sprintf( shiftmodel, "%4.2f", -(double)penalty_shift/600 );
1073 else sprintf( shiftmodel, "noshift" );
1075 sprintf( modelname, "%s %dPAM, %4.2f, %4.2f, %s", (TMorJTT==TM)?"Transmembrane":"JTT", pamN, -(double)ppenalty/1000, -(double)poffset/1000, shiftmodel );
1077 JTTmtx( rsr, freq, amino, amino_grp, (int)(TMorJTT==TM) );
1079 for( i=0; i<0x80; i++ ) amino_n[i] = -1;
1080 for( i=0; i<26; i++ ) amino_n[(int)amino[i]] = i;
1083 calcfreq( nseq, seq, datafreq );
1091 fprintf( stdout, "rsr = \n" );
1092 for( i=0; i<20; i++ )
1094 for( j=0; j<20; j++ )
1096 fprintf( stdout, "%9.2f ", rsr[i][j] );
1098 fprintf( stdout, "\n" );
1103 reporterr( "generating %dPAM %s scoring matrix for amino acids ... ", pamN, (TMorJTT==TM)?"Transmembrane":"JTT" );
1106 for( i=0; i<20; i++ )
1109 for( j=0; j<20; j++ )
1110 mutab[i] += rsr[i][j] * freq1[j];
1111 tmp += mutab[i] * freq1[i];
1114 fprintf( stdout, "mutability = \n" );
1115 for( i=0; i<20; i++ )
1116 fprintf( stdout, "%5.3f\n", mutab[i] );
1118 fprintf( stdout, "tmp = %f\n", tmp );
1121 for( i=0; i<20; i++ )
1123 for( j=0; j<20; j++ )
1126 pam1[i][j] = delta * rsr[i][j] * freq1[j];
1128 pam1[i][j] = 1.0 - delta * mutab[i];
1134 fprintf( stdout, "pam1 = \n" );
1135 for( i=0; i<20; i++ )
1137 for( j=0; j<20; j++ )
1139 fprintf( stdout, "%9.6f ", pam1[i][j] );
1141 fprintf( stdout, "\n" );
1145 MtxuntDouble( pamx, 20 );
1146 for( x=0; x < pamN; x++ ) MtxmltDouble( pamx, pam1, 20 );
1148 for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
1149 pamx[i][j] /= freq1[j];
1151 for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
1153 if( pamx[i][j] == 0.0 )
1155 reporterr( "WARNING: pamx[%d][%d] = 0.0?\n", i, j );
1156 pamx[i][j] = 0.00001; /* by J. Thompson */
1158 pamx[i][j] = log10( pamx[i][j] ) * 1000.0;
1162 fprintf( stdout, "raw scoring matrix : \n" );
1163 for( i=0; i<20; i++ )
1165 for( j=0; j<20; j++ )
1167 fprintf( stdout, "%5.0f", pamx[i][j] );
1169 fprintf( stdout, "\n" );
1171 average = tmp = 0.0;
1172 for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
1174 average += pamx[i][j] * freq1[i] * freq1[j];
1175 tmp += freq1[i] * freq1[j];
1178 fprintf( stdout, "Zenbu average = %f, tmp = %f \n", average, tmp );
1179 average = tmp = 0.0;
1180 for( i=0; i<20; i++ ) for( j=i; j<20; j++ )
1182 average += pamx[i][j] * freq1[i] * freq1[j];
1183 tmp += freq1[i] * freq1[j];
1186 fprintf( stdout, "Zenbu average2 = %f, tmp = %f \n", average, tmp );
1187 average = tmp = 0.0;
1188 for( i=0; i<20; i++ )
1190 average += pamx[i][i] * freq1[i];
1194 fprintf( stdout, "Itch average = %f, tmp = %f \n", average, tmp );
1203 for( i=0; i<20; i++ )
1204 fprintf( stdout, "freq[%c] = %f, datafreq[%c] = %f, freq1[] = %f\n", amino[i], freq[i], amino[i], datafreq[i], freq1[i] );
1207 for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
1208 average += pamx[i][j] * freq1[i] * freq1[j];
1211 fprintf( stdout, "####### average2 = %f\n", average );
1216 for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
1217 pamx[i][j] -= average;
1220 fprintf( stdout, "average2 = %f\n", average );
1221 fprintf( stdout, "after average substruction : \n" );
1222 for( i=0; i<20; i++ )
1224 for( j=0; j<20; j++ )
1226 fprintf( stdout, "%5.0f", pamx[i][j] );
1228 fprintf( stdout, "\n" );
1233 for( i=0; i<20; i++ )
1234 average += pamx[i][i] * freq1[i];
1236 fprintf( stdout, "####### average1 = %f\n", average );
1239 for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
1240 pamx[i][j] *= 600.0 / average;
1242 fprintf( stdout, "after average division : \n" );
1243 for( i=0; i<20; i++ )
1245 for( j=0; j<=i; j++ )
1247 fprintf( stdout, "%5.0f", pamx[i][j] );
1249 fprintf( stdout, "\n" );
1253 for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
1254 pamx[i][j] -= offset;
1256 fprintf( stdout, "after offset substruction (offset = %d): \n", offset );
1257 for( i=0; i<20; i++ )
1259 for( j=0; j<=i; j++ )
1261 fprintf( stdout, "%5.0f", pamx[i][j] );
1263 fprintf( stdout, "\n" );
1267 /* ÃÃ°Õ ¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª */
1272 for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
1273 pamx[i][j] = shishagonyuu( pamx[i][j] );
1278 for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
1279 average += pamx[i][j];
1282 for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
1284 pamx[i][j] -= average;
1285 pamx[i][j] = shishagonyuu( pamx[i][j] );
1290 fprintf( stdout, " scoring matrix \n" );
1291 for( i=0; i<20; i++ )
1293 fprintf( stdout, "%c ", amino[i] );
1294 for( j=0; j<20; j++ )
1295 fprintf( stdout, "%5.0f", pamx[i][j] );
1296 fprintf( stdout, "\n" );
1298 fprintf( stdout, " " );
1299 for( i=0; i<20; i++ )
1300 fprintf( stdout, " %c", amino[i] );
1303 for( i=0; i<20; i++ ) for( j=0; j<20; j++ )
1304 average += pamx[i][j] * freq1[i] * freq1[j];
1305 fprintf( stdout, "\naverage = %f\n", average );
1308 for( i=0; i<20; i++ )
1309 iaverage += pamx[i][i] * freq1[i];
1310 fprintf( stdout, "itch average = %f, E=%f\n", average, average/iaverage );
1311 reporterr( "parameters: %d, %d, %d\n", penalty, penalty_ex, offset );
1317 for( i=0; i<26; i++ ) for( j=0; j<26; j++ ) n_dis[i][j] = 0;
1318 for( i=0; i<20; i++ ) for( j=0; j<20; j++ ) n_dis[i][j] = (int)pamx[i][j];
1320 reporterr( "done.\n" );
1321 FreeDoubleMtx( rsr );
1322 FreeDoubleMtx( pam1 );
1323 FreeDoubleMtx( pamx );
1324 FreeDoubleVec( freq );
1325 FreeDoubleVec( mutab );
1326 FreeDoubleVec( datafreq );
1330 reporterr( "scoremtx = %d\n", scoremtx );
1331 reporterr( "amino[] = %s\n", amino );
1334 amino_dis = AllocateIntMtx( charsize, charsize );
1335 amino_dis_consweight_multi = AllocateDoubleMtx( charsize, charsize );
1337 // reporterr( "charsize=%d\n", charsize );
1339 for( i=0; i<charsize; i++ )amino_n[i] = -1;
1340 for( i=0; i<nalphabets; i++) amino_n[(int)amino[i]] = i;
1341 for( i=0; i<charsize; i++ ) for( j=0; j<charsize; j++ ) amino_dis[i][j] = 0;
1342 for( i=0; i<nalphabets; i++ ) for( j=0; j<nalphabets; j++ ) n_disLN[i][j] = 0;
1343 for( i=0; i<charsize; i++ ) for( j=0; j<charsize; j++ ) amino_dis_consweight_multi[i][j] = 0.0;
1345 n_dis_consweight_multi = AllocateDoubleMtx( nalphabets, nalphabets );
1346 n_disFFT = AllocateIntMtx( nalphabets, nalphabets );
1347 for( i=0; i<nalphabets; i++) for( j=0; j<nalphabets; j++ )
1349 amino_dis[(int)amino[i]][(int)amino[j]] = n_dis[i][j];
1350 n_dis_consweight_multi[i][j] = (double)n_dis[i][j] * consweight_multi;
1351 amino_dis_consweight_multi[(int)amino[i]][(int)amino[j]] = (double)n_dis[i][j] * consweight_multi;
1354 if( dorp == 'd' ) /* DNA */
1357 for( i=0; i<5; i++) for( j=0; j<5; j++ )
1358 n_disLN[i][j] = (double)n_dis[i][j] + offset - offsetLN;
1359 for( i=5; i<10; i++) for( j=5; j<10; j++ )
1360 n_disLN[i][j] = (double)n_dis[i][j] + offset - offsetLN;
1361 for( i=0; i<5; i++) for( j=0; j<5; j++ )
1362 n_disFFT[i][j] = n_dis[i][j] + offset - offsetFFT;
1363 for( i=5; i<10; i++) for( j=5; j<10; j++ )
1364 n_disFFT[i][j] = n_dis[i][j] + offset - offsetFFT;
1366 for( i=0; i<10; i++) for( j=0; j<10; j++ )
1367 n_disLN[i][j] = (double)n_dis[i][j] + offset - offsetLN;
1368 for( i=0; i<10; i++) for( j=0; j<10; j++ )
1369 n_disFFT[i][j] = n_dis[i][j] + offset - offsetFFT;
1374 for( i=0; i<20; i++) for( j=0; j<20; j++ )
1375 n_disLN[i][j] = (double)n_dis[i][j] + offset - offsetLN;
1376 for( i=0; i<20; i++) for( j=0; j<20; j++ )
1377 n_disFFT[i][j] = n_dis[i][j] + offset - offsetFFT;
1381 reporterr( "amino_dis (offset = %d): \n", offset );
1382 for( i=0; i<20; i++ )
1384 for( j=0; j<20; j++ )
1386 reporterr( "%5d", amino_dis[(int)amino[i]][(int)amino[j]] );
1391 reporterr( "amino_disLN (offsetLN = %d): \n", offsetLN );
1392 for( i=0; i<20; i++ )
1394 for( j=0; j<20; j++ )
1396 reporterr( "%5d", amino_disLN[(int)amino[i]][(int)amino[j]] );
1401 reporterr( "n_dis (offset = %d): \n", offset );
1402 for( i=0; i<26; i++ )
1404 for( j=0; j<26; j++ )
1406 reporterr( "%5d", n_dis[i][j] );
1411 reporterr( "n_disFFT (offsetFFT = %d): \n", offsetFFT );
1412 for( i=0; i<26; i++ )
1414 for( j=0; j<26; j++ )
1416 reporterr( "%5d", n_disFFT[i][j] );
1427 if( fftThreshold == NOTSPECIFIED )
1429 fftThreshold = FFT_THRESHOLD;
1431 if( fftWinSize == NOTSPECIFIED )
1434 fftWinSize = FFT_WINSIZE_D;
1436 fftWinSize = FFT_WINSIZE_P;
1444 for( i=0; i<20; i++ ) polarity[i] = polarity_[i];
1445 for( av=0.0, i=0; i<20; i++ ) av += polarity[i];
1447 for( sd=0.0, i=0; i<20; i++ ) sd += ( polarity[i]-av ) * ( polarity[i]-av );
1448 sd /= 20.0; sd = sqrt( sd );
1449 for( i=0; i<20; i++ ) polarity[i] -= av;
1450 for( i=0; i<20; i++ ) polarity[i] /= sd;
1452 for( i=0; i<20; i++ ) volume[i] = volume_[i];
1453 for( av=0.0, i=0; i<20; i++ ) av += volume[i];
1455 for( sd=0.0, i=0; i<20; i++ ) sd += ( volume[i]-av ) * ( volume[i]-av );
1456 sd /= 20.0; sd = sqrt( sd );
1457 for( i=0; i<20; i++ ) volume[i] -= av;
1458 for( i=0; i<20; i++ ) volume[i] /= sd;
1461 for( i=0; i<20; i++ ) fprintf( stdout, "amino=%c, pol = %f<-%f, vol = %f<-%f\n", amino[i], polarity[i], polarity_[i], volume[i], volume_[i] );
1462 for( i=0; i<20; i++ ) fprintf( stdout, "%c %+5.3f %+5.3f\n", amino[i], volume[i], polarity[i] );
1467 void freeconstants()
1469 if( n_disLN ) FreeDoubleMtx( n_disLN ); n_disLN = NULL;
1470 if( n_dis ) FreeIntMtx( n_dis ); n_dis = NULL;
1471 if( n_disFFT ) FreeIntMtx( n_disFFT ); n_disFFT = NULL;
1472 if( n_dis_consweight_multi ) FreeDoubleMtx( n_dis_consweight_multi ); n_dis_consweight_multi = NULL;
1473 if( amino_dis ) FreeIntMtx( amino_dis ); amino_dis = NULL;
1474 if( amino_dis_consweight_multi ) FreeDoubleMtx( amino_dis_consweight_multi ); amino_dis_consweight_multi = NULL;