8 int howmanyx( char *s )
15 if( !strchr( "atgcuATGCU", *s ) ) val++;
22 if( !strchr( "ARNDCQEGHILKMFPSTWYV", *s ) ) val++;
28 void arguments( int argc, char *argv[] )
34 while( --argc > 0 && (*++argv)[0] == '-' )
35 while ( c = *++argv[0] )
42 fprintf( stderr, "illegal option %c\n", c );
48 fprintf( stderr, "options: -i\n" );
53 int main( int argc, char *argv[] )
60 static char name[M][B];
61 static char name1[M][B];
76 int pid = (int)getpid();
78 home = getenv( "HOME" );
79 #else /* $HOME wo tsukau to fasta ni watasu hikisuu ga afureru */
84 if( home ) fprintf( stderr, "home = %s\n", home );
86 if( !home ) home = "";
87 sprintf( queryfile, "%s/tmp/query-%d\0", home, pid );
88 sprintf( datafile, "%s/tmp/data-%d\0", home, pid );
89 sprintf( fastafile, "%s/tmp/fasta-%d\0", home, pid );
90 sprintf( hat2file, "hat2-%d\0", pid );
92 arguments( argc, argv );
94 PreRead( stdin, &njob, &nlenmax );
100 seq = AllocateCharMtx( njob, nlenmax+1 );
101 seq1 = AllocateCharMtx( 2, nlenmax+1 );
102 mtx = AllocateDoubleMtx( njob, njob );
103 mtx2 = AllocateDoubleMtx( njob, njob );
106 FRead( stdin, name, nlen, seq );
108 readData( stdin, name, nlen, seq );
110 if( scoremtx == -1 ) ktuple = 6;
113 for( i=0; i<njob; i++ )
115 gappick0( seq1[0], seq[i] );
116 strcpy( seq[i], seq1[0] );
118 for( j=0; j<njob; j++ )
120 sprintf( name1[j], "+==========+%d \0", j );
123 hat2p = fopen( datafile, "w" );
124 if( !hat2p ) ErrorExit( "Cannot open datafile." );
125 WriteForFasta( hat2p, njob, name1, nlen1, seq );
128 for( i=0; i<njob; i++ )
131 hat2p = fopen( datafile, "w" );
132 if( !hat2p ) ErrorExit( "Cannot open datafile." );
133 WriteForFasta( hat2p, njob-i, name1+i, nlen1+i, seq+i );
140 hat2p = fopen( queryfile, "w" );
141 if( !hat2p ) ErrorExit( "Cannot open queryfile." );
142 WriteForFasta( hat2p, 1, name1+i, nlen1, seq1 );
146 sprintf( com, "fasta3 -n -Q -h -b%d -E%d -d%d %s %s %d > %s\0", M, M, 0, queryfile, datafile, ktuple, fastafile );
148 sprintf( com, "fasta3 -Q -h -b%d -E%d -d%d %s %s %d > %s\0", M, M, 0, queryfile, datafile, ktuple, fastafile );
150 if( res ) ErrorExit( "error in fasta" );
152 hat2p = fopen( fastafile, "r" );
154 ErrorExit( "file 'fasta.$$' does not exist\n" );
155 ReadFasta3( hat2p, mtx[i], njob-i, name1 );
158 for( j=0; j<njob; j++ ) opt[j] = (int)mtx[0][j];
165 if( i < njob-1 ) for( jj=i; jj<i+5; jj++ )
166 fprintf( stdout, "mtx[%d][%d] = %f\n", i+1, jj+1, mtx[i][jj] );
169 fprintf( stderr, "query : %#4d\n", i+1 );
172 for( i=0; i<njob; i++ )
177 for( j=0; j<njob; j++ )
182 for( j=0; j<njob; j++ )
184 mtx2[i][j] = ( max - mtx[MIN(i,j)][MAX(i,j)] ) / max * 2.0;
185 // fprintf( stdout, "max = %f, mtx[%d][%d] = %f -> %f\n", max, i+1, j+1, mtx[i][j], mtx2[i][j] );
189 for( i=0; i<njob-1; i++ ) for( j=i+1; j<njob; j++ )
191 // fprintf( stdout, "mtx2[%d][%d] = %f, %f\n", i+1, j+1, mtx2[i][j], mtx2[j][i] );
192 mtx2[i][j] = MIN( mtx2[i][j], mtx2[j][i] );
197 if( i < njob-1 ) for( jj=i+1; jj<njob; jj++ )
198 fprintf( stderr, "mtx2[][] = %f\n", mtx2[i][jj] );
202 for( i=0; i<njob; i++ ) name[i][0] = '=';
206 strcpy( b, name[0] );
207 sprintf( name[0], "=query====lgth=%#04d-%04d %.*s\0", nlen[0], howmanyx( seq[0] ), B-30, b );
209 strins( b, name[0] );
211 for( i=1; i<njob; i++ )
213 strcpy( b, name[i] );
214 sprintf( name[i], "=opt=%#04d=lgth=%#04d-%04d %.*s\0", opt[i], nlen[i], howmanyx( seq[i] ), B-30, b );
216 strins( b, name[i] );
221 hat2p = fopen( hat2file, "w" );
222 if( !hat2p ) ErrorExit( "Cannot open hat2." );
223 WriteHat2( hat2p, njob, name, mtx2 );
226 sprintf( com, "/bin/rm %s %s %s", queryfile, datafile, fastafile );
230 sprintf( com, ALNDIR "/supgsdl < %s\0", hat2file );
232 if( res ) ErrorExit( "error in spgsdl" );
235 sprintf( com, "mv %s hat2", hat2file );
237 if( res ) ErrorExit( "error in mv" );