JWS-112 Bumping version of Mafft to version 7.310.
[jabaws.git] / binaries / src / mafft / core / Falign_localhom.c
index ba2dee3..061300c 100644 (file)
@@ -45,7 +45,7 @@ static void seq_vec_2( Fukusosuu *result, double *score, double incr, char *seq
        static TLS int n;
        for( ; *seq; result++ )
        {
-               n = amino_n[(int)*seq++];
+               n = amino_n[(unsigned char)*seq++];
                if( n < 20 && n >= 0 ) result->R += incr * score[n];
 #if 0
                fprintf( stderr, "n=%d, score=%f, inc=%f R=%f\n",n,  score[n], incr * score[n], result->R );
@@ -59,7 +59,7 @@ static void seq_vec_3( Fukusosuu **result, double incr, char *seq )
        int n;
        for( i=0; *seq; i++ )
        {
-               n = amino_n[(int)*seq++];
+               n = amino_n[(unsigned char)*seq++];
                if( n < n20or4or2 && n >= 0 ) result[n][i].R += incr;
        }
 }
@@ -160,11 +160,13 @@ static void mymergesort( int first, int last, Segment **seg )
 }
 
 
-float Falign_localhom( char  **seq1, char  **seq2, 
+double Falign_localhom( int **whichmtx, double ***scoringmatrices, double **n_dynamicmtx,
+                         char  **seq1, char  **seq2, 
                          double *eff1, double *eff2, 
+                         double **eff1s, double **eff2s,
                          int    clus1, int    clus2,
                          int alloclen, 
-                          LocalHom ***localhom, float *totalimpmatch,
+                          LocalHom ***localhom, double *totalimpmatch,
                           int *gapmap1, int *gapmap2,
                                int *chudanpt, int chudanref, int *chudanres )
 {
@@ -207,8 +209,8 @@ float Falign_localhom( char  **seq1, char  **seq2,
        int count, count0;
        int len1, len2;
        int totallen;
-       float totalscore;
-       float impmatch;
+       double totalscore;
+       double impmatch;
 
        extern Fukusosuu   *AllocateFukusosuuVec();
        extern Fukusosuu  **AllocateFukusosuuMtx();
@@ -219,12 +221,14 @@ float Falign_localhom( char  **seq1, char  **seq2,
                {
 //                     fprintf( stderr, "Freeing localarrays in Falign\n" );
                        localalloclen = 0;
+                       crossscoresize = 0;
                        mymergesort( 0, 0, NULL );
                        alignableReagion( 0, 0, NULL, NULL, NULL, NULL, NULL );
                        fft( 0, NULL, 1 );
-                       A__align( NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0 );
-                       G__align11( NULL, NULL, 0, 0, 0 );
+//                     A__align( NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, -1, -1 ); // iru?
+                       G__align11( NULL, NULL, NULL, 0, 0, 0 );
                        partA__align( NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL );
+                       partA__align_variousdist( NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL );
                        blockAlign2( NULL, NULL, NULL, NULL, NULL, NULL );
                        if( crossscore ) FreeDoubleMtx( crossscore );
                        FreeCharMtx( result1 );
@@ -802,13 +806,13 @@ system( "less seqVec2 < /dev/tty > /dev/tty" );
                        case( 'a' ):
                                totalscore += Aalign( tmpres1, tmpres2, eff1, eff2, clus1, clus2, alloclen );
                                break;
-                       case( 'Q' ):
-                               totalscore += partQ__align( tmpres1, tmpres2, eff1, eff2, clus1, clus2, alloclen, localhom, &impmatch, cut1[i], cut1[i+1]-1, cut2[i], cut2[i+1]-1, gapmap1, gapmap2, sgap1, sgap2, egap1, egap2 );
-                               *totalimpmatch += impmatch;
-//                             fprintf( stderr, "*totalimpmatch in Falign_localhom = %f\n", *totalimpmatch );
-                               break;
                        case( 'A' ):
-                               totalscore += partA__align( tmpres1, tmpres2, eff1, eff2, clus1, clus2, alloclen, localhom, &impmatch, cut1[i], cut1[i+1]-1, cut2[i], cut2[i+1]-1, gapmap1, gapmap2, sgap1, sgap2, egap1, egap2, chudanpt, chudanref, chudanres );
+                               if( scoringmatrices ) // called by tditeration.c 
+                               {
+                                       totalscore += partA__align_variousdist( whichmtx, scoringmatrices, NULL, tmpres1, tmpres2, eff1, eff2, eff1s, eff2s, clus1, clus2, alloclen, localhom, &impmatch, cut1[i], cut1[i+1]-1, cut2[i], cut2[i+1]-1, gapmap1, gapmap2, sgap1, sgap2, egap1, egap2, chudanpt, chudanref, chudanres );
+                               }
+                               else
+                                       totalscore += partA__align( tmpres1, tmpres2, eff1, eff2, clus1, clus2, alloclen, localhom, &impmatch, cut1[i], cut1[i+1]-1, cut2[i], cut2[i+1]-1, gapmap1, gapmap2, sgap1, sgap2, egap1, egap2, chudanpt, chudanref, chudanres );
                                *totalimpmatch += impmatch;
 //                             fprintf( stderr, "*totalimpmatch in Falign_localhom = %f\n", *totalimpmatch );