#include "mltaln.h" #define DEBUG 0 static char *whereiscontrafold; void unknown_n( char *out, char *in ) { while( *in ) { if( *in == 'a' || *in == 'A' ) *out = 'A'; else if( *in == 't' || *in == 'T' || *in == 'u' || *in == 'U' ) *out = 'U'; else if( *in == 'g' || *in == 'G' ) *out = 'G'; else if( *in == 'c' || *in == 'C' ) *out = 'C'; else if( *in == '-' ) *out = '-'; else *out = 'N'; out++; in++; } *out = 0; } void outcontrafold( FILE *fp, RNApair **pairprob, int length ) { int i; RNApair *pt; for( i=0; ibestpos!=-1; pt++ ) { if( pt->bestpos > i ) fprintf( fp, "%d %d %f\n", i, pt->bestpos, pt->bestscore ); } } #if 1 static void readcontrafold( FILE *fp, RNApair **pairprob, int length ) { char gett[10000]; int *pairnum; char *pt; int i; int left, right; float prob; pairnum = (int *)calloc( length, sizeof( int ) ); for( i=0; i 0 && (*++argv)[0] == '-' ) { while ( (c = *++argv[0]) ) { switch( c ) { case 'i': inputfile = *++argv; fprintf( stderr, "inputfile = %s\n", inputfile ); --argc; goto nextoption; case 'd': whereiscontrafold = *++argv; fprintf( stderr, "whereiscontrafold = %s\n", whereiscontrafold ); --argc; goto nextoption; default: fprintf( stderr, "illegal option %c\n", c ); argc = 0; break; } } nextoption: ; } if( argc != 0 ) { fprintf( stderr, "options: Check source file !\n" ); exit( 1 ); } } int main( int argc, char *argv[] ) { static char com[10000]; static int *nlen; int left, right; int res; static char **name, **seq, **nogap; static int **gapmap; static int *order; int i, j; FILE *infp; RNApair ***pairprob; RNApair **alnpairprob; RNApair *pairprobpt; RNApair *pt; int *alnpairnum; float prob; int adpos; arguments( argc, argv ); if( inputfile ) { infp = fopen( inputfile, "r" ); if( !infp ) { fprintf( stderr, "Cannot open %s\n", inputfile ); exit( 1 ); } } else infp = stdin; if( !whereiscontrafold ) whereiscontrafold = ""; getnumlen( infp ); rewind( infp ); if( dorp != 'd' ) { fprintf( stderr, "nuc only\n" ); exit( 1 ); } seq = AllocateCharMtx( njob, nlenmax*2+1 ); nogap = AllocateCharMtx( njob, nlenmax*2+1 ); gapmap = AllocateIntMtx( njob, nlenmax*2+1 ); order = AllocateIntVec( njob ); name = AllocateCharMtx( njob, B+1 ); nlen = AllocateIntVec( njob ); pairprob = (RNApair ***)calloc( njob, sizeof( RNApair ** ) ); alnpairprob = (RNApair **)calloc( nlenmax, sizeof( RNApair * ) ); alnpairnum = AllocateIntVec( nlenmax ); for( i=0; iin\n%s\n", nogap[i] ); fclose( infp ); #if 0 // contrafold v1 sprintf( com, "env PATH=%s contrafold predict _contrafoldin --posteriors 0.01 > _contrafoldout", whereiscontrafold ); #else // contrafold v2 sprintf( com, "env PATH=%s contrafold predict _contrafoldin --posteriors 0.01 _contrafoldout", whereiscontrafold ); #endif res = system( com ); if( res ) { fprintf( stderr, "error in contrafold\n" ); fprintf( stderr, "=================================================================\n" ); fprintf( stderr, "=================================================================\n" ); fprintf( stderr, "==\n" ); fprintf( stderr, "== This version of MAFFT supports CONTRAfold v2.02.\n" ); fprintf( stderr, "== If you have a lower version of CONTRAfold installed in the\n" ); fprintf( stderr, "== %s directory,\n", whereiscontrafold ); fprintf( stderr, "== please update it!\n" ); fprintf( stderr, "==\n" ); fprintf( stderr, "=================================================================\n" ); fprintf( stderr, "=================================================================\n" ); exit( 1 ); } infp = fopen( "_contrafoldout", "r" ); readcontrafold( infp, pairprob[i], nlenmax ); fclose( infp ); fprintf( stdout, ">%d\n", i ); outcontrafold( stdout, pairprob[i], nlenmax ); } for( i=0; ibestpos!=-1; pairprobpt++ ) { left = gapmap[i][j]; right = gapmap[i][pairprobpt->bestpos]; prob = pairprobpt->bestscore; for( pt=alnpairprob[left]; pt->bestpos!=-1; pt++ ) if( pt->bestpos == right ) break; if( pt->bestpos == -1 ) { alnpairprob[left] = (RNApair *)realloc( alnpairprob[left], (alnpairnum[left]+2) * sizeof( RNApair ) ); adpos = alnpairnum[left]; alnpairnum[left]++; alnpairprob[left][adpos].bestscore = 0.0; alnpairprob[left][adpos].bestpos = right; alnpairprob[left][adpos+1].bestscore = -1.0; alnpairprob[left][adpos+1].bestpos = -1; pt = alnpairprob[left]+adpos; } else adpos = pt-alnpairprob[left]; pt->bestscore += prob; if( pt->bestpos != right ) { fprintf( stderr, "okashii!\n" ); exit( 1 ); } // fprintf( stderr, "adding %d-%d, %f\n", left, right, prob ); } } return( 0 ); #if 0 fprintf( stdout, "result=\n" ); for( i=0; ibestpos!=-1; pairprobpt++ ) { pairprobpt->bestscore /= (float)njob; left = i; right = pairprobpt->bestpos; prob = pairprobpt->bestscore; fprintf( stdout, "%d-%d, %f\n", left, right, prob ); } return( 0 ); #endif }