JWS-112 Bumping version of Mafft to version 7.310.
[jabaws.git] / binaries / src / mafft / core / fftFunctions.c
index 927dc3f..8c6d186 100644 (file)
@@ -206,20 +206,21 @@ int alignableReagion( int    clus1, int    clus2,
 
        if( clus1 == 0 )
        {
-               FreeDoubleVec( stra ); stra = NULL;
-               FreeDoubleVec( prf1 ); prf1 = NULL;
-               FreeDoubleVec( prf2 ); prf2 = NULL;
-               FreeIntVec( hat1 ); hat1 = NULL;
-               FreeIntVec( hat2 ); hat2 = NULL;
+               if( stra ) FreeDoubleVec( stra ); stra = NULL;
+               if( prf1 ) FreeDoubleVec( prf1 ); prf1 = NULL;
+               if( prf2 ) FreeDoubleVec( prf2 ); prf2 = NULL;
+               if( hat1 ) FreeIntVec( hat1 ); hat1 = NULL;
+               if( hat2 ) FreeIntVec( hat2 ); hat2 = NULL;
+               alloclen = 0;
                return( 0 );
        }
 
        if( prf1 == NULL )
        {
-               prf1 = AllocateDoubleVec( 26 );
-               prf2 = AllocateDoubleVec( 26 );
-               hat1 = AllocateIntVec( 27 );
-               hat2 = AllocateIntVec( 27 );
+               prf1 = AllocateDoubleVec( nalphabets );
+               prf2 = AllocateDoubleVec( nalphabets );
+               hat1 = AllocateIntVec( nalphabets+1 );
+               hat2 = AllocateIntVec( nalphabets+1 );
        }
 
        len = MIN( strlen( seq1[0] ), strlen( seq2[0] ) );
@@ -244,7 +245,7 @@ int alignableReagion( int    clus1, int    clus2,
        for( i=0; i<len; i++ )
        {
                /* make prfs */
-               for( j=0; j<26; j++ )
+               for( j=0; j<nalphabets; j++ )
                {
                        prf1[j] = 0.0;
                        prf2[j] = 0.0;
@@ -255,12 +256,12 @@ int alignableReagion( int    clus1, int    clus2,
                j = clus1;
                while( j-- ) prf1[amino_n[(*seq1pt++)[i]]] += *eff1pt++;
 #else
-               for( j=0; j<clus1; j++ ) prf1[amino_n[(int)seq1[j][i]]] += eff1[j];
+               for( j=0; j<clus1; j++ ) prf1[amino_n[(unsigned char)seq1[j][i]]] += eff1[j];
 #endif
-               for( j=0; j<clus2; j++ ) prf2[amino_n[(int)seq2[j][i]]] += eff2[j];
+               for( j=0; j<clus2; j++ ) prf2[amino_n[(unsigned char)seq2[j][i]]] += eff2[j];
 
                /* make hats */
-               pre1 = pre2 = 26;
+               pre1 = pre2 = nalphabets;
                for( j=25; j>=0; j-- )
                {
                        if( prf1[j] )
@@ -279,8 +280,8 @@ int alignableReagion( int    clus1, int    clus2,
 
                /* make site score */
                stra[i] = 0.0;
-               for( k=hat1[26]; k!=-1; k=hat1[k] ) 
-                       for( j=hat2[26]; j!=-1; j=hat2[j] ) 
+               for( k=hat1[nalphabets]; k!=-1; k=hat1[k] ) 
+                       for( j=hat2[nalphabets]; j!=-1; j=hat2[j] ) 
 //                             stra[i] += n_dis[k][j] * prf1[k] * prf2[j];
                                stra[i] += n_disFFT[k][j] * prf1[k] * prf2[j];
                stra[i] /= totaleff;
@@ -400,13 +401,14 @@ void blockAlign2( int *cut1, int *cut2, Segment **seg1, Segment **seg2, double *
        {
                if( result1 )
                {
-                       free( result1 );
-                       free( result2 );
-                       free( ocut1 );
-                       free( ocut2 );
-                       FreeIntMtx( track );
-               FreeDoubleMtx( crossscore );
+                       if( result1 ) free( result1 ); result1 = NULL;
+                       if( result2 ) free( result2 ); result2 = NULL;
+                       if( ocut1 ) free( ocut1 ); ocut1 = NULL;
+                       if( ocut2 ) free( ocut2 ); ocut2 = NULL;
+                       if( track ) FreeIntMtx( track ); track = NULL;
+                       if( crossscore ) FreeDoubleMtx( crossscore ); crossscore = NULL;
                }
+               crossscoresize = 0;
                return;
        }