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] ) );
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;
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] )
/* 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;
{
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;
}