#include "mltaln.h" #include #include #define DEBUG 0 #define TEST 0 int howmanyx( char *s ) { int val = 0; if( scoremtx == -1 ) { do { if( !strchr( "atgcuATGCU", *s ) ) val++; } while( *++s ); } else { do { if( !strchr( "ARNDCQEGHILKMFPSTWYV", *s ) ) val++; } while( *++s ); } return( val ); } void arguments( int argc, char *argv[] ) { int c; inputfile = NULL; disopt = 0; divpairscore = 0; while( --argc > 0 && (*++argv)[0] == '-' ) { while ( (c = *++argv[0]) ) { switch( c ) { case 'i': inputfile = *++argv; fprintf( stderr, "inputfile = %s\n", inputfile ); --argc; goto nextoption; case 'I': disopt = 1; break; default: fprintf( stderr, "illegal option %c\n", c ); argc = 0; break; } } nextoption: ; } if( argc != 0 ) { fprintf( stderr, "options: -i\n" ); exit( 1 ); } } int main( int argc, char *argv[] ) { int ktuple; int i, j; FILE *infp; FILE *hat2p; FILE *hat3p; char **seq = NULL; // by D.Mathog char **seq1; static char name[M][B]; static char name1[M][B]; static int nlen1[M]; double **mtx; double **mtx2; static int nlen[M]; char b[B]; double max; char com[1000]; int opt[M]; int res; char *home; char queryfile[B]; char datafile[B]; char fastafile[B]; char hat2file[B]; int pid = (int)getpid(); LocalHom **localhomtable, *tmpptr; #if 1 home = getenv( "HOME" ); #else /* $HOME wo tsukau to fasta ni watasu hikisuu ga afureru */ home = NULL; #endif #if DEBUG if( home ) fprintf( stderr, "home = %s\n", home ); #endif if( !home ) home = ""; sprintf( queryfile, "%s/tmp/query-%d", home, pid ); sprintf( datafile, "%s/tmp/data-%d", home, pid ); sprintf( fastafile, "%s/tmp/fasta-%d", home, pid ); sprintf( hat2file, "hat2-%d", pid ); arguments( argc, argv ); if( inputfile ) { infp = fopen( inputfile, "r" ); if( !infp ) { fprintf( stderr, "Cannot open %s\n", inputfile ); exit( 1 ); } } else infp = stdin; #if 0 PreRead( infp, &njob, &nlenmax ); #else dorp = NOTSPECIFIED; getnumlen( infp ); #endif if( dorp == 'd' ) { scoremtx = -1; pamN = NOTSPECIFIED; } else { nblosum = 62; scoremtx = 1; } constants( njob, seq ); rewind( infp ); seq = AllocateCharMtx( njob, nlenmax+1 ); seq1 = AllocateCharMtx( 2, nlenmax+1 ); mtx = AllocateDoubleMtx( njob, njob ); mtx2 = AllocateDoubleMtx( njob, njob ); localhomtable = (LocalHom **)calloc( njob, sizeof( LocalHom *) ); for( i=0; i %s", queryfile, datafile, fastafile ); else sprintf( com, "blastall -G 10 -E 1 -e 1e10 -p blastp -m 7 -i %s -d %s > %s", queryfile, datafile, fastafile ); res = system( com ); if( res ) ErrorExit( "error in fasta" ); hat2p = fopen( fastafile, "r" ); if( hat2p == NULL ) ErrorExit( "file 'fasta.$$' does not exist\n" ); res = ReadBlastm7( hat2p, mtx[i], i, name1, localhomtable[i] ); fclose( hat2p ); #if 0 for( j=0; jnext ) { if( tmpptr->opt == -1.0 ) continue; // fprintf( stderr, "%d %d %d %6.3f %d %d %d %d %p\n", i, j, tmpptr->overlapaa, tmpptr->opt, tmpptr->start1, tmpptr->end1, tmpptr->start2, tmpptr->end2, tmpptr->next ); } } #endif if( res < njob-i+i%10 ) { fprintf( stderr, "WARNING: count (blast) = %d < %d\n", res, njob-i+i%10 ); } #if 0 { int ii, jj; if( i < njob-1 ) for( jj=i; jj j ) continue; if( mtx[j][i] > mtx[i][j] ) continue; for( tmpptr=localhomtable[i]+j; tmpptr; tmpptr=tmpptr->next ) { if( tmpptr->opt == -1.0 ) continue; fprintf( hat3p, "%d %d %d %6.3f %d %d %d %d %p\n", i, j, tmpptr->overlapaa, tmpptr->opt, tmpptr->start1, tmpptr->end1, tmpptr->start2, tmpptr->end2, (void *)tmpptr->next ); } } fclose( hat3p ); #endif for( i=0; i %s", M, M, 0, queryfile, datafile, ktuple, fastafile ); else sprintf( com, "fasta34 -z3 -m10 -Q -b%d -E%d -d%d %s %s %d > %s", M, M, 0, queryfile, datafile, ktuple, fastafile ); res = system( com ); if( res ) ErrorExit( "error in fasta" ); hat2p = fopen( fastafile, "r" ); if( hat2p == NULL ) ErrorExit( "file 'fasta.$$' does not exist\n" ); res = ReadFasta34noalign( hat2p, mtx[i], i, name1, localhomtable[i] ); fclose( hat2p ); if( res < njob - i ) { fprintf( stderr, "count (fasta34 -z 3) = %d\n", res ); exit( 1 ); } if( i == 0 ) for( j=0; j %f\n", max, i+1, j+1, mtx[i][j], mtx2[i][j] ); } } } for( i=0; i