+++ /dev/null
-#include "mltaln.h"
-
-#define TEST 0
-
-static int treeout = 0;
-
-#ifdef enablemultithread
-typedef struct _jobtable
-{
- int i;
- int j;
-} Jobtable;
-
-typedef struct _thread_arg
-{
- int njob;
- int thread_no;
- float *selfscore;
- double **mtx;
- char **seq;
- Jobtable *jobpospt;
- pthread_mutex_t *mutex;
-} thread_arg_t;
-
-void *athread( void *arg )
-{
- thread_arg_t *targ = (thread_arg_t *)arg;
- int njob = targ->njob;
- int thread_no = targ->thread_no;
- float *selfscore = targ->selfscore;
- double **mtx = targ->mtx;
- char **seq = targ->seq;
- Jobtable *jobpospt = targ->jobpospt;
-
- int i, j;
- float ssi, ssj, bunbo;
-
- while( 1 )
- {
- pthread_mutex_lock( targ->mutex );
- j = jobpospt->j;
- i = jobpospt->i;
- j++;
- if( j == njob )
- {
- fprintf( stderr, "%4d/%4d (thread %4d), dndpre\r", i+1, njob, thread_no );
- i++;
- j = i + 1;
- if( i == njob-1 )
- {
- pthread_mutex_unlock( targ->mutex );
- return( NULL );
- }
- }
- jobpospt->j = j;
- jobpospt->i = i;
- pthread_mutex_unlock( targ->mutex );
-
- ssi = selfscore[i];
- ssj = selfscore[j];
-
- bunbo = MIN( ssi, ssj );
- if( bunbo == 0.0 )
- mtx[i][j] = 1.0;
- else
- mtx[i][j] = 1.0 - (double)naivepairscore11( seq[i], seq[j], penalty ) / bunbo;
- }
-}
-
-#endif
-
-void arguments( int argc, char *argv[] )
-{
- int c;
-
- nthread = 1;
- alg = 'X';
- fmodel = 0;
- treeout = 0;
- scoremtx = 1;
- nblosum = 62;
- dorp = NOTSPECIFIED;
- inputfile = NULL;
- ppenalty = NOTSPECIFIED; //?
- ppenalty_ex = NOTSPECIFIED; //?
- poffset = NOTSPECIFIED; //?
- kimuraR = NOTSPECIFIED;
- pamN = NOTSPECIFIED;
-
- while( --argc > 0 && (*++argv)[0] == '-' )
- {
- while ( (c = *++argv[0]) )
- {
- switch( c )
- {
- case 't':
- treeout = '1';
- break;
- case 'D':
- dorp = 'd';
- break;
- case 'a':
- fmodel = 1;
- break;
- case 'P':
- dorp = 'p';
- break;
- case 'i':
- inputfile = *++argv;
- fprintf( stderr, "inputfile = %s\n", inputfile );
- --argc;
- goto nextoption;
- case 'C':
- nthread = atoi( *++argv );
- fprintf( stderr, "nthread = %d\n", nthread );
- --argc;
- goto nextoption;
- }
- }
- nextoption:
- ;
- }
- if( argc != 0 )
- {
- fprintf( stderr, "options: Check source file !\n" );
- exit( 1 );
- }
-}
-
-int main( int argc, char **argv )
-{
- int i, j;
- char **seq;
- static char **name;
- static int nlen[M];
- float *selfscore;
- double **mtx;
- FILE *fp;
- FILE *infp;
- float ssi, ssj, bunbo;
-
-
- arguments( argc, argv );
-#ifndef enablemultithread
- nthread = 0;
-#endif
-
- if( inputfile )
- {
- infp = fopen( inputfile, "r" );
- if( !infp )
- {
- fprintf( stderr, "Cannot open %s\n", inputfile );
- exit( 1 );
- }
- }
- else
- infp = stdin;
-
-#if 0
- PreRead( stdin, &njob, &nlenmax );
-#else
- getnumlen( infp );
-#endif
- rewind( infp );
-
- seq = AllocateCharMtx( njob, nlenmax+1 );
- name = AllocateCharMtx( njob, B+1 );
- mtx = AllocateDoubleMtx( njob, njob );
- selfscore = AllocateFloatVec( njob );
-
-#if 0
- FRead( stdin, name, nlen, seq );
-#else
- readData_pointer( infp, name, nlen, seq );
-#endif
- fclose( infp );
-
- constants( njob, seq );
-
-#if 0
- for( i=0; i<njob-1; i++ )
- {
- fprintf( stderr, "%4d/%4d\r", i+1, njob );
- for( j=i+1; j<njob; j++ )
- mtx[i][j] = (double)substitution_hosei( seq[i], seq[j] );
-// fprintf( stderr, "i=%d,j=%d, l=%d &&& %f\n", i, j, nlen[0], mtx[i][j] );
- }
-#else // 061003
- for( i=0; i<njob; i++ )
- {
- selfscore[i] = (float)naivepairscore11( seq[i], seq[i], penalty );
-
- }
-#ifdef enablemultithread
- if( nthread > 0 )
- {
- thread_arg_t *targ;
- Jobtable jobpos;
- pthread_t *handle;
- pthread_mutex_t mutex;
-
- jobpos.i = 0;
- jobpos.j = 0;
-
- targ = calloc( nthread, sizeof( thread_arg_t ) );
- handle = calloc( nthread, sizeof( pthread_t ) );
- pthread_mutex_init( &mutex, NULL );
-
- for( i=0; i<nthread; i++ )
- {
- targ[i].thread_no = i;
- targ[i].njob = njob;
- targ[i].selfscore = selfscore;
- targ[i].mtx = mtx;
- targ[i].seq = seq;
- targ[i].jobpospt = &jobpos;
- targ[i].mutex = &mutex;
-
- pthread_create( handle+i, NULL, athread, (void *)(targ+i) );
- }
-
- for( i=0; i<nthread; i++ )
- {
- pthread_join( handle[i], NULL );
- }
- pthread_mutex_destroy( &mutex );
- }
- else
-#endif
- {
- for( i=0; i<njob-1; i++ )
- {
- ssi = selfscore[i];
- fprintf( stderr, "%4d/%4d\r", i+1, njob );
- for( j=i+1; j<njob; j++ )
- {
- ssj = selfscore[j];
- bunbo = MIN( ssi, ssj );
- if( bunbo == 0.0 )
- mtx[i][j] = 1.0;
- else
- mtx[i][j] = 1.0 - (double)naivepairscore11( seq[i], seq[j], penalty ) / bunbo;
-// mtx[i][j] = 1.0 - (double)naivepairscore11( seq[i], seq[j], penalty ) / MIN( selfscore[i], selfscore[j] );
-// fprintf( stderr, "i=%d,j=%d, l=%d### %f, score = %d\n", i, j, nlen[0], mtx[i][j], naivepairscore11( seq[i], seq[j], penalty ) );
- }
- }
- }
-#endif
-
-#if TEST
- for( i=0; i<njob-1; i++ ) for( j=i+1; j<njob; j++ )
- fprintf( stdout, "i=%d, j=%d, mtx[][] = %f\n", i, j, mtx[i][j] );
-#endif
-
- fp = fopen( "hat2", "w" );
- WriteHat2_pointer( fp, njob, name, mtx );
- fclose( fp );
-#if 0
- if( treeout )
- {
- int ***topol;
- double **len;
-
- topol = AllocateIntCub( njob, 2, njob );
- len = AllocateDoubleMtx( njob, njob );
- veryfastsupg_double_outtree( njob, mtx, topol, len );
- }
-#endif
- SHOWVERSION;
- exit( 0 );
-/*
- res = system( ALNDIR "/spgsdl < hat2" );
- if( res ) exit( 1 );
- else exit( 0 );
-*/
-}