int main() { int i, j; char **seq; static char name[M][B]; static int nlen[M]; double **mtx; FILE *fp; int res; scoremtx = NOTSPECIFIED; #if 0 PreRead( stdin, &njob, &nlenmax ); #else getnumlen( stdin ); #endif rewind( stdin ); seq = AllocateCharMtx( njob, nlenmax+1 ); mtx = AllocateDoubleMtx( njob, njob ); #if 0 FRead( stdin, name, nlen, seq ); #else readData( stdin, name, nlen, seq ); #endif 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_score( seq[i], seq[j] ); } #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( fp, njob, name, mtx ); fclose( fp ); exit( 0 ); /* res = system( ALNDIR "/spgsdl < hat2" ); if( res ) exit( 1 ); else exit( 0 ); */ }
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 ); */ }
int main( int argc, char **argv ) { int i, j; FILE *fp, *infp; char **seq; int *grpseq; char *tmpseq; int **pointt; static char name[M][B]; static int nlen[M]; double **mtx; double **mtx2; double score, score0; static short *table1; char b[B]; 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( stdin, &njob, &nlenmax ); #else getnumlen( infp ); #endif rewind( infp ); if( njob < 2 ) { fprintf( stderr, "At least 2 sequences should be input!\n" "Only %d sequence found.\n", njob ); exit( 1 ); } tmpseq = AllocateCharVec( nlenmax+1 ); seq = AllocateCharMtx( njob, nlenmax+1 ); grpseq = AllocateIntVec( nlenmax+1 ); pointt = AllocateIntMtx( njob, nlenmax+1 ); mtx = AllocateDoubleMtx( njob, njob ); mtx2 = AllocateDoubleMtx( njob, njob ); pamN = NOTSPECIFIED; #if 0 FRead( infp, name, nlen, seq ); #else readData( infp, name, nlen, seq ); #endif fclose( infp ); constants( njob, seq ); if( dorp == 'd' ) tsize = (int)pow( 4, 6 ); else tsize = (int)pow( 6, 6 ); maxl = 0; for( i=0; i<njob; i++ ) { gappick0( tmpseq, seq[i] ); nlen[i] = strlen( tmpseq ); if( nlen[i] < 6 ) { fprintf( stderr, "Seq %d, too short, %d characters\n", i+1, nlen[i] ); exit( 1 ); } if( nlen[i] > maxl ) maxl = nlen[i]; if( dorp == 'd' ) /* nuc */ { seq_grp_nuc( grpseq, tmpseq ); makepointtable_nuc( pointt[i], grpseq ); } else /* amino */ { seq_grp( grpseq, tmpseq ); makepointtable( pointt[i], grpseq ); } } for( i=0; i<njob; i++ ) { table1 = (short *)calloc( tsize, sizeof( short ) ); if( !table1 ) ErrorExit( "Cannot allocate table1\n" ); if( i % 10 == 0 ) { fprintf( stderr, "%4d / %4d\r", i+1, njob ); } makecompositiontable_p( table1, pointt[i] ); for( j=i; j<njob; j++ ) { score = (double)commonsextet_p( table1, pointt[j] ); mtx[i][j] = score; } free( table1 ); } for( i=0; i<njob; i++ ) { score0 = mtx[i][i]; for( j=0; j<njob; j++ ) mtx2[i][j] = ( score0 - mtx[MIN(i,j)][MAX(i,j)] ) / score0 * 3.0; } for( i=0; i<njob-1; i++ ) for( j=i+1; j<njob; j++ ) { #if TEST double jscore; jscore = mtx[i][j] / ( MIN( strlen( seq[i] ), strlen( seq[j] ) ) - 2 ); fprintf( stdout, "jscore = %f\n", jscore ); fprintf( stdout, "mtx2[%d][%d] = %f, mtx2[%d][%d] = %f\n", i, j, mtx2[i][j], j, i, mtx2[j][i] ); #endif mtx2[i][j] = MIN( mtx2[i][j], mtx2[j][i] ); #if TEST fprintf( stdout, "sonokekka mtx2[%d][%d] %f\n", i, j, mtx2[i][j] ); #endif } if( disopt ) { for( i=0; i<njob; i++ ) { sprintf( b, "=lgth = %04d", nlen[i] ); strins( b, name[i] ); } } fp = fopen( "hat2", "w" ); if( !fp ) ErrorExit( "Cannot open hat2." ); WriteHat2( fp, njob, name, mtx2 ); fclose( fp ); fprintf( stderr, "\n" ); SHOWVERSION; exit( 0 ); }
int main( int argc, char *argv[] ) { char **argv2; static int *nlen; static char **name, **seq; static char **seq1, **seq2; static char **mseq1, **mseq2; static char **aseq; static char **bseq; static double **pscore; static double *eff; int i, j, len1, len2; static int ***topol; static double **len; FILE *gp1, *gp2; char c; int nlenmax1, nlenmax2, nseq1, nseq2; int alloclen; argv2 = arguments( argc, argv ); fprintf( stderr, "####### in galn\n" ); initFiles(); fprintf( stderr, "file1 = %s\n", argv2[0] ); fprintf( stderr, "file2 = %s\n", argv2[1] ); gp1 = fopen( argv2[0], "r" ); if( !gp1 ) ErrorExit( "cannot open file1" ); gp2 = fopen( argv2[1], "r" ); if( !gp2 ) ErrorExit( "cannot open file2" ); #if 0 PreRead( gp1, &nseq1, &nlenmax1 ); PreRead( gp2, &nseq2, &nlenmax2 ); #else getnumlen( gp1 ); nseq1 = njob; nlenmax1 = nlenmax; getnumlen( gp2 ); nseq2 = njob; nlenmax2 = nlenmax; #endif njob = nseq1 + nseq2; nlenmax = MAX( nlenmax1, nlenmax2 ); rewind( gp1 ); rewind( gp2 ); name = AllocateCharMtx( njob, B ); nlen = AllocateIntVec( njob ); seq1 = AllocateCharMtx( nseq1, nlenmax*3 ); seq2 = AllocateCharMtx( nseq2, nlenmax*3 ); seq = AllocateCharMtx( njob, 1 ); aseq = AllocateCharMtx( njob, nlenmax*3 ); bseq = AllocateCharMtx( njob, nlenmax*3 ); mseq1 = AllocateCharMtx( njob, 1 ); mseq2 = AllocateCharMtx( njob, 1 ); alloclen = nlenmax * 3; topol = AllocateIntCub( njob, 2, njob ); len = AllocateDoubleMtx( njob, 2 ); pscore = AllocateDoubleMtx( njob, njob ); eff = AllocateDoubleVec( njob ); #if 0 njob=nseq2; FRead( gp2, name+nseq1, nlen+nseq1, seq2 ); njob=nseq1; FRead( gp1, name, nlen, seq1 ); #else njob=nseq2; readDataforgaln( gp2, name+nseq1, nlen+nseq1, seq2 ); njob=nseq1; readDataforgaln( gp1, name, nlen, seq1 ); #endif njob = nseq1 + nseq2; #if 0 // CHUUI commongappick( nseq1, seq1 ); commongappick( nseq2, seq2 ); #endif for( i=0; i<nseq1; i++ ) seq[i] = seq1[i]; for( i=nseq1; i<njob; i++ ) seq[i] = seq2[i-nseq1]; /* Write( stdout, njob, name, nlen, seq ); */ constants( njob, seq ); WriteOptions( trap_g ); c = seqcheck( seq ); if( c ) { fprintf( stderr, "Illeagal character %c\n", c ); exit( 1 ); } for( i=1; i<nseq1; i++ ) { if( nlen[i] != nlen[0] ) ErrorExit( "group1 is not aligned." ); } for( i=nseq1+1; i<njob; i++ ) { if( nlen[i] != nlen[nseq1] ) ErrorExit( "group2 is not aligned." ); } if( tbutree == 0 ) { for( i=0; i<nseq1; i++ ) { for( j=i+1; j<nseq1; j++ ) { pscore[i][j] = (double)substitution_hosei( seq[i], seq[j] ); // fprintf( stderr, "%d-%d, %5.1f \n", i, j, pscore[i][j] ); } for( j=nseq1; j<njob; j++ ) { pscore[i][j] = 3.0; // fprintf( stderr, "%d-%d, %5.1f \n", i, j, pscore[i][j] ); } } for( i=nseq1; i<njob-1; i++ ) { for( j=i+1; j<njob; j++ ) { pscore[i][j] = (double)substitution_hosei( seq[i], seq[j] ); // fprintf( stderr, "%d-%d, %5.1f \n", i, j, pscore[i][j] ); } } // fprintf( stderr, "\n" ); } else { fprintf( stderr, "Not supported\n" ); exit( 1 ); #if 0 prep = fopen( "hat2", "r" ); if( prep == NULL ) ErrorExit( "Make hat2." ); readhat2( prep, njob, name, pscore ); fclose( prep ); #endif } fprintf( stderr, "Constructing dendrogram ... " ); if( treemethod == 'x' ) veryfastsupg( njob, pscore, topol, len ); else ErrorExit( "Incorrect tree\n" ); fprintf( stderr, "done.\n" ); if( tbrweight ) { weight = 3; counteff_simple( njob, topol, len, eff ); // for( i=0; i<njob; i++ ) fprintf( stderr, "eff[%d] = %f\n", i, eff[i] ); } else { for( i=0; i<njob; i++ ) eff[i] = 1.0; } len1 = strlen( seq[0] ); len2 = strlen( seq[nseq1] ); if( len1 > 30000 || len2 > 30000 ) { fprintf( stderr, "\nlen1=%d, len2=%d, Switching to the memsave mode.\n", len1, len2 ); alg = 'M'; } GroupAlign( nseq1, nseq2, name, nlen, seq, aseq, mseq1, mseq2, topol, len, eff, alloclen ); #if 0 writePre( njob, name, nlen, aseq, 1 ); #else writeDataforgaln( stdout, njob, name, nlen, aseq ); #endif SHOWVERSION; return( 0 ); }