3 tree-dependent iteration
4 algorithm A+ when group-to-group, C when group-to-singleSeqence
17 static void Writeoption2( FILE *fp, int cycle, double cut )
19 fprintf( fp, "%dth cycle\n", cycle );
20 fprintf( fp, "marginal score to search : current score * (100-%d) / 100\n", (int)cut );
23 static void Writeoptions( FILE *fp )
25 fprintf( fp, "Tree-dependent-iteration\n" );
27 fprintf( fp, "Blosum %d\n", nblosum );
28 else if( scoremtx == -1 )
29 fprintf( fp, "DNA\n" );
30 else if( scoremtx == 2 )
31 fprintf( fp, "Miyata-Yasunaga\n" );
33 fprintf( fp, "JTT %dPAM\n", pamN );
35 if( scoremtx == 0 || scoremtx == 1 )
36 fprintf( fp, "Gap Penalty = %+5.3f, %5.2f, %+5.3f\n", (double)ppenalty/1000, (double)ppenalty_ex/1000, (double)poffset/1000 );
38 fprintf( fp, "Gap Penalty = %+5.3f\n", (double)penalty/1000 );
42 fprintf( fp, "score of rnd or sco\n" );
44 fprintf( fp, "score = sigma( score for a pair of homologous amino acids ) / ( number of amino acids pairs )\n" );
46 fprintf( fp, "score : SP\n" );
52 fprintf( fp, "weighted rationale-1, geta2 = %f\n", geta2 );
53 else if( weight == 3 )
54 fprintf( fp, "weighted like ClustalW," );
55 else if( weight == 4 )
56 fprintf( fp, "weighted rationale-2, geta2 = %f\n", geta2 );
58 fprintf( fp, "unweighted\n" );
61 fprintf( fp, "using tree defined by the file hat2.\n" );
62 if( weight && !utree )
63 fprintf( fp, "using temporary tree.\n" );
65 if( treemethod == 'n' )
66 fprintf( fp, "Tree is calculated with Neighbor-Joining Method.\n" );
67 else if( treemethod == 'q' )
68 fprintf( fp, "Tree is calculated with Minimum linkage.\n" );
69 else if( treemethod == 'X' )
70 fprintf( fp, "Tree is calculated with simplified UPG Method and UPG Method.\n" );
71 else if( treemethod == 'E' )
72 fprintf( fp, "Tree is calculated with UPG Method.\n" );
74 fprintf( fp, "Tree is calculated with unknown Method.\n" );
77 fprintf( fp, "Algorithm A+ / C\n" );
79 fprintf( fp, "Algorithm S \n" );
81 fprintf( fp, "Algorithm A+ \n" );
83 fprintf( fp, "Algorithm A \n" );
85 fprintf( fp, "Algorithm ? \n" );
91 fprintf( fp, "Basis : 4 nucleotides\n" );
96 fprintf( fp, "Basis : Polarity and Volume\n" );
98 fprintf( fp, "Basis : 20 amino acids\n" );
100 fprintf( fp, "Threshold of anchors = %d%%\n", fftThreshold );
101 fprintf( fp, "window size of anchors = %dsites\n", fftWinSize );
106 int TreeDependentIteration( int locnjob, char name[M][B], int nlen[M],
107 char **aseq, char **bseq, int ***topol, double **len,
108 int alloclen, LocalHom **localhomtable,
109 RNApair ***singlerna,
110 int nkozo, char *kozoarivec )
112 int i, j, k, l, iterate, ii, iu, ju;
113 int lin, ldf, length;
116 static double **imanoten;
118 static double *effarrforlocalhom = NULL;
119 static double *effarr = NULL;
120 static double *effarr1 = NULL;
121 static double *effarr2 = NULL;
122 static double *effarr_kozo = NULL;
123 static double *effarr1_kozo = NULL;
124 static double *effarr2_kozo = NULL;
125 static double **mtx = NULL;
126 static int **node = NULL;
127 static int *branchnode = NULL;
128 static double **branchWeight = NULL;
129 static char **mseq1, **mseq2;
130 static float ***history;
132 double tscore, mscore;
136 float naivescore0 = 0.0; // by D.Mathog, a guess
139 char pair[njob][njob];
144 double score_for_check0, score_for_check1;
145 static double **effmtx = NULL;
146 extern double score_calc0();
148 static char *indication1, *indication2;
149 static LocalHom ***localhomshrink = NULL;
150 float impmatch, oimpmatch;
155 static RNApair *rnapairboth;
156 RNApair ***grouprna1, ***grouprna2;
158 if( rnakozo && rnaprediction == 'm' )
160 grouprna1 = (RNApair ***)calloc( njob, sizeof( RNApair ** ) );
161 grouprna2 = (RNApair ***)calloc( njob, sizeof( RNApair ** ) );
165 grouprna1 = grouprna2 = NULL;
168 Writeoptions( trap_g );
171 if( effarr == NULL ) /* locnjob == njob ni kagiru */
173 indication1 = AllocateCharVec( njob*3+50 );
174 indication2 = AllocateCharVec( njob*3+50 );
175 effarr = AllocateDoubleVec( locnjob );
176 effarrforlocalhom = AllocateDoubleVec( locnjob );
177 effarr1 = AllocateDoubleVec( locnjob );
178 effarr2 = AllocateDoubleVec( locnjob );
179 mseq1 = AllocateCharMtx( locnjob, 0 );
180 mseq2 = AllocateCharMtx( locnjob, 0 );
181 mtx = AllocateDoubleMtx( locnjob, locnjob );
182 node = AllocateIntMtx( locnjob, locnjob );
183 branchnode = AllocateIntVec( locnjob );
184 branchWeight = AllocateDoubleMtx( locnjob, 2 );
185 history = AllocateFloatCub( niter, locnjob, 2 );
186 stopol = (Node *)calloc( locnjob * 2, sizeof( Node ) );
187 gapmap1 = AllocateIntVec( alloclen );
188 gapmap2 = AllocateIntVec( alloclen );
189 if( score_check == 2 ) imanoten = AllocateDoubleMtx( njob, njob );
191 effarr1_kozo = AllocateDoubleVec( locnjob ); // tsuneni allocate suru.
192 effarr2_kozo = AllocateDoubleVec( locnjob ); // tsuneni allocate suru.
193 effarr_kozo = AllocateDoubleVec( locnjob );
194 for( i=0; i<locnjob; i++ )
195 effarr_kozo[i] = effarr1_kozo[i] = effarr2_kozo[i] = 0.0;
199 pair = AllocateCharMtx( locnjob, locnjob );
200 if( rnakozo ) rnapairboth = (RNApair *)calloc( alloclen, sizeof( RNApair ) );
204 localhomshrink = (LocalHom ***)calloc( njob, sizeof( LocalHom ** ) );
205 for( i=0; i<njob; i++)
207 localhomshrink[i] = (LocalHom **)calloc( njob, sizeof( LocalHom * ) );
213 if( !effmtx ) effmtx = AllocateDoubleMtx( locnjob, locnjob );
214 for( i=0; i<locnjob; i++ ) for( j=0; j<locnjob; j++ ) effmtx[i][j] = 1.0;
217 for( i=0; i<locnjob; i++ ) strcpy( bseq[i], aseq[i] );
219 writePre( locnjob, name, nlen, aseq, 0 );
225 counteff_simple( locnjob, topol, len, effarrforlocalhom );
226 calcimportance( locnjob, effarrforlocalhom, aseq, localhomtable );
231 countnode_int( locnjob, topol, node );
234 fprintf( stderr, "Not supported, weight=%d nkozo=%d.\n", weight, nkozo );
237 else if( weight == 4 )
239 treeCnv( stopol, locnjob, topol, len, branchWeight );
240 calcBranchWeight( branchWeight, locnjob, stopol, topol, len );
245 if( cooling ) cut *= 2.0;
246 for( iterate = 0; iterate<niter; iterate++ )
248 if( cooling ) cut *= 0.5; /* ... */
250 fprintf( trap_g, "\n" );
251 Writeoption2( trap_g, iterate, cut );
252 fprintf( trap_g, "\n" );
258 fprintf( stderr, "Dynamic tree and kozo is not supported.\n" );
263 static char *buff1 = NULL;
264 static char *buff2 = NULL;
267 buff1 = AllocateCharVec( alloclen );
268 buff2 = AllocateCharVec( alloclen );
271 for( i=0; i<locnjob-1; i++ ) for( j=i+1; j<locnjob; j++ )
273 buff1[0] = buff2[0] = 0;
274 strcat( buff1, res_g[i] ); strcat( buff2, res_g[j] );
275 strcat( buff1, bseq[i] ); strcat( buff2, bseq[j] );
276 strcat( buff1, seq_g[i] ); strcat( buff2, seq_g[j] );
278 mtx[i][j] = (double)substitution_hosei( buff1, buff2 );
283 for( i=0; i<locnjob-1; i++ ) for( j=i+1; j<locnjob; j++ )
284 mtx[i][j] = (double)substitution_hosei( bseq[i], bseq[j] );
287 if ( treemethod == 'n' )
288 nj( locnjob, mtx, topol, len );
289 else if( treemethod == 's' )
290 spg( locnjob, mtx, topol, len );
291 else if( treemethod == 'X' )
292 supg( locnjob, mtx, topol, len );
293 else if( treemethod == 'p' )
294 upg2( locnjob, mtx, topol, len );
295 /* veryfastsupg
\e$B$O!":#$N$H$3$m;H$($^$;$s!#
\e(B*/
296 /*
\e$B=gHV$NLdBj$,$"$k$N$G
\e(B */
299 countnode_int( locnjob, topol, node );
300 else if( weight == 4 )
302 treeCnv( stopol, locnjob, topol, len, branchWeight );
303 calcBranchWeight( branchWeight, locnjob, stopol, topol, len );
305 trap = fopen( "hat2", "w" );
306 if( !trap ) ErrorExit( "Cannot open hat2." );
307 WriteHat2( trap, locnjob, name, mtx );
311 counteff_simple( locnjob, topol, len, effarrforlocalhom );
312 calcimportance( locnjob, effarrforlocalhom, aseq, localhomtable );
316 if( iterate % 2 == 0 )
322 lin = locnjob - 2; ldf = -1;
325 if( score_check == 2 )
329 length = strlen( bseq[0] );
330 for( i=0; i<locnjob-1; i++ )
331 for( j=i+1; j<locnjob; j++ )
332 intergroup_score( bseq+i, bseq+j, effarr1, effarr2, 1, 1, length, imanoten[i]+j );
335 for( l=lin; l < locnjob-1 && l >= 0 ; l+=ldf )
339 if( l == locnjob-2 ) k = 1;
341 fprintf( stderr, "STEP %03d-%03d-%d ", iterate+1, l+1, k );
343 fprintf( stderr, "STEP %03d-%03d-%d %s", iterate+1, l+1, k, use_fft?"\n":"\n" );
345 for( i=0; i<locnjob; i++ ) for( j=0; j<locnjob; j++ ) pair[i][j] = 0;
347 OneClusterAndTheOther( locnjob, pair, &s1, &s2, topol, l, k );
349 fprintf( stderr, "STEP%d-%d\n", l, k );
350 for( i=0; i<locnjob; i++ )
352 for( j=0; j<locnjob; j++ )
354 fprintf( stderr, "%#3d", pair[i][j] );
356 fprintf( stderr, "\n" );
361 for( i=0; i<locnjob; i++ ) effarr[i] = 1.0;
364 for( i=0; i<locnjob; i++ )
367 effarr_kozo[i] = 1.0;
369 effarr_kozo[i] = 0.0;
373 else if( weight == 2 )
375 nodeFromABranch( locnjob, branchnode, node, topol, len, l, k );
376 node_eff( locnjob, effarr, branchnode );
378 else if( weight == 4 )
380 weightFromABranch( locnjob, effarr, stopol, topol, l, k );
384 assignstrweight( locnjob, effarr_kozo, stopol, topol, l, k, kozoarivec, effarr );
388 if( nkozo ) // hitomadu single weight.
389 for( i=0; i<locnjob; i++ )
391 if( kozoarivec[i] ) effarr_kozo[i] = effarr[i];
392 else effarr_kozo[i] = 0.0;
396 fprintf( stderr, "\n" );
397 fprintf( stderr, "effarr_kozo = \n" );
398 for( i=0; i<locnjob; i++ ) fprintf( stderr, "%5.3f ", effarr_kozo[i] );
399 fprintf( stderr, "\n" );
400 fprintf( stderr, "effarr = \n" );
401 for( i=0; i<locnjob; i++ ) fprintf( stderr, "%5.3f ", effarr[i] );
402 fprintf( stderr, "\n\n" );
406 for( i=0; i<locnjob; i++ ) strcpy( aseq[i], bseq[i] );
407 length = strlen( aseq[0] );
414 clus1 = conjuctionfortbfast_kozo( &tmptmptmp, pair, s1, aseq, mseq1, effarr1, effarr, effarr1_kozo, effarr_kozo, indication1 );
415 for( i=0; i<clus1; i++ ) effarr1_kozo[i] *= 1.0; // 0.5 ga sairyo ?
417 clus2 = conjuctionfortbfast_kozo( &tmptmptmp, pair, s2, aseq, mseq2, effarr2, effarr, effarr2_kozo, effarr_kozo, indication2 );
418 for( i=0; i<clus2; i++ ) effarr2_kozo[i] *= 1.0; // 0.5 ga sairyo ?
421 fprintf( stderr, "\ngroup1 = %s\n", indication1 );
422 for( i=0; i<clus1; i++ ) fprintf( stderr, "effarr1_kozo[%d], effarr1[] = %f, %f\n", i, effarr1_kozo[i], effarr1[i] );
423 fprintf( stderr, "\ngroup2 = %s\n", indication2 );
424 for( i=0; i<clus2; i++ ) fprintf( stderr, "effarr2_kozo[%d], effarr2[] = %f, %f\n", i, effarr2_kozo[i], effarr2[i] );
432 clus1 = conjuctionfortbfast_kozo_BUG( pair, s1, aseq, mseq1, effarr1, effarr, effarr1_kozo, effarr_kozo, indication1 );
433 clus2 = conjuctionfortbfast_kozo_BUG( pair, s2, aseq, mseq2, effarr2, effarr, effarr2_kozo, effarr_kozo, indication2 );
438 clus1 = conjuctionfortbfast( pair, s1, aseq, mseq1, effarr1, effarr, indication1 );
439 clus2 = conjuctionfortbfast( pair, s2, aseq, mseq2, effarr2, effarr, indication2 );
444 if( rnakozo && rnaprediction == 'm' )
446 makegrouprnait( grouprna1, singlerna, pair, s1 );
447 makegrouprnait( grouprna2, singlerna, pair, s2 );
450 if( score_check == 2 )
454 // msshrinklocalhom( pair, s1, s2, localhomtable, localhomshrink );
455 shrinklocalhom( pair, s1, s2, localhomtable, localhomshrink );
461 part_imp_match_init_strictQ( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, localhomshrink, 1 );
462 if( rnakozo ) part_imp_rnaQ( clus1, clus2, mseq1, mseq2, effarr1, effarr2, grouprna1, grouprna2, gapmap1, gapmap2, NULL );
463 for( i=length-1; i>=0; i-- ) oimpmatch += part_imp_match_out_scQ( i, i );
467 part_imp_match_init_strict( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, effarr1_kozo, effarr2_kozo, localhomshrink, 1 );
468 if( rnakozo ) part_imp_rna( clus1, clus2, mseq1, mseq2, effarr1, effarr2, grouprna1, grouprna2, gapmap1, gapmap2, NULL );
469 for( i=length-1; i>=0; i-- ) oimpmatch += part_imp_match_out_sc( i, i );
476 imp_match_init_strictQ( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, localhomshrink, 1 );
477 if( rnakozo ) imp_rnaQ( clus1, clus2, mseq1, mseq2, effarr1, effarr2, grouprna1, grouprna2, gapmap1, gapmap2, NULL );
478 for( i=length-1; i>=0; i-- ) oimpmatch += imp_match_out_scQ( i, i );
482 imp_match_init_strict( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, effarr1_kozo, effarr2_kozo, localhomshrink, 1 );
483 fprintf( stderr, "not supported\n" );
487 // fprintf( stderr, "### oimpmatch = %f\n", oimpmatch );
495 for( i=s1; i<locnjob; i++ )
497 if( !pair[s1][i] ) continue;
499 for( j=s2; j<locnjob; j++ )
501 if( !pair[s2][j] ) continue;
502 // fprintf( stderr, "i = %d, j = %d, effarr1=%f, effarr2=%f\n", i, j, effarr1[iu], effarr2[ju] );
503 tmpdouble += effarr1[iu] * effarr2[ju] * imanoten[MIN(i,j)][MAX(i,j)];
508 mscore = oimpmatch + tmpdouble;
510 else if( score_check )
513 if( RNAscoremtx == 'r' )
514 intergroup_score_gapnomi( mseq1, mseq2, effarr1, effarr2, clus1, clus2, length, &tmpdouble ); // gappick mae denaito dame
516 intergroup_score( mseq1, mseq2, effarr1, effarr2, clus1, clus2, length, &tmpdouble ); // gappick mae denaito dame
518 intergroup_score( mseq1, mseq2, effarr1, effarr2, clus1, clus2, length, &tmpdouble ); // gappick mae denaito dame
523 shrinklocalhom( pair, s1, s2, localhomtable, localhomshrink );
524 // weightimportance4( clus1, clus2, effarr1, effarr2, localhomshrink ); // >>>
530 part_imp_match_init_strictQ( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, localhomshrink, 1 );
531 if( rnakozo ) part_imp_rnaQ( clus1, clus2, mseq1, mseq2, effarr1, effarr2, grouprna1, grouprna2, gapmap1, gapmap2, NULL );
532 for( i=length-1; i>=0; i-- )
534 oimpmatch += part_imp_match_out_scQ( i, i );
535 // fprintf( stderr, "#### i=%d, initial impmatch = %f seq1 = %c, seq2 = %c\n", i, oimpmatch, mseq1[0][i], mseq2[0][i] );
540 part_imp_match_init_strict( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, effarr1_kozo, effarr2_kozo, localhomshrink, 1 );
541 if( rnakozo ) part_imp_rna( clus1, clus2, mseq1, mseq2, effarr1, effarr2, grouprna1, grouprna2, gapmap1, gapmap2, NULL );
542 for( i=length-1; i>=0; i-- )
544 oimpmatch += part_imp_match_out_sc( i, i );
545 // fprintf( stderr, "#### i=%d, initial impmatch = %f seq1 = %c, seq2 = %c\n", i, oimpmatch, mseq1[0][i], mseq2[0][i] );
548 // fprintf( stderr, "otmpmatch = %f\n", oimpmatch );
554 imp_match_init_strictQ( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, localhomshrink, 1 );
555 if( rnakozo ) imp_rnaQ( clus1, clus2, mseq1, mseq2, effarr1, effarr2, grouprna1, grouprna2, gapmap1, gapmap2, NULL );
557 for( i=length-1; i>=0; i-- )
559 oimpmatch += imp_match_out_scQ( i, i );
560 // fprintf( stderr, "#### i=%d, initial impmatch = %f\n", i, oimpmatch );
565 imp_match_init_strict( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, effarr1_kozo, effarr2_kozo, localhomshrink, 1 );
567 fprintf( stderr, "not supported\n" );
570 for( i=length-1; i>=0; i-- )
572 oimpmatch += imp_match_out_sc( i, i );
573 // fprintf( stderr, "#### i=%d, initial impmatch = %f seq1 = %c, seq2 = %c\n", i, oimpmatch, mseq1[0][i], mseq2[0][i] );
576 // fprintf( stderr, "otmpmatch = %f\n", oimpmatch );
578 // fprintf( stderr, "#### initial impmatch = %f\n", oimpmatch );
586 // fprintf( stderr, "#### tmpdouble = %f\n", tmpdouble );
587 mscore = (double)oimpmatch + tmpdouble;
591 // fprintf( stderr, "score_check = %d\n", score_check );
592 /* atode kousokuka */
593 intergroup_score( mseq1, mseq2, effarr1, effarr2, clus1, clus2, length, &tmpdouble );
595 /* atode kousokuka */
600 shrinklocalhom( pair, s1, s2, localhomtable, localhomshrink );
605 part_imp_match_init_strictQ( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, localhomshrink, 1 );
606 if( rnakozo ) part_imp_rnaQ( clus1, clus2, mseq1, mseq2, effarr1, effarr2, grouprna1, grouprna2, gapmap1, gapmap2, NULL );
610 part_imp_match_init_strict( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, effarr1_kozo, effarr2_kozo, localhomshrink, 1 );
611 if( rnakozo ) part_imp_rna( clus1, clus2, mseq1, mseq2, effarr1, effarr2, grouprna1, grouprna2, gapmap1, gapmap2, NULL );
618 imp_match_init_strictQ( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, localhomshrink, 1 );
619 if( rnakozo ) imp_rnaQ( clus1, clus2, mseq1, mseq2, effarr1, effarr2, grouprna1, grouprna2, gapmap1, gapmap2, NULL );
623 imp_match_init_strict( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, effarr1_kozo, effarr2_kozo, localhomshrink, 1 );
624 fprintf( stderr, "Not supported\n" );
637 imp_match_init_strictQ( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, localhomshrink, 1 );
638 for( i=length-1; i>=0; i-- )
640 oimpmatch += imp_match_out_scQ( i, i );
641 // fprintf( stderr, "#### i=%d, initial impmatch = %f seq1 = %c, seq2 = %c\n", i, oimpmatch, mseq1[0][i], mseq2[0][i] );
646 imp_match_init_strict( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, effarr1_kozo, effarr2_kozo, localhomshrink, 1 );
647 for( i=length-1; i>=0; i-- )
649 oimpmatch += imp_match_out_sc( i, i );
650 // fprintf( stderr, "#### i=%d, initial impmatch = %f seq1 = %c, seq2 = %c\n", i, oimpmatch, mseq1[0][i], mseq2[0][i] );
657 naivescore0 = naivepairscore( clus1, clus2, mseq1, mseq2, effarr1, effarr2, penalty ) + oimpmatch;
658 else if( alg == 'Q' )
659 naivescore0 = naiveQpairscore( clus1, clus2, mseq1, mseq2, effarr1, effarr2, penalty ) + oimpmatch;
660 else if( alg == 'R' )
661 naivescore0 = naiveRpairscore( clus1, clus2, mseq1, mseq2, effarr1, effarr2, penalty ) + oimpmatch;
664 // if( rnakozo ) foldalignedrna( clus1, clus2, mseq1, mseq2, effarr1, effarr2, rnapairboth );
666 // if( !use_fft && !rnakozo )
669 commongappick_record( clus1, mseq1, gapmap1 );
670 commongappick_record( clus2, mseq2, gapmap2 );
674 fprintf( stderr, "##### mscore = %f\n", mscore );
680 fprintf( trap_g, "\nSTEP%d-%d-%d\n", iterate+1, l+1, k );
681 fprintf( trap_g, "group1 = %s\n", indication1 );
682 fprintf( trap_g, "group2 = %s\n", indication2 );
688 printf( "STEP %d-%d-%d\n", iterate, l, k );
689 for( i=0; i<clus2; i++ ) printf( "%f ", effarr2[i] );
692 if( constraint == 2 )
697 // part_imp_match_init_strictQ( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, localhomshrink, 1 );
699 // part_imp_match_init_strict( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, effarr1_kozo, effarr2_kozo, localhomshrink, 1 );
700 Falign_localhom( mseq1, mseq2, effarr1, effarr2, clus1, clus2, alloclen, localhomshrink, &impmatch, gapmap1, gapmap2 );
701 // fprintf( stderr, "##### impmatch = %f\n", impmatch );
708 // imp_match_init_strictQ( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, localhomshrink, 1 ); // Ichijiteki, gapmap wo tsukuttakara iranai.
709 // if( rnakozo ) imp_rnaQ( clus1, clus2, mseq1, mseq2, effarr1, effarr2, gapmap1, gapmap2, rnapairboth );
711 wm = Q__align_gapmap( mseq1, mseq2, effarr1, effarr2, clus1, clus2, alloclen, localhomshrink, &impmatch, NULL, NULL, NULL, NULL, gapmap1, gapmap2 );
712 fprintf( stderr, "wm = %f\n", wm );
714 fprintf( stderr, "##### impmatch = %f->%f\n", oimpmatch, impmatch );
715 naivescore1 = naiveQpairscore( clus1, clus2, mseq1, mseq2, effarr1, effarr2, penalty ) + impmatch;
716 fprintf( stderr, "##### naivscore1 = %f\n", naivescore1 );
718 if( naivescore1 > naivescore0 )
719 fprintf( stderr, "%d-%d, ns: UP!\n", clus1, clus2 );
720 else if( naivescore1 < naivescore0 )
721 fprintf( stderr, "%d-%d, ns: DOWN! %f->%f\n", clus1, clus2, naivescore0, naivescore1 );
723 fprintf( stderr, "%d-%d, ns: IDENTICAL\n", clus1, clus2 );
725 if( abs( wm - naivescore1 ) > 100 )
727 // fprintf( stderr, "WARNING, wm=%f but naivescore=%f\n", wm, naivescore1 );
729 // for( i=0; i<clus1; i++ ) printf( ">\n%s\n", mseq1[i] );
730 // for( i=0; i<clus2; i++ ) printf( ">\n%s\n", mseq2[i] );
736 else if( alg == 'R' )
739 imp_match_init_strictR( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, localhomshrink, 1 ); // Ichijiteki, gapmap ha mada
740 wm = R__align( mseq1, mseq2, effarr1, effarr2, clus1, clus2, alloclen, localhomshrink, &impmatch, NULL, NULL, NULL, NULL );
741 // fprintf( stderr, "##### impmatch = %f->%f\n", oimpmatch, impmatch );
742 naivescore1 = naiveRpairscore( clus1, clus2, mseq1, mseq2, effarr1, effarr2, penalty ) + impmatch;
743 // fprintf( stderr, "##### naivscore1 = %f\n", naivescore1 );
745 if( naivescore1 > naivescore0 )
746 fprintf( stderr, "%d-%d, ns: %f->%f UP!\n", clus1, clus2, naivescore0, naivescore1 );
747 else if( naivescore1 < naivescore0 )
748 fprintf( stderr, "%d-%d, ns: DOWN! %f->%f\n", clus1, clus2, naivescore0, naivescore1 );
750 fprintf( stderr, "%d-%d, ns: IDENTICAL\n", clus1, clus2 );
752 if( abs( wm - naivescore1 ) > 100 )
754 // fprintf( stderr, "WARNING, wm=%f but naivescore=%f\n", wm, naivescore1 );
756 for( i=0; i<clus1; i++ ) printf( ">\n%s\n", mseq1[i] );
757 for( i=0; i<clus2; i++ ) printf( ">\n%s\n", mseq2[i] );
762 else if( alg == 'H' )
765 imp_match_init_strictH( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, localhomshrink, 1 ); // Ichijiteki, gapmap ha mada
766 wm = H__align( mseq1, mseq2, effarr1, effarr2, clus1, clus2, alloclen, localhomshrink, &impmatch, NULL, NULL, NULL, NULL );
767 fprintf( stderr, "##### impmatch = %f->%f\n", oimpmatch, impmatch );
768 naivescore1 = naivepairscore( clus1, clus2, mseq1, mseq2, effarr1, effarr2, penalty ) + impmatch;
769 fprintf( stderr, "##### naivscore1 = %f\n", naivescore1 );
771 if( naivescore1 > naivescore0 )
772 fprintf( stderr, "%d-%d, ns: UP!\n", clus1, clus2 );
773 else if( naivescore1 < naivescore0 )
774 fprintf( stderr, "%d-%d, ns: DOWN! %f->%f\n", clus1, clus2, naivescore0, naivescore1 );
776 fprintf( stderr, "%d-%d, ns: IDENTICAL\n", clus1, clus2 );
778 if( abs( wm - naivescore1 ) > 100 )
780 // fprintf( stderr, "WARNING, totalwm=%f but naivescore=%f\n", totalwm, naivescore1 );
781 // for( i=0; i<clus1; i++ ) printf( ">\n%s\n", mseq1[i] );
782 // for( i=0; i<clus2; i++ ) printf( ">\n%s\n", mseq2[i] );
789 // imp_match_init_strict( NULL, clus1, clus2, length, length, mseq1, mseq2, effarr1, effarr2, effarr1_kozo, effarr2_kozo, localhomshrink, 1 );
790 A__align_gapmap( mseq1, mseq2, effarr1, effarr2, clus1, clus2, alloclen, localhomshrink, &impmatch, gapmap1, gapmap2 );
791 // fprintf( stderr, "##### impmatch = %f\n", impmatch );
798 totalwm = Falign( mseq1, mseq2, effarr1, effarr2, clus1, clus2, alloclen, &intdum );
800 // fprintf( stderr, "totalwm = %f\n", totalwm );
804 fprintf( stderr, "totalwm = %f\n", totalwm );
805 naivescore1 = naiveQpairscore( clus1, clus2, mseq1, mseq2, effarr1, effarr2, penalty );
807 if( naivescore1 > naivescore0 )
808 fprintf( stderr, "%d-%d, ns: UP!\n", clus1, clus2 );
809 else if( naivescore1 < naivescore0 )
810 fprintf( stderr, "%d-%d, ns: DOWN! %f->%f\n", clus1, clus2, naivescore0, naivescore1 );
812 fprintf( stderr, "%d-%d, ns: IDENTICAL\n", clus1, clus2 );
814 if( totalwm != 0.0 && abs( totalwm - naivescore1 ) > 100 )
816 // fprintf( stderr, "WARNING, totalwm=%f but naivescore=%f\n", totalwm, naivescore1 );
817 // for( i=0; i<clus1; i++ ) printf( ">\n%s\n", mseq1[i] );
818 // for( i=0; i<clus2; i++ ) printf( ">\n%s\n", mseq2[i] );
826 fprintf( stderr, "totalwm = %f\n", totalwm );
827 naivescore1 = naiveRpairscore( clus1, clus2, mseq1, mseq2, effarr1, effarr2, penalty );
829 if( naivescore1 > naivescore0 )
830 fprintf( stderr, "%d-%d, ns: UP!\n", clus1, clus2 );
831 else if( naivescore1 < naivescore0 )
832 fprintf( stderr, "%d-%d, ns: DOWN! %f->%f\n", clus1, clus2, naivescore0, naivescore1 );
834 fprintf( stderr, "%d-%d, ns: IDENTICAL\n", clus1, clus2 );
836 if( totalwm != 0.0 && abs( totalwm - naivescore1 ) > 100 )
838 // fprintf( stderr, "WARNING, totalwm=%f but naivescore=%f\n", totalwm, naivescore1 );
839 // for( i=0; i<clus1; i++ ) printf( ">\n%s\n", mseq1[i] );
840 // for( i=0; i<clus2; i++ ) printf( ">\n%s\n", mseq2[i] );
850 MSalignmm( mseq1, mseq2, effarr1, effarr2, clus1, clus2, alloclen, NULL, NULL, NULL, NULL );
852 else if( alg == 'A' )
854 A__align( mseq1, mseq2, effarr1, effarr2, clus1, clus2, alloclen, NULL, &impmatch, NULL, NULL, NULL, NULL );
856 else if( alg == 'Q' )
859 wm = Q__align( mseq1, mseq2, effarr1, effarr2, clus1, clus2, alloclen, NULL, &impmatch, NULL, NULL, NULL, NULL );
860 fprintf( stderr, "wm = %f\n", wm );
861 fprintf( stderr, "impmatch = %f\n", impmatch );
862 naivescore1 = naiveQpairscore( clus1, clus2, mseq1, mseq2, effarr1, effarr2, penalty );
864 if( naivescore1 > naivescore0 )
865 fprintf( stderr, "%d-%d, ns: UP!\n", clus1, clus2 );
866 else if( naivescore1 < naivescore0 )
867 fprintf( stderr, "%d-%d, ns: DOWN!\n", clus1, clus2 );
869 fprintf( stderr, "%d-%d, ns: IDENTICAL\n", clus1, clus2 );
871 if( abs( wm - naivescore1 ) > 100 )
873 // fprintf( stderr, "WARNING, wm=%f but naivescore=%f\n", wm, naivescore1 );
876 // for( i=0; i<clus1; i++ ) printf( ">\n%s\n", mseq1[i] );
877 // for( i=0; i<clus2; i++ ) printf( ">\n%s\n", mseq2[i] );
882 else if( alg == 'R' )
885 wm = R__align( mseq1, mseq2, effarr1, effarr2, clus1, clus2, alloclen, NULL, &impmatch, NULL, NULL, NULL, NULL );
886 naivescore1 = naiveRpairscore( clus1, clus2, mseq1, mseq2, effarr1, effarr2, penalty );
888 if( naivescore1 > naivescore0 )
889 fprintf( stderr, "%d-%d, ns: UP!\n", clus1, clus2 );
890 else if( naivescore1 < naivescore0 )
891 fprintf( stderr, "%d-%d, ns: DOWN! %f->%f\n", clus1, clus2, naivescore0, naivescore1 );
893 fprintf( stderr, "%d-%d, ns: IDENTICAL\n", clus1, clus2 );
895 if( abs( wm - naivescore1 ) > 100 )
897 // fprintf( stderr, "WARNING, wm=%f but naivescore=%f\n", wm, naivescore1 );
900 // for( i=0; i<clus1; i++ ) printf( ">\n%s\n", mseq1[i] );
901 // for( i=0; i<clus2; i++ ) printf( ">\n%s\n", mseq2[i] );
906 else if( alg == 'H' )
909 wm = H__align( mseq1, mseq2, effarr1, effarr2, clus1, clus2, alloclen, NULL, &impmatch, NULL, NULL, NULL, NULL );
910 naivescore1 = naivepairscore( clus1, clus2, mseq1, mseq2, effarr1, effarr2, penalty );
912 if( naivescore1 > naivescore0 )
913 fprintf( stderr, "%d-%d, ns: UP!\n", clus1, clus2 );
914 else if( naivescore1 < naivescore0 )
916 fprintf( stderr, "%d-%d, ns: DOWN!\n", clus1, clus2 );
919 fprintf( stderr, "%d-%d, ns: IDENTICAL\n", clus1, clus2 );
922 if( abs( wm - naivescore1 ) > 100 )
925 for( i=0; i<clus1; i++ ) printf( ">\n%s\n", mseq1[i] );
926 for( i=0; i<clus2; i++ ) printf( ">\n%s\n", mseq2[i] );
931 else if( alg == 'a' )
933 Aalign( mseq1, mseq2, effarr1, effarr2, clus1, clus2, alloclen );
935 else ErrorExit( "Sorry!" );
937 // fprintf( stderr, "## impmatch = %f\n", impmatch );
941 extern double DSPscore();
942 extern double SSPscore();
947 pre = SSPscore( locnjob, bseq );
948 cur = SSPscore( locnjob, aseq );
950 pre = DSPscore( locnjob, bseq );
951 cur = DSPscore( locnjob, aseq );
953 fprintf( stderr, "Previous Sscore = %f\n", pre );
954 fprintf( stderr, "Currnet Sscore = %f\n\n", cur );
957 // fprintf( stderr, "## impmatch = %f\n", impmatch );
958 identity = !strcmp( aseq[s1], bseq[s1] );
959 identity *= !strcmp( aseq[s2], bseq[s2] );
962 /* Bug? : idnetitcal but score change when scoreing mtx != JTT */
964 length = strlen( mseq1[0] );
969 if( !devide ) fprintf( trap_g, "tscore = %f identical.\n", tscore );
970 fprintf( stderr, " identical." );
977 if( constraint == 2 )
980 if( RNAscoremtx == 'r' )
981 intergroup_score_gapnomi( mseq1, mseq2, effarr1, effarr2, clus1, clus2, length, &tmpdouble );
983 intergroup_score( mseq1, mseq2, effarr1, effarr2, clus1, clus2, length, &tmpdouble );
985 intergroup_score( mseq1, mseq2, effarr1, effarr2, clus1, clus2, length, &tmpdouble );
988 tscore = impmatch + tmpdouble;
990 // fprintf( stderr, "tmpdouble=%f, impmatch = %f -> %f, tscore = %f\n", tmpdouble, oimpmatch, impmatch, tscore );
994 intergroup_score( mseq1, mseq2, effarr1, effarr2, clus1, clus2, length, &tmpdouble );
997 // fprintf( stderr, "#######ii=%d, iterate=%d score = %f -> %f \n", ii, iterate , mscore, tscore );
1000 fprintf( stderr, "%s\n", mseq1[i] );
1001 fprintf( stderr, "+++++++\n" );
1002 for( i=0; i<1; i++ )
1003 fprintf( stderr, "%s\n", mseq2[i] );
1009 tscore = mscore + 1.0;
1011 // fprintf( stderr, "in line 705, tscore=%f\n", tscore );
1012 // for( i=0; i<length; i++ )
1013 // tscore = tscore + (double)mseq1[0][i];
1014 // mscore = tscore - 1.0;
1017 if( isnan( mscore ) )
1019 fprintf( stderr, "\n\nmscore became NaN\n" );
1022 if( isnan( tscore ) )
1024 fprintf( stderr, "\n\ntscore became NaN\n" );
1030 // fprintf( stderr, "@@@@@ mscore,tscore = %f,%f\n", mscore, tscore );
1032 if( tscore > mscore - cut/100.0*mscore )
1034 writePre( locnjob, name, nlen, aseq, 0 );
1035 for( i=0; i<locnjob; i++ ) strcpy( bseq[i], aseq[i] );
1036 if( score_check == 2 )
1040 for( i=0; i<locnjob-1; i++ )
1041 for( j=i+1; j<locnjob; j++ )
1042 intergroup_score( bseq+i, bseq+j, effarr1, effarr2, 1, 1, length, imanoten[i]+j );
1046 fprintf( stderr, "tscore = %f mscore = %f accepted.\n", tscore, mscore );
1048 fprintf( stderr, " accepted." );
1055 fprintf( stderr, "tscore = %f mscore = %f rejected.\n", tscore, mscore );
1057 fprintf( stderr, " rejected." );
1062 fprintf( stderr, "\r" );
1065 history[iterate][l][k] = (float)tscore;
1067 // fprintf( stderr, "tscore = %f\n", tscore );
1069 if( converged >= locnjob * 2 )
1071 fprintf( trap_g, "Converged.\n\n" );
1072 fprintf( stderr, "\nConverged.\n\n" );
1077 /* oscillation check */
1079 for( ii=iterate-2; ii>=0; ii-=2 )
1081 if( (float)tscore == history[ii][l][k] )
1087 if( ( oscillating && !cooling ) || ( oscillating && cut < 0.001 && cooling ) )
1089 fprintf( trap_g, "Oscillating.\n" );
1090 fprintf( stderr, "\nOscillating.\n\n" );
1091 #if 1 /* hujuubun */
1095 } /* if( iterate ) */
1098 } /* for( iterate ) */