3 static int upperCase = 0;
8 char creverse( char f )
10 static char *table = NULL;
13 table = AllocateCharVec(0x80);
34 return( table[(int)f] );
37 void sreverse( char *r, char *s )
42 *r-- = creverse( *s++ );
46 void gappick_samestring( char *seq )
50 for( ; *seq != 0; seq++ )
60 static int addlocalhom2( char *al1, char *al2, LocalHom *localhompt, int off1, int off2, int opt, int overlapaa, int skip )
62 int pos1, pos2, start1, start2, end1, end2;
71 pos1 = off1; pos2 = off2;
77 fprintf( stderr, "nlocalhom = %d in addlocalhom\n", nlocalhom );
78 fprintf( stderr, "al1 = %s, al2 = %s\n", al1, al2 );
79 fprintf( stderr, "off1 = %d, off2 = %d\n", off1, off2 );
80 fprintf( stderr, "localhopt = %p, skip = %d\n", localhompt, skip );
81 fprintf( stderr, "pt1 = \n%s\n, pt2 = \n%s\n", pt1, pt2 );
86 while( --skip > 0 ) localhompt = localhompt->next;
87 localhompt->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
88 localhompt = localhompt->next;
89 // fprintf( stderr, "tmppt = %p, localhompt = %p\n", tmppt, localhompt );
97 // fprintf( stderr, "In in while loop\n" );
98 // fprintf( stderr, "pt = %c, %c, st=%d\n", *pt1, *pt2, st );
99 if( st == 1 && ( *pt1 == '-' || *pt2 == '-' ) )
104 if( nlocalhom++ > 0 )
106 // fprintf( stderr, "reallocating ...\n" );
107 tmppt->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
108 // fprintf( stderr, "done\n" );
112 tmppt->start1 = start1;
113 tmppt->start2 = start2;
119 sumoverlap += end2-start2+1;
121 tmppt->overlapaa = end2-start2+1;
122 tmppt->opt = iscore * 5.8 / 600;
123 tmppt->overlapaa = overlapaa;
124 tmppt->opt = (double)opt;
128 fprintf( stderr, "iscore (1)= %d\n", iscore );
129 fprintf( stderr, "al1: %d - %d\n", start1, end1 );
130 fprintf( stderr, "al2: %d - %d\n", start2, end2 );
135 else if( *pt1 != '-' && *pt2 != '-' )
139 start1 = pos1; start2 = pos2;
142 iscore += n_dis[(int)amino_n[(int)*pt1]][(int)amino_n[(int)*pt2]];
143 // fprintf( stderr, "%c-%c, score(0) = %d\n", *pt1, *pt2, iscore );
145 if( *pt1++ != '-' ) pos1++;
146 if( *pt2++ != '-' ) pos2++;
151 if( nlocalhom++ > 0 )
153 // fprintf( stderr, "reallocating ...\n" );
154 tmppt->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
155 // fprintf( stderr, "done\n" );
161 tmppt->start1 = start1;
162 tmppt->start2 = start2;
168 sumoverlap += end2-start2+1;
170 tmppt->overlapaa = end2-start2+1;
171 tmppt->opt = (double)iscore * 5.8 / 600;
172 tmppt->overlapaa = overlapaa;
173 tmppt->opt = (double)opt;
176 fprintf( stderr, "score (2)= %d\n", iscore );
177 fprintf( stderr, "al1: %d - %d\n", start1, end1 );
178 fprintf( stderr, "al2: %d - %d\n", start2, end2 );
182 for( tmppt=localhompt; tmppt; tmppt=tmppt->next )
184 tmppt->overlapaa = sumoverlap;
185 tmppt->opt = (double)sumscore * 5.8 / 600 / sumoverlap;
194 static int addlocalhom_r( char *al1, char *al2, LocalHom *localhompt, int off1, int off2, int opt, int overlapaa, int skip )
196 int pos1, pos2, start1, start2, end1, end2;
201 LocalHom *tmppt = NULL; // by D.Mathog, a guess
204 pt1 = al1; pt2 = al2;
205 pos1 = off1; pos2 = off2;
209 start1 = 0; // by D.Mathog, a guess
210 start2 = 0; // by D.Mathog, a guess
213 fprintf( stderr, "nlocalhom = %d in addlocalhom\n", nlocalhom );
214 fprintf( stderr, "al1 = %s, al2 = %s\n", al1, al2 );
215 fprintf( stderr, "off1 = %d, off2 = %d\n", off1, off2 );
216 fprintf( stderr, "localhopt = %p, skip = %d\n", localhompt, skip );
218 fprintf( stderr, "pt1 = \n%s\n, pt2 = \n%s\n", pt1, pt2 );
222 while( --skip > 0 ) localhompt = localhompt->next;
223 localhompt->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
224 localhompt = localhompt->next;
225 fprintf( stderr, "tmppt = %p, localhompt = %p\n", (void *)tmppt, (void *)localhompt );
233 fprintf( stderr, "In in while loop\n" );
234 fprintf( stderr, "pt = %c, %c, st=%d\n", *pt1, *pt2, st );
235 if( st == 1 && ( *pt1 == '-' || *pt2 == '-' ) )
240 if( nlocalhom++ > 0 )
242 // fprintf( stderr, "reallocating ...\n" );
243 tmppt->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
244 // fprintf( stderr, "done\n" );
248 tmppt->start1 = start1;
249 tmppt->start2 = start2;
255 sumoverlap += end2-start2+1;
257 tmppt->overlapaa = end2-start2+1;
258 tmppt->opt = score * 5.8 / 600;
259 tmppt->overlapaa = overlapaa;
260 tmppt->opt = (double)opt;
263 fprintf( stderr, "score (1)= %f\n", score );
264 fprintf( stderr, "al1: %d - %d\n", start1, end1 );
265 fprintf( stderr, "al2: %d - %d\n", start2, end2 );
269 else if( *pt1 != '-' && *pt2 != '-' )
273 start1 = pos1; start2 = pos2;
276 score += (double)n_dis[(int)amino_n[(int)*pt1]][(int)amino_n[(int)*pt2]];
277 // fprintf( stderr, "%c-%c, score(0) = %f\n", *pt1, *pt2, score );
279 if( *pt1++ != '-' ) pos1++;
280 if( *pt2++ != '-' ) pos2++;
282 if( nlocalhom++ > 0 )
284 // fprintf( stderr, "reallocating ...\n" );
285 tmppt->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
286 // fprintf( stderr, "done\n" );
292 tmppt->start1 = start1;
293 tmppt->start2 = start2;
299 sumoverlap += end2-start2+1;
301 tmppt->overlapaa = end2-start2+1;
302 tmppt->opt = score * 5.8 / 600;
303 tmppt->overlapaa = overlapaa;
304 tmppt->opt = (double)opt;
307 fprintf( stderr, "score (2)= %f\n", score );
308 fprintf( stderr, "al1: %d - %d\n", start1, end1 );
309 fprintf( stderr, "al2: %d - %d\n", start2, end2 );
311 for( tmppt=localhompt; tmppt; tmppt=tmppt->next )
313 tmppt->overlapaa = sumoverlap;
314 tmppt->opt = sumscore * 5.8 / 600 / sumoverlap;
318 void putlocalhom3( char *al1, char *al2, LocalHom *localhompt, int off1, int off2, int opt, int overlapaa )
320 int pos1, pos2, start1, start2, end1, end2;
326 LocalHom *subnosento;
330 pt1 = al1; pt2 = al2;
331 pos1 = off1; pos2 = off2;
335 start1 = 0; // by Mathog, a guess
336 start2 = 0; // by Mathog, a guess
338 subnosento = localhompt;
339 while( subnosento->next ) subnosento = subnosento->next;
342 saisho = ( localhompt->nokori == 0 );
344 fprintf( stderr, "localhompt = %p\n", (void *)localhompt );
345 fprintf( stderr, "tmppt = %p\n", (void *)tmppt );
346 fprintf( stderr, "subnosento = %p\n", (void *)subnosento );
352 // fprintf( stderr, "pt = %c, %c, st=%d\n", *pt1, *pt2, st );
353 if( st == 1 && ( *pt1 == '-' || *pt2 == '-' ) )
358 if( localhompt->nokori++ > 0 )
360 // fprintf( stderr, "reallocating ...\n" );
361 tmppt->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
362 // fprintf( stderr, "done\n" );
366 tmppt->start1 = start1;
367 tmppt->start2 = start2;
374 tmppt->overlapaa = end2-start2+1;
375 tmppt->opt = score / tmppt->overlapaa * 5.8 / 600;
380 sumoverlap += end2-start2+1;
383 tmppt->overlapaa = overlapaa;
384 tmppt->opt = (double)opt;
388 fprintf( stderr, "score (1)= %f\n", score );
389 fprintf( stderr, "al1: %d - %d\n", start1, end1 );
390 fprintf( stderr, "al2: %d - %d\n", start2, end2 );
395 else if( *pt1 != '-' && *pt2 != '-' )
399 start1 = pos1; start2 = pos2;
402 score += (double)n_dis[(int)amino_n[(int)*pt1]][(int)amino_n[(int)*pt2]]; // - offset ¤Ï¤¤¤é¤Ê¤¤¤«¤â
403 // fprintf( stderr, "%c-%c, score(0) = %f\n", *pt1, *pt2, score );
405 if( *pt1++ != '-' ) pos1++;
406 if( *pt2++ != '-' ) pos2++;
408 if( *(pt1-1) != '-' && *(pt2-1) != '-' )
410 if( localhompt->nokori++ > 0 )
412 // fprintf( stderr, "reallocating ...\n" );
413 tmppt->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
414 // fprintf( stderr, "done\n" );
421 tmppt->start1 = start1;
422 tmppt->start2 = start2;
430 tmppt->overlapaa = end2-start2+1;
431 tmppt->opt = score / tmppt->overlapaa * 5.8 / 600;
436 sumoverlap += end2-start2+1;
439 tmppt->overlapaa = overlapaa;
440 tmppt->opt = (double)opt;
444 fprintf( stderr, "score (2)= %f\n", score );
445 fprintf( stderr, "al1: %d - %d\n", start1, end1 );
446 fprintf( stderr, "al2: %d - %d\n", start2, end2 );
450 fprintf( stderr, "sumscore = %f\n", sumscore );
454 if( !saisho ) subnosento = subnosento->next;
455 for( tmppt=subnosento; tmppt; tmppt=tmppt->next )
457 tmppt->overlapaa = sumoverlap;
458 tmppt->opt = sumscore * 5.8 / 600 / sumoverlap;
459 fprintf( stderr, "tmpptr->opt = %f\n", tmppt->opt );
463 void putlocalhom_ext( char *al1, char *al2, LocalHom *localhompt, int off1, int off2, int opt, int overlapaa )
465 int pos1, pos2, start1, start2, end1, end2;
470 LocalHom *tmppt = localhompt;
473 pt1 = al1; pt2 = al2;
474 pos1 = off1; pos2 = off2;
479 start1 = 0; // by D.Mathog, a guess
480 start2 = 0; // by D.Mathog, a guess
486 // fprintf( stderr, "pt = %c, %c, st=%d\n", *pt1, *pt2, st );
487 if( st == 1 && ( *pt1 == '-' || *pt2 == '-' ) )
492 if( nlocalhom++ > 0 )
494 // fprintf( stderr, "reallocating ...\n" );
495 tmppt->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
496 // fprintf( stderr, "done\n" );
500 tmppt->start1 = start1;
501 tmppt->start2 = start2;
508 tmppt->overlapaa = end2-start2+1;
509 tmppt->opt = (double)iscore / tmppt->overlapaa * 5.8 / 600;
514 sumoverlap += end2-start2+1;
517 tmppt->overlapaa = overlapaa;
518 tmppt->opt = (double)opt;
522 fprintf( stderr, "iscore (1)= %d\n", iscore );
523 fprintf( stderr, "al1: %d - %d\n", start1, end1 );
524 fprintf( stderr, "al2: %d - %d\n", start2, end2 );
529 else if( *pt1 != '-' && *pt2 != '-' )
533 start1 = pos1; start2 = pos2;
536 iscore += n_dis[(int)amino_n[(int)*pt1]][(int)amino_n[(int)*pt2]]; // - offset ¤Ï¤¤¤é¤Ê¤¤¤«¤â
537 // fprintf( stderr, "%c-%c, iscore(0) = %d\n", *pt1, *pt2, iscore );
539 if( *pt1++ != '-' ) pos1++;
540 if( *pt2++ != '-' ) pos2++;
542 if( *(pt1-1) != '-' && *(pt2-1) != '-' )
544 if( nlocalhom++ > 0 )
546 // fprintf( stderr, "reallocating ...\n" );
547 tmppt->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
548 // fprintf( stderr, "done\n" );
554 tmppt->start1 = start1;
555 tmppt->start2 = start2;
562 tmppt->overlapaa = end2-start2+1;
563 tmppt->opt = (double)iscore / tmppt->overlapaa * 5.8 / 600;
568 sumoverlap += end2-start2+1;
571 tmppt->overlapaa = overlapaa;
572 tmppt->opt = (double)opt;
576 fprintf( stderr, "iscore (2)= %d\n", iscore );
577 fprintf( stderr, "al1: %d - %d\n", start1, end1 );
578 fprintf( stderr, "al2: %d - %d\n", start2, end2 );
584 for( tmppt=localhompt; tmppt; tmppt=tmppt->next )
586 tmppt->overlapaa = sumoverlap;
587 // tmppt->opt = (double)isumscore * 5.8 / ( 600 * sumoverlap );
588 tmppt->opt = (double)600 * 5.8 / 600;
589 // fprintf( stderr, "tmpptr->opt = %f\n", tmppt->opt );
594 void putlocalhom_str( char *al1, char *al2, double *equiv, double scale, LocalHom *localhompt, int off1, int off2, int opt, int overlapaa )
596 int posinaln, pos1, pos2, start1, start2, end1, end2;
600 LocalHom *tmppt = localhompt;
603 pt1 = al1; pt2 = al2;
604 pos1 = off1; pos2 = off2;
608 start1 = 0; // by D.Mathog, a guess
609 start2 = 0; // by D.Mathog, a guess
614 if( *pt1 != '-' && *pt2 != '-' && equiv[posinaln] > 0.0 )
616 start1 = end1 = pos1; start2 = end2 = pos2;
617 if( nlocalhom++ > 0 )
619 // fprintf( stderr, "reallocating ... (posinaln=%d)\n", posinaln );
620 tmppt->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
621 // fprintf( stderr, "done\n" );
625 tmppt->start1 = start1;
626 tmppt->start2 = start2;
630 tmppt->overlapaa = 1;
631 // tmppt->opt = (double)iscore / tmppt->overlapaa * 5.8 / 600;
632 tmppt->opt = equiv[posinaln] * scale;
633 // fprintf( stdout, "*pt1=%c, *pt2=%c, equiv=%f\n", *pt1, *pt2, equiv[posinaln] );
636 if( *pt1++ != '-' ) pos1++;
637 if( *pt2++ != '-' ) pos2++;
642 void putlocalhom2( char *al1, char *al2, LocalHom *localhompt, int off1, int off2, int opt, int overlapaa )
644 int pos1, pos2, start1, start2, end1, end2;
649 LocalHom *tmppt = localhompt;
652 pt1 = al1; pt2 = al2;
653 pos1 = off1; pos2 = off2;
658 start1 = 0; // by D.Mathog, a guess
659 start2 = 0; // by D.Mathog, a guess
665 // fprintf( stderr, "pt = %c, %c, st=%d\n", *pt1, *pt2, st );
666 if( st == 1 && ( *pt1 == '-' || *pt2 == '-' ) )
671 if( nlocalhom++ > 0 )
673 // fprintf( stderr, "reallocating ...\n" );
674 tmppt->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
675 // fprintf( stderr, "done\n" );
679 tmppt->start1 = start1;
680 tmppt->start2 = start2;
687 tmppt->overlapaa = end2-start2+1;
688 tmppt->opt = (double)iscore / tmppt->overlapaa * 5.8 / 600;
693 sumoverlap += end2-start2+1;
696 tmppt->overlapaa = overlapaa;
697 tmppt->opt = (double)opt;
701 fprintf( stderr, "iscore (1)= %d\n", iscore );
702 fprintf( stderr, "al1: %d - %d\n", start1, end1 );
703 fprintf( stderr, "al2: %d - %d\n", start2, end2 );
708 else if( *pt1 != '-' && *pt2 != '-' )
712 start1 = pos1; start2 = pos2;
715 iscore += n_dis[(int)amino_n[(int)*pt1]][(int)amino_n[(int)*pt2]]; // - offset ¤Ï¤¤¤é¤Ê¤¤¤«¤â
716 // fprintf( stderr, "%c-%c, iscore(0) = %d\n", *pt1, *pt2, iscore );
718 if( *pt1++ != '-' ) pos1++;
719 if( *pt2++ != '-' ) pos2++;
721 if( *(pt1-1) != '-' && *(pt2-1) != '-' )
723 if( nlocalhom++ > 0 )
725 // fprintf( stderr, "reallocating ...\n" );
726 tmppt->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
727 // fprintf( stderr, "done\n" );
733 tmppt->start1 = start1;
734 tmppt->start2 = start2;
741 tmppt->overlapaa = end2-start2+1;
742 tmppt->opt = (double)iscore / tmppt->overlapaa * 5.8 / 600;
747 sumoverlap += end2-start2+1;
750 tmppt->overlapaa = overlapaa;
751 tmppt->opt = (double)opt;
755 fprintf( stderr, "iscore (2)= %d\n", iscore );
756 fprintf( stderr, "al1: %d - %d\n", start1, end1 );
757 fprintf( stderr, "al2: %d - %d\n", start2, end2 );
763 for( tmppt=localhompt; tmppt; tmppt=tmppt->next )
765 tmppt->overlapaa = sumoverlap;
766 tmppt->opt = (double)isumscore * 5.8 / ( 600 * sumoverlap );
767 // fprintf( stderr, "tmpptr->opt = %f\n", tmppt->opt );
771 void putlocalhom( char *al1, char *al2, LocalHom *localhompt, int off1, int off2, int opt, int overlapaa )
773 int pos1, pos2, start1, start2, end1, end2;
778 LocalHom *tmppt = localhompt;
781 pt1 = al1; pt2 = al2;
782 pos1 = off1; pos2 = off2;
787 start1 = 0; // by D.Mathog, a guess
788 start2 = 0; // by D.Mathog, a guess
794 // fprintf( stderr, "pt = %c, %c, st=%d\n", *pt1, *pt2, st );
795 if( st == 1 && ( *pt1 == '-' || *pt2 == '-' ) )
800 if( nlocalhom++ > 0 )
802 // fprintf( stderr, "reallocating ...\n" );
803 tmppt->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
804 // fprintf( stderr, "done\n" );
808 tmppt->start1 = start1;
809 tmppt->start2 = start2;
816 tmppt->overlapaa = end2-start2+1;
817 tmppt->opt = score / tmppt->overlapaa * 5.8 / 600;
822 sumoverlap += end2-start2+1;
825 tmppt->overlapaa = overlapaa;
826 tmppt->opt = (double)opt;
830 fprintf( stderr, "score (1)= %f\n", score );
831 fprintf( stderr, "al1: %d - %d\n", start1, end1 );
832 fprintf( stderr, "al2: %d - %d\n", start2, end2 );
837 else if( *pt1 != '-' && *pt2 != '-' )
841 start1 = pos1; start2 = pos2;
844 score += (double)n_dis[(int)amino_n[(int)*pt1]][(int)amino_n[(int)*pt2]]; // - offset ¤Ï¤¤¤é¤Ê¤¤¤«¤â
845 // fprintf( stderr, "%c-%c, score(0) = %f\n", *pt1, *pt2, score );
847 if( *pt1++ != '-' ) pos1++;
848 if( *pt2++ != '-' ) pos2++;
850 if( nlocalhom++ > 0 )
852 // fprintf( stderr, "reallocating ...\n" );
853 tmppt->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
854 // fprintf( stderr, "done\n" );
860 tmppt->start1 = start1;
861 tmppt->start2 = start2;
868 tmppt->overlapaa = end2-start2+1;
869 tmppt->opt = score / tmppt->overlapaa * 5.8 / 600;
874 sumoverlap += end2-start2+1;
877 tmppt->overlapaa = overlapaa;
878 tmppt->opt = (double)opt;
882 fprintf( stderr, "score (2)= %f\n", score );
883 fprintf( stderr, "al1: %d - %d\n", start1, end1 );
884 fprintf( stderr, "al2: %d - %d\n", start2, end2 );
889 for( tmppt=localhompt; tmppt; tmppt=tmppt->next )
891 tmppt->overlapaa = sumoverlap;
892 tmppt->opt = sumscore * 5.8 / 600 / sumoverlap;
893 // fprintf( stderr, "tmpptr->opt = %f\n", tmppt->opt );
898 char *cutal( char *al, int al_display_start, int start, int end )
904 pos = al_display_start;
907 if( start == pos ) val = pt;
908 if( end == pos ) break;
909 // fprintf( stderr, "pos=%d, *pt=%c, val=%p\n", pos, *pt, val );
910 if( *pt != '-' ) pos++;
911 } while( *pt++ != 0 );
916 void ErrorExit( char *message )
918 fprintf( stderr, "%s\n", message );
922 void strncpy_caseC( char *str1, char *str2, int len )
924 if( dorp == 'd' && upperCase > 0 )
927 *str1++ = toupper( *str2++ );
929 else strncpy( str1, str2, len );
932 void seqUpper( int nseq, char **seq ) /* not used */
935 for( i=0; i<nseq; i++ )
937 len = strlen( seq[i] );
938 for( j=0; j<len; j++ )
939 seq[i][j] = toupper( seq[i][j] );
943 void seqLower( int nseq, char **seq )
946 for( i=0; i<nseq; i++ )
948 len = strlen( seq[i] );
949 for( j=0; j<len; j++ )
950 seq[i][j] = tolower( seq[i][j] );
954 int getaline_fp_eof( char *s, int l, FILE *fp ) /* end of file -> return 1 */
958 for( i=0; i<l && ( noteofflag = ( (c=getc(fp)) != EOF ) ) && c != '\n'; i++ )
961 return( !noteofflag );
964 int getaline_fp_eof_new(s, l, fp) /* end of file -> return 1 */
965 char s[] ; int l ; FILE *fp ;
970 if( feof( fp ) ) return( 1 );
972 for( i=0; i<l && ( noteofflag = ( (c=getc(fp)) != EOF ) ) && c != '\n'; i++ )
975 if( c != '\n' && c != EOF ) while( getc(fp) != '\n' )
977 return( !noteofflag );
980 int myfgets(s, l, fp) /* l°Ê¾å¤Ï¡¢¹ÔËö¤Þ¤ÇÆɤßÈô¤Ð¤¹ */
981 char s[] ; int l ; FILE *fp ;
985 if( feof( fp ) ) return( 1 );
987 for( i=0; i<l && ( c=getc( fp ) ) != '\n'; i++ )
991 while( getc(fp) != '\n' )
996 float input_new( FILE *fp, int d )
1005 for( i=0; i<d; i++ )
1006 mojiretsu[i] = getc( fp );
1009 return( atof( mojiretsu ) );
1013 void PreRead( FILE *fp, int *locnjob, int *locnlenmax )
1018 fgets( b, B-1, fp ); *locnjob = atoi( b );
1023 fgets( b, B-1, fp );
1024 if( !strncmp( b, "=", 1 ) )
1027 fgets( b, B-1, fp ); nleni = atoi( b );
1028 if( nleni > *locnlenmax ) *locnlenmax = nleni;
1031 if( *locnlenmax > N )
1033 fprintf( stderr, "TOO LONG SEQUENCE!\n" );
1038 fprintf( stderr, "TOO MANY SEQUENCE!\n" );
1039 fprintf( stderr, "%d > %d\n", njob, M );
1044 int allSpace( char *str )
1047 while( *str ) value *= ( !isdigit( *str++ ) );
1051 void Read( char name[M][B], int nlen[M], char **seq )
1053 extern void FRead( FILE *x, char y[M][B], int z[M], char **w );
1054 FRead( stdin, name, nlen, seq );
1058 void FRead( FILE *fp, char name[][B], int nlen[], char **seq )
1063 fgets( b, B-1, fp );
1065 fprintf( stderr, "b = %s\n", b );
1068 if( strstr( b, "onnet" ) ) scoremtx = 1;
1069 else if( strstr( b, "DnA" ) )
1074 else if( strstr( b, "dna" ) )
1079 else if( strstr( b, "DNA" ) )
1084 else if( strstr( b, "M-Y" ) || strstr( b, "iyata" ) ) scoremtx = 2;
1087 fprintf( stderr, " %s->scoremtx = %d\n", b, scoremtx );
1093 if( strlen( b ) >=25 )
1097 fprintf( stderr, "kimuraR = %s\n", b+20 );
1099 kimuraR = atoi( b+20 );
1101 if( kimuraR < 0 || 20 < kimuraR ) ErrorExit( "Illeagal kimuraR value.\n" );
1102 if( allSpace( b+20 ) ) kimuraR = NOTSPECIFIED;
1104 else kimuraR = NOTSPECIFIED;
1106 fprintf( stderr, "kimuraR = %d\n", kimuraR );
1109 if( strlen( b ) >=20 )
1113 fprintf( stderr, "pamN = %s\n", b+15 );
1115 pamN = atoi( b+15 );
1116 if( pamN < 0 || 400 < pamN ) ErrorExit( "Illeagal pam value.\n" );
1117 if( allSpace( b+15 ) ) pamN = NOTSPECIFIED;
1119 else pamN = NOTSPECIFIED;
1121 if( strlen( b ) >= 15 )
1125 fprintf( stderr, "poffset = %s\n", b+10 );
1127 poffset = atoi( b+10 );
1128 if( poffset > 500 ) ErrorExit( "Illegal extending gap ppenalty\n" );
1129 if( allSpace( b+10 ) ) poffset = NOTSPECIFIED;
1131 else poffset = NOTSPECIFIED;
1133 if( strlen( b ) >= 10 )
1137 fprintf( stderr, "ppenalty = %s\n", b+5 );
1139 ppenalty = atoi( b+5 );
1140 if( ppenalty > 0 ) ErrorExit( "Illegal opening gap ppenalty\n" );
1141 if( allSpace( b+5 ) ) ppenalty = NOTSPECIFIED;
1143 else ppenalty = NOTSPECIFIED;
1146 for( i=0; i<njob; i++ )
1148 getaline_fp_eof_new( b, B-1, fp );
1149 strcpy( name[i], b );
1151 fprintf( stderr, "name[%d] = %s\n", i, name[i] );
1153 fgets( b, B-1, fp ); nlen[i] = atoi( b ); /* seq i no nagasa */
1155 if( nlen[i] ) for( j=0; j <= (nlen[i]-1)/C; j++ )
1157 getaline_fp_eof_new( b, B-1, fp );
1159 strcat( seq[i], b );
1161 seq[i][nlen[i]] = 0;
1163 if( scoremtx == -1 && upperCase != -1 ) seqLower( njob, seq );
1167 static int countKUorWA( FILE *fp )
1174 while( ( c = getc( fp ) ) != EOF )
1176 if( b == '\n' && ( c == '>' ) )
1184 void searchKUorWA( FILE *fp )
1188 while( !( ( ( c = getc( fp ) ) == '>' || c == EOF ) && b == '\n' ) )
1193 static int onlyGraph( char *str )
1199 // while( (tmp=*str++) ) if( isgraph( tmp ) ) *res++ = tmp;
1200 while( (tmp=*str++) )
1202 if( 0x20 < tmp && tmp < 0x7f ) *res++ = tmp;
1205 fprintf( stderr, "========================================================\n" );
1206 fprintf( stderr, "========================================================\n" );
1207 fprintf( stderr, "=== \n" );
1208 fprintf( stderr, "=== ERROR!! \n" );
1209 fprintf( stderr, "=== In the '--anysymbol' and '--preservecase' modes, \n" );
1210 fprintf( stderr, "=== '>' in sequence is unacceptable.\n" );
1211 fprintf( stderr, "=== \n" );
1212 fprintf( stderr, "========================================================\n" );
1213 fprintf( stderr, "========================================================\n" );
1221 static int onlyAlpha_lower( char *str )
1227 while( (tmp=*str++) )
1228 if( isalpha( tmp ) || tmp == '-' || tmp == '*' || tmp == '.' )
1229 *res++ = tolower( tmp );
1233 static int onlyAlpha_upper( char *str )
1239 while( (tmp=*str++) )
1240 if( isalpha( tmp ) || tmp == '-' || tmp == '*' || tmp == '.' )
1241 *res++ = toupper( tmp );
1246 void kake2hiku( char *str )
1249 if( *str == '*' ) *str = '-';
1253 char *load1SeqWithoutName_realloc_casepreserve( FILE *fpp )
1260 val = malloc( (size+1) * sizeof( char ) );
1264 while( ( c = getc( fpp ) ) != EOF &&
1265 !( ( c == '>' || c == '(' || c == EOF ) && b == '\n' ) )
1267 *cbuf++ = (char)c; /* Ť¹¤®¤Æ¤â¤·¤é¤Ê¤¤ */
1268 if( cbuf - val == size )
1271 fprintf( stderr, "reallocating...\n" );
1272 val = (char *)realloc( val, (size+1) * sizeof( char ) );
1275 fprintf( stderr, "Allocation error in load1SeqWithoutName_realloc \n" );
1278 fprintf( stderr, "done.\n" );
1279 cbuf = val + size-N;
1286 // kake2hiku( val );
1290 char *load1SeqWithoutName_realloc( FILE *fpp )
1297 val = malloc( (size+1) * sizeof( char ) );
1301 while( ( c = getc( fpp ) ) != EOF &&
1302 !( ( c == '>' || c == '(' || c == EOF ) && b == '\n' ) )
1304 *cbuf++ = (char)c; /* Ť¹¤®¤Æ¤â¤·¤é¤Ê¤¤ */
1305 if( cbuf - val == size )
1308 fprintf( stderr, "reallocating...\n" );
1309 val = (char *)realloc( val, (size+1) * sizeof( char ) );
1312 fprintf( stderr, "Allocation error in load1SeqWithoutName_realloc \n" );
1315 fprintf( stderr, "done.\n" );
1316 cbuf = val + size-N;
1323 onlyAlpha_lower( val );
1325 onlyAlpha_upper( val );
1330 int load1SeqWithoutName_new( FILE *fpp, char *cbuf )
1336 while( ( c = getc( fpp ) ) != EOF && /* by T. Nishiyama */
1337 !( ( c == '>' || c == '(' || c == EOF ) && b == '\n' ) )
1339 *cbuf++ = (char)c; /* Ť¹¤®¤Æ¤â¤·¤é¤Ê¤¤ */
1345 onlyAlpha_lower( bk );
1347 onlyAlpha_upper( bk );
1353 void readDataforgaln( FILE *fp, char **name, int *nlen, char **seq )
1356 static char *tmpseq = NULL;
1361 tmpseq = AllocateCharVec( N );
1368 for( i=0; i<njob; i++ )
1370 name[i][0] = '='; getc( fp );
1372 fgets( name[i]+1, B-2, fp );
1373 j = strlen( name[i] );
1374 if( name[i][j-1] != '\n' )
1375 ErrorExit( "Too long name\n" );
1378 myfgets( name[i]+1, B-2, fp );
1381 fprintf( stderr, "name[%d] = %s\n", i, name[i] );
1383 tmpseq = load1SeqWithoutName_realloc( fp );
1384 strcpy( seq[i], tmpseq );
1385 nlen[i] = strlen( seq[i] );
1388 if( dorp == 'd' && upperCase != -1 ) seqLower( njob, seq );
1394 void readData_varlen( FILE *fp, char **name, int *nlen, char **seq )
1397 static char *tmpseq = NULL;
1402 for( i=0; i<njob; i++ )
1404 name[i][0] = '='; getc( fp );
1406 fgets( name[i]+1, B-2, fp );
1407 j = strlen( name[i] );
1408 if( name[i][j-1] != '\n' )
1409 ErrorExit( "Too long name\n" );
1412 myfgets( name[i]+1, B-2, fp );
1415 fprintf( stderr, "name[%d] = %s\n", i, name[i] );
1417 tmpseq = load1SeqWithoutName_realloc( fp );
1418 nlen[i] = strlen( tmpseq );
1419 // fprintf( stderr, "nlen[%d] = %d\n", i+1, nlen[i] );
1420 seq[i] = calloc( nlen[i]+1, sizeof( char ) );
1421 strcpy( seq[i], tmpseq );
1424 if( dorp == 'd' && upperCase != -1 ) seqLower( njob, seq );
1430 void readData_pointer2( FILE *fp, int nseq, char **name, int *nlen, char **seq )
1433 static char *tmpseq = NULL;
1438 tmpseq = AllocateCharVec( N );
1445 for( i=0; i<nseq; i++ )
1447 name[i][0] = '='; getc( fp );
1449 fgets( name[i]+1, B-2, fp );
1450 j = strlen( name[i] );
1451 if( name[i][j-1] != '\n' )
1452 ErrorExit( "Too long name\n" );
1455 myfgets( name[i]+1, B-2, fp );
1458 fprintf( stderr, "name[%d] = %s\n", i, name[i] );
1460 tmpseq = load1SeqWithoutName_realloc( fp );
1461 strcpy( seq[i], tmpseq );
1463 nlen[i] = strlen( seq[i] );
1465 if( dorp == 'd' && upperCase != -1 ) seqLower( nseq, seq );
1473 namebuf = calloc( B+100, sizeof( char ) );
1474 for( i=0; i<nseq; i++ )
1477 cptr = strstr( name[i], "_numo_e_" );
1479 sprintf( namebuf+1, "_numo_s_%08d_numo_e_%s", i+1, cptr+8 );
1481 sprintf( namebuf+1, "_numo_s_%08d_numo_e_%s", i+1, name[i]+1 );
1482 strncpy( name[i], namebuf, B );
1491 void readData_pointer_casepreserve( FILE *fp, char **name, int *nlen, char **seq )
1494 static char *tmpseq = NULL;
1499 tmpseq = AllocateCharVec( N );
1506 for( i=0; i<njob; i++ )
1508 name[i][0] = '='; getc( fp );
1510 fgets( name[i]+1, B-2, fp );
1511 j = strlen( name[i] );
1512 if( name[i][j-1] != '\n' )
1513 ErrorExit( "Too long name\n" );
1516 myfgets( name[i]+1, B-2, fp );
1519 fprintf( stderr, "name[%d] = %s\n", i, name[i] );
1521 tmpseq = load1SeqWithoutName_realloc_casepreserve( fp );
1522 strcpy( seq[i], tmpseq );
1524 nlen[i] = strlen( seq[i] );
1529 void readData_pointer( FILE *fp, char **name, int *nlen, char **seq )
1532 static char *tmpseq = NULL;
1537 tmpseq = AllocateCharVec( N );
1544 for( i=0; i<njob; i++ )
1546 name[i][0] = '='; getc( fp );
1548 fgets( name[i]+1, B-2, fp );
1549 j = strlen( name[i] );
1550 if( name[i][j-1] != '\n' )
1551 ErrorExit( "Too long name\n" );
1554 myfgets( name[i]+1, B-2, fp );
1557 fprintf( stderr, "name[%d] = %s\n", i, name[i] );
1559 tmpseq = load1SeqWithoutName_realloc( fp );
1560 strcpy( seq[i], tmpseq );
1562 nlen[i] = strlen( seq[i] );
1564 if( dorp == 'd' && upperCase != -1 ) seqLower( njob, seq );
1572 namebuf = calloc( B+100, sizeof( char ) );
1573 for( i=0; i<njob; i++ )
1576 cptr = strstr( name[i], "_numo_e_" );
1578 sprintf( namebuf+1, "_numo_s_%08d_numo_e_%s", i+1, cptr+8 );
1580 sprintf( namebuf+1, "_numo_s_%08d_numo_e_%s", i+1, name[i]+1 );
1581 strncpy( name[i], namebuf, B );
1589 void readData( FILE *fp, char name[][B], int nlen[], char **seq )
1592 static char *tmpseq = NULL;
1597 tmpseq = AllocateCharVec( N );
1604 for( i=0; i<njob; i++ )
1606 name[i][0] = '='; getc( fp );
1608 fgets( name[i]+1, B-2, fp );
1609 j = strlen( name[i] );
1610 if( name[i][j-1] != '\n' )
1611 ErrorExit( "Too long name\n" );
1614 myfgets( name[i]+1, B-2, fp );
1617 fprintf( stderr, "name[%d] = %s\n", i, name[i] );
1619 tmpseq = load1SeqWithoutName_realloc( fp );
1620 strcpy( seq[i], tmpseq );
1621 nlen[i] = strlen( seq[i] );
1624 if( dorp == 'd' && upperCase != -1 ) seqLower( njob, seq );
1630 void cutAlignment( FILE *fp, int **regtable, char **revtable, int *outtable, char **name, char **outseq )
1634 static char *tmpseq = NULL;
1635 static char *dumname = NULL;
1638 int startpos, endpos, seqlen;
1640 if( dumname == NULL )
1642 dumname = AllocateCharVec( N );
1650 for( i=0; i<njob; i++ )
1652 dumname[0] = '>'; getc( fp );
1653 myfgets( dumname+1, B-1, fp );
1654 tmpseq = load1SeqWithoutName_realloc_casepreserve( fp );
1658 // putc( '>', stdout );
1659 // puts( dumname+1 );
1662 strncat( name[npos], dumname, B-1 );
1663 name[npos][B-1] = 0;
1665 if( dorp == 'd' && upperCase != -1 ) seqLower( 1, &tmpseq );
1666 seqlen = strlen( tmpseq );
1668 for( j=0; j<5; j++ )
1670 if( regtable[0][j*2] == -1 && regtable[0][j*2+1] == -1 ) continue;
1672 startpos = regtable[0][j*2];
1673 endpos = regtable[0][j*2+1];
1674 if( startpos > endpos )
1676 endpos = regtable[0][j*2];
1677 startpos = regtable[0][j*2+1];
1680 if( startpos < 0 ) startpos = 0;
1681 if( endpos < 0 ) endpos = 0;
1682 if( endpos >= seqlen ) endpos = seqlen-1;
1683 if( startpos >= seqlen ) startpos = seqlen-1;
1685 // fprintf( stderr, "startpos = %d, endpos = %d\n", startpos, endpos );
1687 outlen = endpos - startpos+1;
1688 if( revtable[0][j] == 'f' )
1690 // fprintf( stderr, "regtable[%d][st] = %d\n", i, regtable[0][j*2+0] );
1691 // fprintf( stderr, "regtable[%d][en] = %d\n", i, regtable[0][j*2+1] );
1692 // fprintf( stderr, "outlen = %d\n", outlen );
1693 // fprintf( stdout, "%.*s\n", outlen, tmpseq+regtable[0][j*2] );
1694 strncpy( outseq[npos] + lpos, tmpseq+startpos, outlen );
1699 fs = AllocateCharVec( outlen+1 );
1700 rs = AllocateCharVec( outlen+1 );
1703 strncpy( fs, tmpseq+startpos, outlen );
1705 // fprintf( stdout, "%s\n", rs );
1706 strncpy( outseq[npos] + lpos, rs, outlen );
1711 outseq[npos][lpos] = 0;
1719 void cutData( FILE *fp, int **regtable, char **revtable, int *outtable )
1722 int outlen, seqlen, startpos, endpos;
1723 static char *tmpseq = NULL;
1724 static char *dumname = NULL;
1727 if( dumname == NULL )
1729 dumname = AllocateCharVec( N );
1735 for( i=0; i<njob; i++ )
1737 dumname[0] = '='; getc( fp );
1738 myfgets( dumname+1, B-2, fp );
1739 tmpseq = load1SeqWithoutName_realloc_casepreserve( fp );
1743 gappick_samestring( tmpseq );
1744 putc( '>', stdout );
1747 seqlen = strlen( tmpseq );
1749 if( dorp == 'd' && upperCase != -1 ) seqLower( 1, &tmpseq );
1750 for( j=0; j<5; j++ )
1752 if( regtable[i][j*2] == -1 && regtable[i][j*2+1] == -1 ) continue;
1754 startpos = regtable[i][j*2];
1755 endpos = regtable[i][j*2+1];
1757 if( startpos > endpos )
1759 endpos = regtable[i][j*2];
1760 startpos = regtable[i][j*2+1];
1763 if( startpos < 0 ) startpos = 0;
1764 if( endpos < 0 ) endpos = 0;
1765 if( endpos >= seqlen ) endpos = seqlen-1;
1766 if( startpos >= seqlen ) startpos = seqlen-1;
1768 outlen = endpos - startpos + 1;
1769 if( revtable[i][j] == 'f' )
1771 fprintf( stderr, "startpos = %d\n", startpos );
1772 fprintf( stderr, "endpos = %d\n", endpos );
1773 fprintf( stderr, "outlen = %d\n", outlen );
1774 fprintf( stdout, "%.*s\n", outlen, tmpseq+startpos );
1778 fs = AllocateCharVec( outlen+1 );
1779 rs = AllocateCharVec( outlen+1 );
1782 strncpy( fs, tmpseq+startpos, outlen );
1784 fprintf( stdout, "%s\n", rs );
1794 void catData( FILE *fp )
1797 static char *tmpseq = NULL;
1798 static char *dumname = NULL;
1801 if( dumname == NULL )
1803 dumname = AllocateCharVec( N );
1809 for( i=0; i<njob; i++ )
1811 dumname[0] = '='; getc( fp );
1812 myfgets( dumname+1, B-2, fp );
1815 fprintf( stdout, ">_numo_s_%08d_numo_e_", i+1 );
1819 putc( '>', stdout );
1822 tmpseq = load1SeqWithoutName_realloc( fp );
1823 if( dorp == 'd' && upperCase != -1 ) seqLower( 1, &tmpseq );
1829 int countATGC( char *s, int *total )
1848 if( c == 'a' || c == 't' || c == 'g' || c == 'c' || c == 'u' || c == 'n' )
1858 double countATGCbk( char *s )
1871 if( c == 'a' || c == 't' || c == 'g' || c == 'c' || c == 'u' || c == 'n' )
1876 return( (double)nATGC / nChar );
1880 int countnogaplen( char *seq )
1884 if( *seq++ != '-' ) val++;
1888 void getnumlen_casepreserve( FILE *fp, int *nlenminpt )
1894 char *tmpseq, *tmpname;
1896 tmpname = AllocateCharVec( N );
1897 njob = countKUorWA( fp );
1900 *nlenminpt = 99999999;
1903 for( i=0; i<njob; i++ )
1905 myfgets( tmpname, N-1, fp );
1906 tmpseq = load1SeqWithoutName_realloc_casepreserve( fp );
1907 tmp = strlen( tmpseq );
1908 if( tmp > nlenmax ) nlenmax = tmp;
1909 if( tmp < *nlenminpt ) *nlenminpt = tmp;
1910 atgcnum += countATGC( tmpseq, &nsite );
1915 atgcfreq = (double)atgcnum / total;
1916 // fprintf( stderr, "##### atgcfreq = %f\n", atgcfreq );
1917 if( dorp == NOTSPECIFIED )
1919 if( atgcfreq > 0.75 )
1932 void getnumlen_nogap( FILE *fp, int *nlenminpt )
1938 char *tmpseq, *tmpname;
1940 tmpname = AllocateCharVec( N );
1941 njob = countKUorWA( fp );
1944 *nlenminpt = 99999999;
1947 for( i=0; i<njob; i++ )
1949 myfgets( tmpname, N-1, fp );
1950 tmpseq = load1SeqWithoutName_realloc( fp );
1951 tmp = countnogaplen( tmpseq );
1952 if( tmp > nlenmax ) nlenmax = tmp;
1953 if( tmp < *nlenminpt ) *nlenminpt = tmp;
1954 atgcnum += countATGC( tmpseq, &nsite );
1959 atgcfreq = (double)atgcnum / total;
1960 fprintf( stderr, "##### atgcfreq = %f\n", atgcfreq );
1961 if( dorp == NOTSPECIFIED )
1963 if( atgcfreq > 0.75 )
1977 void getnumlen_nogap_outallreg( FILE *fp, int *nlenminpt )
1983 char *tmpseq, *tmpname;
1985 tmpname = AllocateCharVec( N );
1986 njob = countKUorWA( fp );
1989 *nlenminpt = 99999999;
1992 for( i=0; i<njob; i++ )
1994 myfgets( tmpname, N-1, fp );
1995 fprintf( stdout, "%s\n", tmpname );
1996 tmpseq = load1SeqWithoutName_realloc_casepreserve( fp );
1997 tmp = countnogaplen( tmpseq );
1998 fprintf( stdout, "%d\n", tmp );
1999 if( tmp > nlenmax ) nlenmax = tmp;
2000 if( tmp < *nlenminpt ) *nlenminpt = tmp;
2001 atgcnum += countATGC( tmpseq, &nsite );
2006 atgcfreq = (double)atgcnum / total;
2007 fprintf( stderr, "##### atgcfreq = %f\n", atgcfreq );
2008 if( dorp == NOTSPECIFIED )
2010 if( atgcfreq > 0.75 )
2023 void getnumlen_nogap_outallreg_web( FILE *fp, FILE *ofp, int *nlenminpt, int *isalignedpt )
2028 int alnlen = 0, alnlen_prev;
2030 char *tmpseq, *tmpname;
2032 tmpname = AllocateCharVec( N );
2033 njob = countKUorWA( fp );
2036 *nlenminpt = 99999999;
2041 for( i=0; i<njob; i++ )
2043 myfgets( tmpname, N-1, fp );
2044 // fprintf( stdout, "%s\n", tmpname );
2045 tmpseq = load1SeqWithoutName_realloc_casepreserve( fp );
2046 tmp = countnogaplen( tmpseq );
2047 // fprintf( stdout, "%d\n", tmp );
2048 if( tmp > nlenmax ) nlenmax = tmp;
2049 if( tmp < *nlenminpt ) *nlenminpt = tmp;
2050 atgcnum += countATGC( tmpseq, &nsite );
2053 alnlen = strlen( tmpseq );
2054 // fprintf( stdout, "##### alnlen, alnlen_prev = %d, %d\n", alnlen, alnlen_prev );
2055 if( i>0 && alnlen_prev != alnlen ) *isalignedpt = 0;
2056 alnlen_prev = alnlen;
2059 atgcfreq = (double)atgcnum / total;
2060 // fprintf( stderr, "##### atgcfreq = %f\n", atgcfreq );
2061 // if( dorp == NOTSPECIFIED ) // you kentou
2063 if( atgcfreq > 0.75 )
2078 fprintf( ofp, " <label for='s%d'><input type='checkbox' id='s%d' name='s%d' checked>%s</label>\n", i, i, i, tmpname );
2079 fprintf( ofp, "<span id='t%d-0' style='display:none'>", i );
2080 fprintf( ofp, " <a href='javascript:void(0)' onclick='ddcycle(this.form,\"t%d\")'>+reg</a>", i );
2081 fprintf( ofp, " Begin:<input type='text' name='b%d-0' size='8' value='1'> End:<input type='text' name='e%d-0' size='8' value='%d'>", i, i, tmp );
2082 if( dorp == 'd' ) fprintf( ofp, " <label for='r%d-0'><input type='checkbox' name='r%d-0' id='r%d-0'>Reverse</label>", i, i, i );
2083 fprintf( ofp, " Sequence Length:<input type='text' name='l%d' size='8' value='%d' readonly='readonly'>", i, tmp );
2084 fprintf( ofp, "\n</span>" );
2085 fprintf( ofp, "<span id='t%d-1' style='display:none'>", i );
2086 fprintf( ofp, " Begin:<input type='text' name='b%d-1' size='8' value=''> End:<input type='text' name='e%d-1' size='8' value=''>", i, i );
2087 if( dorp == 'd' ) fprintf( ofp, " <label for='r%d-1'><input type='checkbox' name='r%d-1' id='r%d-1'>Reverse</label>", i, i, i );
2088 fprintf( ofp, "\n</span>" );
2089 fprintf( ofp, "<span id='t%d-2' style='display:none'>", i );
2090 fprintf( ofp, " Begin:<input type='text' name='b%d-2' size='8' value=''> End:<input type='text' name='e%d-2' size='8' value=''>", i, i );
2091 if( dorp == 'd' ) fprintf( ofp, " <label for='r%d-2'><input type='checkbox' name='r%d-2' id='r%d-2'>Reverse</label>", i, i, i );
2092 fprintf( ofp, "\n</span>" );
2093 fprintf( ofp, "<span id='t%d-3' style='display:none'>", i );
2094 fprintf( ofp, " Begin:<input type='text' name='b%d-3' size='8' value=''> End:<input type='text' name='e%d-3' size='8' value=''>", i, i );
2095 if( dorp == 'd' ) fprintf( ofp, " <label for='r%d-3'><input type='checkbox' name='r%d-3' id='r%d-3'>Reverse</label>", i, i, i );
2096 fprintf( ofp, "\n</span>" );
2097 fprintf( ofp, "<span id='t%d-4' style='display:none'>", i );
2098 fprintf( ofp, " Begin:<input type='text' name='b%d-4' size='8' value=''> End:<input type='text' name='e%d-4' size='8' value=''>", i, i );
2099 if( dorp == 'd' ) fprintf( ofp, " <label for='r%d-4'><input type='checkbox' name='r%d-4' id='r%d-4'>Reverse</label>", i, i, i );
2100 fprintf( ofp, "\n</span>" );
2103 atgcfreq = (double)atgcnum / total;
2104 fprintf( stderr, "##### atgcfreq = %f\n", atgcfreq );
2105 // if( dorp == NOTSPECIFIED ) // you kentou
2107 if( atgcfreq > 0.75 )
2120 fprintf( ofp, "\n" );
2121 fprintf( ofp, "<span id='tall-0' style='display:none'>" );
2122 fprintf( ofp, "Cut the alignment\n" );
2123 fprintf( ofp, " <a href='javascript:void(0)' onclick='ddcycle(this.form,\"tall\")'>+reg</a>" );
2124 fprintf( ofp, " Begin:<input type='text' name='ball-0' size='8' value='1'> End:<input type='text' name='eall-0' size='8' value='%d'>", alnlen );
2125 if( dorp == 'd' ) fprintf( ofp, " <label for='rall-0'><input type='checkbox' name='rall-0' id='rall-0'>Reverse</label>" );
2126 fprintf( ofp, " Alignment length:<input type='text' name='lall' size='8' value='%d' readonly='readonly'>", alnlen );
2127 fprintf( ofp, "\n</span>" );
2128 fprintf( ofp, "<span id='tall-1' style='display:none'>" );
2129 fprintf( ofp, " Begin:<input type='text' name='ball-1' size='8' value=''> End:<input type='text' name='eall-1' size='8' value=''>" );
2130 if( dorp == 'd' ) fprintf( ofp, " <label for='rall-1'><input type='checkbox' name='rall-1' id='rall-1'>Reverse</label>" );
2131 fprintf( ofp, "\n</span>" );
2132 fprintf( ofp, "<span id='tall-2' style='display:none'>" );
2133 fprintf( ofp, " Begin:<input type='text' name='ball-2' size='8' value=''> End:<input type='text' name='eall-1' size='8' value=''>" );
2134 if( dorp == 'd' ) fprintf( ofp, " <label for='rall-2'><input type='checkbox' name='rall-2' id='rall-2'>Reverse</label>" );
2135 fprintf( ofp, "\n</span>" );
2136 fprintf( ofp, "<span id='tall-3' style='display:none'>" );
2137 fprintf( ofp, " Begin:<input type='text' name='ball-3' size='8' value=''> End:<input type='text' name='eall-1' size='8' value=''>" );
2138 if( dorp == 'd' ) fprintf( ofp, " <label for='rall-3'><input type='checkbox' name='rall-3' id='rall-3'>Reverse</label>" );
2139 fprintf( ofp, "\n</span>" );
2140 fprintf( ofp, "<span id='tall-4' style='display:none'>" );
2141 fprintf( ofp, " Begin:<input type='text' name='ball-4' size='8' value=''> End:<input type='text' name='eall-1' size='8' value=''>" );
2142 if( dorp == 'd' ) fprintf( ofp, " <label for='rall-4'><input type='checkbox' name='rall-4' id='rall-4'>Reverse</label>" );
2143 fprintf( ofp, "\n</span>" );
2148 void getnumlen( FILE *fp )
2157 tmpname = AllocateCharVec( N );
2158 njob = countKUorWA( fp );
2163 for( i=0; i<njob; i++ )
2165 myfgets( tmpname, N-1, fp );
2166 tmpseq = load1SeqWithoutName_realloc( fp );
2167 tmp = strlen( tmpseq );
2168 if( tmp > nlenmax ) nlenmax = tmp;
2169 atgcnum += countATGC( tmpseq, &nsite );
2171 // fprintf( stderr, "##### total = %d\n", total );
2175 atgcfreq = (double)atgcnum / total;
2176 // fprintf( stderr, "##### atgcfreq = %f\n", atgcfreq );
2177 if( dorp == NOTSPECIFIED )
2179 if( atgcfreq > 0.75 )
2195 void WriteGapFill( FILE *fp, int locnjob, char name[][B], int nlen[M], char **aseq )
2201 static char buff[N];
2204 fprintf( stderr, "IMAKARA KAKU\n" );
2207 for( i=0; i<locnjob; i++ )
2209 int len = strlen( aseq[i] );
2210 if( nlenmax < len ) nlenmax = len;
2213 for( i=0; i<nlenmax; i++ ) gap[i] = '-';
2216 fprintf( fp, "%5d", locnjob );
2217 fprintf( fp, "\n" );
2219 for( i=0; i<locnjob; i++ )
2221 strcpy( buff, aseq[i] );
2222 strncat( buff, gap, nlenmax-strlen( aseq[i] ) );
2224 nalen[i] = strlen( buff );
2225 fprintf( fp, "%s\n", name[i] );
2226 fprintf( fp, "%5d\n", nalen[i] );
2227 for( j=0; j<nalen[i]; j=j+C )
2229 strncpy_caseC( b, buff+j, C ); b[C] = 0;
2230 fprintf( fp, "%s\n",b );
2234 fprintf( stderr, "nalen[0] = %d\n", nalen[0] );
2237 fprintf( stderr, "KAKIOWATTA\n" );
2241 void writeDataforgaln( FILE *fp, int locnjob, char **name, int *nlen, char **aseq )
2246 for( i=0; i<locnjob; i++ )
2248 nalen = strlen( aseq[i] );
2249 fprintf( fp, ">%s\n", name[i]+1 );
2250 for( j=0; j<nalen; j=j+C )
2253 strncpy( b, aseq[i]+j, C ); b[C] = 0;
2254 fprintf( fp, "%s\n",b );
2256 fprintf( fp, "%.*s\n", C, aseq[i]+j );
2262 void writeData_pointer( FILE *fp, int locnjob, char **name, int *nlen, char **aseq )
2267 for( i=0; i<locnjob; i++ )
2270 fprintf( stderr, "i = %d in writeData\n", i );
2272 nalen = strlen( aseq[i] );
2273 fprintf( fp, ">%s\n", name[i]+1 );
2274 for( j=0; j<nalen; j=j+C )
2277 strncpy( b, aseq[i]+j, C ); b[C] = 0;
2278 fprintf( fp, "%s\n",b );
2280 fprintf( fp, "%.*s\n", C, aseq[i]+j );
2286 void writeData( FILE *fp, int locnjob, char name[][B], int nlen[], char **aseq )
2291 for( i=0; i<locnjob; i++ )
2294 fprintf( stderr, "i = %d in writeData\n", i );
2296 nalen = strlen( aseq[i] );
2297 fprintf( fp, ">%s\n", name[i]+1 );
2298 for( j=0; j<nalen; j=j+C )
2301 strncpy( b, aseq[i]+j, C ); b[C] = 0;
2302 fprintf( fp, "%s\n",b );
2304 fprintf( fp, "%.*s\n", C, aseq[i]+j );
2311 void write1seq( FILE *fp, char *aseq )
2316 nalen = strlen( aseq );
2317 for( j=0; j<nalen; j=j+C )
2318 fprintf( fp, "%.*s\n", C, aseq+j );
2323 void readhat2_floathalf_pointer( FILE *fp, int nseq, char **name, float **mtx )
2329 fgets( b, B, fp ); b[5] = 0; nseq0 = atoi( b ); if( nseq != nseq0 ) ErrorExit( "hat2 is wrong." );
2331 for( i=0; i<nseq; i++ )
2334 getaline_fp_eof( b, B, fp );
2336 myfgets( b, B-2, fp );
2339 j = MIN( strlen( b+6 ), 10 );
2340 if( strncmp( name[i], b+6 , j ) )
2342 fprintf( stderr, "Error in hat2\n" );
2343 fprintf( stderr, "%s != %s\n", b, name[i] );
2348 for( i=0; i<nseq-1; i++ ) for( j=i+1; j<nseq; j++ )
2350 mtx[i][j-i] = ( input_new( fp, D ) );
2353 void readhat2_floathalf( FILE *fp, int nseq, char name[M][B], float **mtx )
2359 fgets( b, B, fp ); b[5] = 0; nseq0 = atoi( b ); if( nseq != nseq0 ) ErrorExit( "hat2 is wrong." );
2361 for( i=0; i<nseq; i++ )
2364 getaline_fp_eof( b, B, fp );
2366 myfgets( b, B-2, fp );
2369 j = MIN( strlen( b+6 ), 10 );
2370 if( strncmp( name[i], b+6 , j ) )
2372 fprintf( stderr, "Error in hat2\n" );
2373 fprintf( stderr, "%s != %s\n", b, name[i] );
2378 for( i=0; i<nseq-1; i++ ) for( j=i+1; j<nseq; j++ )
2380 mtx[i][j-i] = ( input_new( fp, D ) );
2383 void readhat2_float( FILE *fp, int nseq, char name[M][B], float **mtx )
2389 fgets( b, B, fp ); b[5] = 0; nseq0 = atoi( b ); if( nseq != nseq0 ) ErrorExit( "hat2 is wrong." );
2391 for( i=0; i<nseq; i++ )
2394 getaline_fp_eof( b, B, fp );
2396 myfgets( b, B-2, fp );
2399 j = MIN( strlen( b+6 ), 10 );
2400 if( strncmp( name[i], b+6 , j ) )
2402 fprintf( stderr, "Error in hat2\n" );
2403 fprintf( stderr, "%s != %s\n", b, name[i] );
2408 for( i=0; i<nseq-1; i++ ) for( j=i+1; j<nseq; j++ )
2410 mtx[i][j] = ( input_new( fp, D ) );
2413 void readhat2_int( FILE *fp, int nseq, char name[M][B], int **mtx )
2419 fgets( b, B, fp ); b[5] = 0; nseq0 = atoi( b ); if( nseq != nseq0 ) ErrorExit( "hat2 is wrong." );
2421 for( i=0; i<nseq; i++ )
2424 getaline_fp_eof( b, B, fp );
2426 myfgets( b, B-2, fp );
2429 j = MIN( strlen( b+6 ), 10 );
2430 if( strncmp( name[i], b+6 , j ) )
2432 fprintf( stderr, "Error in hat2\n" );
2433 fprintf( stderr, "%s != %s\n", b, name[i] );
2438 for( i=0; i<nseq-1; i++ ) for( j=i+1; j<nseq; j++ )
2440 mtx[i][j] = (int)( input_new( fp, D ) * INTMTXSCALE + 0.5 );
2444 void readhat2_pointer( FILE *fp, int nseq, char **name, double **mtx )
2450 fgets( b, B, fp ); b[5] = 0; nseq0 = atoi( b ); if( nseq != nseq0 ) ErrorExit( "hat2 is wrong." );
2452 for( i=0; i<nseq; i++ )
2455 getaline_fp_eof( b, B, fp );
2457 myfgets( b, B-2, fp );
2460 j = MIN( strlen( b+6 ), 10 );
2461 if( strncmp( name[i], b+6 , j ) )
2463 fprintf( stderr, "Error in hat2\n" );
2464 fprintf( stderr, "%s != %s\n", b, name[i] );
2469 for( i=0; i<nseq-1; i++ ) for( j=i+1; j<nseq; j++ )
2471 mtx[i][j] = (double)input_new( fp, D);
2474 void readhat2( FILE *fp, int nseq, char name[M][B], double **mtx )
2480 fgets( b, B, fp ); b[5] = 0; nseq0 = atoi( b ); if( nseq != nseq0 ) ErrorExit( "hat2 is wrong." );
2482 for( i=0; i<nseq; i++ )
2485 getaline_fp_eof( b, B, fp );
2487 myfgets( b, B-2, fp );
2490 j = MIN( strlen( b+6 ), 10 );
2491 if( strncmp( name[i], b+6 , j ) )
2493 fprintf( stderr, "Error in hat2\n" );
2494 fprintf( stderr, "%s != %s\n", b, name[i] );
2499 for( i=0; i<nseq-1; i++ ) for( j=i+1; j<nseq; j++ )
2501 mtx[i][j] = (double)input_new( fp, D);
2505 void WriteFloatHat2_pointer_halfmtx( FILE *hat2p, int locnjob, char **name, float **mtx )
2509 for( i=0; i<locnjob-1; i++ ) for( j=1; j<locnjob-i; j++ ) if( mtx[i][j] > max ) max = mtx[i][j];
2511 fprintf( hat2p, "%5d\n", 1 );
2512 fprintf( hat2p, "%5d\n", locnjob );
2513 fprintf( hat2p, " %#6.3f\n", max * 2.5 );
2515 for( i=0; i<locnjob; i++ ) fprintf( hat2p, "%4d. %s\n", i+1, name[i] );
2516 for( i=0; i<locnjob; i++ )
2518 for( j=i+1; j<njob; j++ )
2520 fprintf( hat2p, "%#6.3f", mtx[i][j-i] );
2522 if( ijsa % 12 == 0 || ijsa == locnjob-i-1 ) fprintf( hat2p, "\n" );
2527 void WriteFloatHat2_pointer( FILE *hat2p, int locnjob, char **name, float **mtx )
2531 for( i=0; i<locnjob-1; i++ ) for( j=1; j<locnjob-i; j++ ) if( mtx[i][j] > max ) max = mtx[i][j];
2533 fprintf( hat2p, "%5d\n", 1 );
2534 fprintf( hat2p, "%5d\n", locnjob );
2535 fprintf( hat2p, " %#6.3f\n", max * 2.5 );
2537 for( i=0; i<locnjob; i++ ) fprintf( hat2p, "%4d. %s\n", i+1, name[i] );
2538 for( i=0; i<locnjob; i++ )
2540 for( j=1; j<locnjob-i; j++ )
2542 fprintf( hat2p, "%#6.3f", mtx[i][j] );
2543 if( j % 12 == 0 || j == locnjob-i-1 ) fprintf( hat2p, "\n" );
2548 void WriteFloatHat2( FILE *hat2p, int locnjob, char name[M][B], float **mtx )
2552 for( i=0; i<locnjob-1; i++ ) for( j=1; j<locnjob-i; j++ ) if( mtx[i][j] > max ) max = mtx[i][j];
2554 fprintf( hat2p, "%5d\n", 1 );
2555 fprintf( hat2p, "%5d\n", locnjob );
2556 fprintf( hat2p, " %#6.3f\n", max * 2.5 );
2558 for( i=0; i<locnjob; i++ ) fprintf( hat2p, "%4d. %s\n", i+1, name[i] );
2559 for( i=0; i<locnjob; i++ )
2561 for( j=1; j<locnjob-i; j++ )
2563 fprintf( hat2p, "%#6.3f", mtx[i][j] );
2564 if( j % 12 == 0 || j == locnjob-i-1 ) fprintf( hat2p, "\n" );
2569 void WriteHat2_int( FILE *hat2p, int locnjob, char name[M][B], int **mtx )
2573 for( i=0; i<locnjob-1; i++ ) for( j=i+1; j<locnjob; j++ ) if( mtx[i][j] > max ) max = mtx[i][j];
2576 fprintf( hat2p, "%5d\n", 1 );
2577 fprintf( hat2p, "%5d\n", locnjob );
2578 fprintf( hat2p, " %#6.3f\n", max * 2.5 );
2580 for( i=0; i<locnjob; i++ ) fprintf( hat2p, "%4d. %s\n", i+1, name[i] );
2581 for( i=0; i<locnjob-1; i++ )
2583 for( j=i+1; j<locnjob; j++ )
2585 fprintf( hat2p, "%#6.3f", (float)mtx[i][j] / INTMTXSCALE );
2586 if( (j-i) % 12 == 0 || j == locnjob-1 ) fprintf( hat2p, "\n" );
2590 void WriteHat2_pointer( FILE *hat2p, int locnjob, char **name, double **mtx )
2594 for( i=0; i<locnjob-1; i++ ) for( j=i+1; j<locnjob; j++ ) if( mtx[i][j] > max ) max = mtx[i][j];
2596 fprintf( hat2p, "%5d\n", 1 );
2597 fprintf( hat2p, "%5d\n", locnjob );
2598 fprintf( hat2p, " %#6.3f\n", max * 2.5 );
2600 for( i=0; i<locnjob; i++ ) fprintf( hat2p, "%4d. %s\n", i+1, name[i] );
2601 for( i=0; i<locnjob-1; i++ )
2603 for( j=i+1; j<locnjob; j++ )
2605 fprintf( hat2p, "%#6.3f", mtx[i][j] );
2606 if( (j-i) % 12 == 0 || j == locnjob-1 ) fprintf( hat2p, "\n" );
2610 void WriteHat2( FILE *hat2p, int locnjob, char name[M][B], double **mtx )
2614 for( i=0; i<locnjob-1; i++ ) for( j=i+1; j<locnjob; j++ ) if( mtx[i][j] > max ) max = mtx[i][j];
2616 fprintf( hat2p, "%5d\n", 1 );
2617 fprintf( hat2p, "%5d\n", locnjob );
2618 fprintf( hat2p, " %#6.3f\n", max * 2.5 );
2620 for( i=0; i<locnjob; i++ ) fprintf( hat2p, "%4d. %s\n", i+1, name[i] );
2621 for( i=0; i<locnjob-1; i++ )
2623 for( j=i+1; j<locnjob; j++ )
2625 fprintf( hat2p, "%#6.3f", mtx[i][j] );
2626 if( (j-i) % 12 == 0 || j == locnjob-1 ) fprintf( hat2p, "\n" );
2632 void WriteHat2plain( FILE *hat2p, int locnjob, double **mtx )
2637 for( i=0; i<ilim; i++ )
2639 fprintf( hat2p, "%d-%d d=%.3f\n", i+1, i+1, 0.0 );
2640 for( j=i+1; j<locnjob; j++ )
2642 fprintf( hat2p, "%d-%d d=%.3f\n", i+1, j+1, mtx[i][j] );
2648 int ReadFasta_sub( FILE *fp, double *dis, int nseq, char name[M][B] )
2655 for( i=0; i<10000000 && count<nseq; i++ )
2657 fgets( b, B-1, fp );
2658 if( !strncmp( "+==========+", b, 12 ) )
2660 junban[count] = atoi( b+12 );
2665 for( i=0; i<nseq; i++ ) dis[i] = 0.0;
2667 for( i=0; i<100000 && count<nseq; i++ )
2669 if( fgets( b, B-1, fp ) ) break;
2670 if( !strncmp( name[junban[count]], b, 20 ) )
2672 fgets( b, B-1, fp );
2673 dis[junban[count]] = atof( b );
2681 int ReadSsearch( FILE *fp, double *dis, int nseq, char name[M][B] )
2689 for( i=0; i<10000000 && count<nseq; i++ )
2691 fgets( b, B-1, fp );
2692 if( !strncmp( "+==========+", b, 12 ) )
2694 junban[count] = atoi( b+12 );
2695 sscanf( b+75, "%d", &opt );
2696 dis[junban[count]] = (double)opt;
2703 for( i=0; i<100000 && count<nseq; i++ )
2705 fgets( b, B-1, fp );
2706 if( !strncmp( name[junban[count]], b, 20 ) )
2708 dis[junban[count]] = atof( b+65 );
2716 int ReadBlastm7_avscore( FILE *fp, double *dis, int nin )
2722 double score, sumscore;
2724 int qstart, qend, tstart, tend;
2725 double scorepersite;
2726 static char qal[N], tal[N], al[N];
2729 junban = calloc( nin, sizeof( int ) );
2736 scorepersite = 0.0; // by D.Mathog, a guess
2740 if( feof( fp ) ) break;
2742 while( fgets( b, B-1, fp ) )
2744 if( !strncmp( " <Hit_def>", b, 19 ) || !strncmp( " <Hsp_num>", b, 23 ) ) break;
2747 if( !strncmp( " <Hit_def>", b, 19 ) )
2749 junban[count] = atoi( b+31 );
2754 while( fgets( b, B-1, fp ) )
2755 if( !strncmp( " <Hsp_score>", b, 25 ) ) break;
2761 while( fgets( b, B-1, fp ) )
2762 if( !strncmp( " <Hsp_query-from>", b, 30 ) ) break;
2764 qstart = atoi( pt ) - 1;
2767 while( fgets( b, B-1, fp ) )
2768 if( !strncmp( " <Hsp_query-to>", b, 28 ) ) break;
2770 qend = atoi( pt ) - 1;
2773 while( fgets( b, B-1, fp ) )
2774 if( !strncmp( " <Hsp_hit-from>", b, 28 ) ) break;
2776 tstart = atoi( pt ) - 1;
2779 while( fgets( b, B-1, fp ) )
2780 if( !strncmp( " <Hsp_hit-to>", b, 26 ) ) break;
2782 tend = atoi( pt ) - 1;
2785 while( fgets( b, B-1, fp ) )
2786 if( !strncmp( " <Hsp_align-len>", b, 29 ) ) break;
2792 while( fgets( al, N-100, fp ) )
2793 if( !strncmp( " <Hsp_qseq>", al, 24 ) ) break;
2795 strcpy( qal, al+24 );
2797 while( *++pt != '<' )
2802 while( fgets( al, N-100, fp ) )
2803 if( !strncmp( " <Hsp_hseq>", al, 24 ) ) break;
2805 strcpy( tal, al+24 );
2807 while( *++pt != '<' )
2812 // fprintf( stderr, "t=%d, score = %f, qstart=%d, qend=%d, tstart=%d, tend=%d, overlapaa=%d\n", junban[count], score, qstart, qend, tstart, tend, overlapaa );
2815 while( fgets( b, B-1, fp ) )
2816 if( !strncmp( " </Hsp>:", b, 18 ) ) break;
2819 fgets( b, B-1, fp );
2822 if( !strncmp( " </Hit_hsps>", b, 21 ) )
2824 dis[junban[count++]] = sumscore;
2826 fgets( b, B-1, fp );
2827 fgets( b, B-1, fp );
2828 scorepersite = sumscore / sumlen;
2829 if( scorepersite != (int)scorepersite )
2831 fprintf( stderr, "ERROR! sumscore=%f, sumlen=%f, and scorepersite=%f\n", sumscore, sumlen, scorepersite );
2835 if( !strncmp( " </Iteration_hits>", b, 23 ) ) break;
2841 return (int)scorepersite;
2843 int ReadBlastm7_scoreonly( FILE *fp, double *dis, int nin )
2850 double score, sumscore;
2851 int qstart, qend, tstart, tend;
2852 static char qal[N], tal[N], al[N];
2855 junban = calloc( nin, sizeof( int ) );
2863 if( feof( fp ) ) break;
2865 while( fgets( b, B-1, fp ) )
2867 if( !strncmp( " <Hit_def>", b, 19 ) || !strncmp( " <Hsp_num>", b, 23 ) ) break;
2870 if( !strncmp( " <Hit_def>", b, 19 ) )
2872 junban[count] = atoi( b+31 );
2877 while( fgets( b, B-1, fp ) )
2878 if( !strncmp( " <Hsp_score>", b, 25 ) ) break;
2884 while( fgets( b, B-1, fp ) )
2885 if( !strncmp( " <Hsp_query-from>", b, 30 ) ) break;
2887 qstart = atoi( pt ) - 1;
2890 while( fgets( b, B-1, fp ) )
2891 if( !strncmp( " <Hsp_query-to>", b, 28 ) ) break;
2893 qend = atoi( pt ) - 1;
2896 while( fgets( b, B-1, fp ) )
2897 if( !strncmp( " <Hsp_hit-from>", b, 28 ) ) break;
2899 tstart = atoi( pt ) - 1;
2902 while( fgets( b, B-1, fp ) )
2903 if( !strncmp( " <Hsp_hit-to>", b, 26 ) ) break;
2905 tend = atoi( pt ) - 1;
2908 while( fgets( b, B-1, fp ) )
2909 if( !strncmp( " <Hsp_align-len>", b, 29 ) ) break;
2911 overlapaa = atoi( pt );
2914 while( fgets( al, N-100, fp ) )
2915 if( !strncmp( " <Hsp_qseq>", al, 24 ) ) break;
2917 strcpy( qal, al+24 );
2919 while( *++pt != '<' )
2924 while( fgets( al, N-100, fp ) )
2925 if( !strncmp( " <Hsp_hseq>", al, 24 ) ) break;
2927 strcpy( tal, al+24 );
2929 while( *++pt != '<' )
2934 // fprintf( stderr, "t=%d, score = %f, qstart=%d, qend=%d, tstart=%d, tend=%d, overlapaa=%d\n", junban[count], score, qstart, qend, tstart, tend, overlapaa );
2936 // nlocalhom += addlocalhom_r( qal, tal, localhomlist+junban[count], qstart, tstart, score, overlapaa, nlocalhom );
2938 while( fgets( b, B-1, fp ) )
2939 if( !strncmp( " </Hsp>:", b, 18 ) ) break;
2942 fgets( b, B-1, fp );
2945 if( !strncmp( " </Hit_hsps>", b, 21 ) )
2947 dis[junban[count++]] = sumscore;
2949 fgets( b, B-1, fp );
2950 fgets( b, B-1, fp );
2951 if( !strncmp( " </Iteration_hits>", b, 23 ) ) break;
2960 int ReadBlastm7( FILE *fp, double *dis, int qmem, char name[M][B], LocalHom *localhomlist )
2965 static int junban[M];
2967 double score, sumscore;
2968 int qstart, qend, tstart, tend;
2969 static char qal[N], tal[N], al[N];
2981 if( feof( fp ) ) break;
2983 while( fgets( b, B-1, fp ) )
2985 if( !strncmp( " <Hit_def>", b, 19 ) || !strncmp( " <Hsp_num>", b, 23 ) ) break;
2988 if( !strncmp( " <Hit_def>", b, 19 ) )
2990 junban[count] = atoi( b+31 );
2995 while( fgets( b, B-1, fp ) )
2996 if( !strncmp( " <Hsp_score>", b, 25 ) ) break;
3002 while( fgets( b, B-1, fp ) )
3003 if( !strncmp( " <Hsp_query-from>", b, 30 ) ) break;
3005 qstart = atoi( pt ) - 1;
3008 while( fgets( b, B-1, fp ) )
3009 if( !strncmp( " <Hsp_query-to>", b, 28 ) ) break;
3011 qend = atoi( pt ) - 1;
3014 while( fgets( b, B-1, fp ) )
3015 if( !strncmp( " <Hsp_hit-from>", b, 28 ) ) break;
3017 tstart = atoi( pt ) - 1;
3020 while( fgets( b, B-1, fp ) )
3021 if( !strncmp( " <Hsp_hit-to>", b, 26 ) ) break;
3023 tend = atoi( pt ) - 1;
3026 while( fgets( b, B-1, fp ) )
3027 if( !strncmp( " <Hsp_align-len>", b, 29 ) ) break;
3029 overlapaa = atoi( pt );
3032 while( fgets( al, N-100, fp ) )
3033 if( !strncmp( " <Hsp_qseq>", al, 24 ) ) break;
3035 strcpy( qal, al+24 );
3037 while( *++pt != '<' )
3042 while( fgets( al, N-100, fp ) )
3043 if( !strncmp( " <Hsp_hseq>", al, 24 ) ) break;
3045 strcpy( tal, al+24 );
3047 while( *++pt != '<' )
3052 // fprintf( stderr, "t=%d, score = %f, qstart=%d, qend=%d, tstart=%d, tend=%d, overlapaa=%d\n", junban[count], score, qstart, qend, tstart, tend, overlapaa );
3054 nlocalhom += addlocalhom_r( qal, tal, localhomlist+junban[count], qstart, tstart, score, overlapaa, nlocalhom );
3056 while( fgets( b, B-1, fp ) )
3057 if( !strncmp( " </Hsp>:", b, 18 ) ) break;
3060 fgets( b, B-1, fp );
3063 if( !strncmp( " </Hit_hsps>", b, 21 ) )
3065 dis[junban[count++]] = sumscore;
3067 fgets( b, B-1, fp );
3068 fgets( b, B-1, fp );
3069 if( !strncmp( " </Iteration_hits>", b, 23 ) ) break;
3075 int ReadFasta34noalign( FILE *fp, double *dis, int qmem, char name[M][B], LocalHom *localhomlist )
3080 static int junban[M];
3087 for( i=0; i<10000000 && count<nseq; i++ )
3089 while( !feof( fp ) )
3092 fgets( b, B-1, fp );
3093 if( !strncmp( "+==========+", b, 12 ) )
3095 junban[count] = atoi( b+12 );
3097 pt = strchr( b, ')' ) + 1;
3098 sscanf( pt, "%d %lf %lf", &opt, &bits, &z );
3099 dis[junban[count]] = (double)opt;
3107 int ReadFasta34m10_nuc( FILE *fp, double *dis, int qmem, char name[M][B], LocalHom *localhomlist )
3112 static int junban[M];
3114 int opt, qstart, qend, tstart, tend;
3116 int qal_display_start, tal_display_start;
3117 static char qal[N], tal[N];
3124 for( i=0; i<10000000 && count<nseq; i++ )
3126 while( !feof( fp ) )
3129 fgets( b, B-1, fp );
3130 if( !strncmp( "+==========+", b, 12 ) )
3132 junban[count] = atoi( b+12 );
3134 if( strchr( b, 'r' ) ) continue;
3136 pt = strchr( b, ']' ) + 1;
3137 sscanf( pt, "%d %lf %lf", &opt, &bits, &z );
3138 dis[junban[count]] = (double)opt;
3142 else if( 0 == strncmp( ">>+==========+", b, 14 ) )
3148 if( !count ) return -1;
3153 if( strncmp( ">>+==========+", b, 14 ) )
3155 fgets( b, B-1, fp );
3156 if( feof( fp ) ) break;
3159 junban[count++] = atoi( b+14 );
3160 // fprintf( stderr, "t = %d\n", atoi( b+14 ) );
3161 while( fgets( b, B-1, fp ) )
3162 if( !strncmp( "; fa_opt:", b, 9 ) || !strncmp( "; sw_s-w opt:", b, 13 ) ) break;
3163 pt = strstr( b, ":" ) +1;
3167 while( fgets( b, B-1, fp ) )
3168 if( !strncmp( "_overlap:", b+4, 9 ) ) break;
3169 pt = strstr( b, ":" ) +1;
3170 overlapaa = atoi( pt );
3172 while( fgets( b, B-1, fp ) )
3173 if( !strncmp( "_start:", b+4, 7 ) ) break;
3174 pt = strstr( b, ":" ) +1;
3175 qstart = atoi( pt ) - 1;
3177 while( fgets( b, B-1, fp ) )
3178 if( !strncmp( "_stop:", b+4, 6 ) ) break;
3179 pt = strstr( b, ":" ) +1;
3180 qend = atoi( pt ) - 1;
3182 while( fgets( b, B-1, fp ) )
3183 if( !strncmp( "_display_start:", b+4, 15 ) ) break;
3184 pt = strstr( b, ":" ) +1;
3185 qal_display_start = atoi( pt ) - 1;
3188 while( (c = fgetc( fp )) )
3195 if( isalpha( c ) || c == '-' )
3200 while( fgets( b, B-1, fp ) )
3201 if( !strncmp( "_start:", b+4, 7 ) ) break;
3202 pt = strstr( b, ":" ) + 1;
3203 tstart = atoi( pt ) - 1;
3205 while( fgets( b, B-1, fp ) )
3206 if( !strncmp( "_stop:", b+4, 6 ) ) break;
3207 pt = strstr( b, ":" ) + 1;
3208 tend = atoi( pt ) - 1;
3210 while( fgets( b, B-1, fp ) )
3211 if( !strncmp( "_display_start:", b+4, 15 ) ) break;
3212 pt = strstr( b, ":" ) + 1;
3213 tal_display_start = atoi( pt ) - 1;
3216 while( ( c = fgetc( fp ) ) )
3223 if( isalpha( c ) || c == '-' )
3228 // fprintf( stderr, "(%d-%d:%d-%d)\n", qstart, qend, tstart, tend );
3229 // fprintf( stderr, "qal_display_start = %d, tal_display_start = %d\n", qal_display_start, tal_display_start );
3231 // fprintf( stderr, "qal = %s\n", qal );
3232 // fprintf( stderr, "tal = %s\n", tal );
3234 qal2 = cutal( qal, qal_display_start, qstart, qend );
3235 tal2 = cutal( tal, tal_display_start, tstart, tend );
3237 // fprintf( stderr, "qal2 = %s\n", qal2 );
3238 // fprintf( stderr, "tal2 = %s\n", tal2 );
3240 // fprintf( stderr, "putting %d - %d, opt = %d\n", qmem, junban[count-1], opt );
3241 putlocalhom( qal2, tal2, localhomlist+junban[count-1], qstart, tstart, opt, overlapaa );
3243 // fprintf( stderr, "count = %d\n", count );
3246 int ReadFasta34m10( FILE *fp, double *dis, int qmem, char name[M][B], LocalHom *localhomlist )
3251 static int junban[M];
3253 int opt, qstart, qend, tstart, tend;
3255 int qal_display_start, tal_display_start;
3256 static char qal[N], tal[N];
3263 for( i=0; i<10000000 && count<nseq; i++ )
3265 while( !feof( fp ) )
3268 fgets( b, B-1, fp );
3269 if( !strncmp( "+==========+", b, 12 ) )
3271 junban[count] = atoi( b+12 );
3273 pt = strchr( b, ')' ) + 1;
3274 sscanf( pt, "%d %lf %lf", &opt, &bits, &z );
3275 dis[junban[count]] = (double)opt;
3279 else if( 0 == strncmp( ">>+==========+", b, 14 ) )
3285 if( !count ) return -1;
3290 if( strncmp( ">>+==========+", b, 14 ) )
3292 fgets( b, B-1, fp );
3293 if( feof( fp ) ) break;
3296 junban[count++] = atoi( b+14 );
3297 // fprintf( stderr, "t = %d\n", atoi( b+14 ) );
3298 while( fgets( b, B-1, fp ) )
3299 if( !strncmp( "; fa_opt:", b, 9 ) || !strncmp( "; sw_s-w opt:", b, 13 ) ) break;
3300 pt = strstr( b, ":" ) +1;
3304 while( fgets( b, B-1, fp ) )
3305 if( !strncmp( "_overlap:", b+4, 9 ) ) break;
3306 pt = strstr( b, ":" ) +1;
3307 overlapaa = atoi( pt );
3309 while( fgets( b, B-1, fp ) )
3310 if( !strncmp( "_start:", b+4, 7 ) ) break;
3311 pt = strstr( b, ":" ) +1;
3312 qstart = atoi( pt ) - 1;
3314 while( fgets( b, B-1, fp ) )
3315 if( !strncmp( "_stop:", b+4, 6 ) ) break;
3316 pt = strstr( b, ":" ) +1;
3317 qend = atoi( pt ) - 1;
3319 while( fgets( b, B-1, fp ) )
3320 if( !strncmp( "_display_start:", b+4, 15 ) ) break;
3321 pt = strstr( b, ":" ) +1;
3322 qal_display_start = atoi( pt ) - 1;
3325 while( (c = fgetc( fp )) )
3332 if( isalpha( c ) || c == '-' )
3337 while( fgets( b, B-1, fp ) )
3338 if( !strncmp( "_start:", b+4, 7 ) ) break;
3339 pt = strstr( b, ":" ) + 1;
3340 tstart = atoi( pt ) - 1;
3342 while( fgets( b, B-1, fp ) )
3343 if( !strncmp( "_stop:", b+4, 6 ) ) break;
3344 pt = strstr( b, ":" ) + 1;
3345 tend = atoi( pt ) - 1;
3347 while( fgets( b, B-1, fp ) )
3348 if( !strncmp( "_display_start:", b+4, 15 ) ) break;
3349 pt = strstr( b, ":" ) + 1;
3350 tal_display_start = atoi( pt ) - 1;
3353 while( ( c = fgetc( fp ) ) )
3360 if( isalpha( c ) || c == '-' )
3365 // fprintf( stderr, "(%d-%d:%d-%d)\n", qstart, qend, tstart, tend );
3366 // fprintf( stderr, "qal_display_start = %d, tal_display_start = %d\n", qal_display_start, tal_display_start );
3368 // fprintf( stderr, "qal = %s\n", qal );
3369 // fprintf( stderr, "tal = %s\n", tal );
3371 qal2 = cutal( qal, qal_display_start, qstart, qend );
3372 tal2 = cutal( tal, tal_display_start, tstart, tend );
3374 // fprintf( stderr, "qal2 = %s\n", qal2 );
3375 // fprintf( stderr, "tal2 = %s\n", tal2 );
3377 // fprintf( stderr, "putting %d - %d, opt = %d\n", qmem, junban[count-1], opt );
3378 putlocalhom( qal2, tal2, localhomlist+junban[count-1], qstart, tstart, opt, overlapaa );
3380 // fprintf( stderr, "count = %d\n", count );
3383 int ReadFasta34m10_scoreonly_nucbk( FILE *fp, double *dis, int nin )
3393 while( !feof( fp ) )
3395 fgets( b, B-1, fp );
3396 if( !strncmp( "+===========+", b, 13 ) )
3400 if( strchr( b, 'r' ) ) continue;
3402 // pt = strchr( b, ')' ) + 1;
3403 pt = strchr( b, ']' ) + 1;
3404 sscanf( pt, "%d %lf %lf", &opt, &bits, &z );
3405 dis[pos] += (double)opt;
3408 fprintf( stderr, "b=%s\n", b );
3409 fprintf( stderr, "opt=%d\n", opt );
3410 fprintf( stderr, "pos=%d\n", pos );
3411 fprintf( stderr, "dis[pos]=%f\n", dis[pos] );
3415 else if( 0 == strncmp( ">>><<<", b, 6 ) )
3421 if( !count ) return -1;
3426 int ReadFasta34m10_scoreonly_nuc( FILE *fp, double *dis, int nin )
3438 yonda = AllocateIntVec( nin );
3439 for( c=0; c<nin; c++ ) yonda[c] = 0;
3440 for( c=0; c<nin; c++ ) dis[c] = 0.0;
3443 while( !feof( fp ) )
3445 fgets( b, B-1, fp );
3446 if( !strncmp( "+===========+", b, 13 ) )
3450 if( strchr( b, 'r' ) ) continue;
3452 // pt = strchr( b, ')' ) + 1;
3453 pt = strchr( b, ']' ) + 1;
3454 sscanf( pt, "%d %lf %lf", &opt, &bits, &z );
3455 if( yonda[pos] == 0 )
3457 dis[pos] += (double)opt;
3462 fprintf( stderr, "b=%s\n", b );
3463 fprintf( stderr, "opt=%d\n", opt );
3464 fprintf( stderr, "pos=%d\n", pos );
3465 fprintf( stderr, "dis[pos]=%f\n", dis[pos] );
3469 else if( !strncmp( ">>>", b, 3 ) )
3471 for( c=0; c<nin; c++ ) yonda[c] = 0;
3473 else if( 0 == strncmp( ">>><<<", b, 6 ) )
3482 if( !count ) return -1;
3487 int ReadFasta34m10_scoreonly( FILE *fp, double *dis, int nin )
3499 yonda = AllocateIntVec( nin );
3500 for( c=0; c<nin; c++ ) yonda[c] = 0;
3501 for( c=0; c<nin; c++ ) dis[c] = 0.0;
3504 while( !feof( fp ) )
3506 fgets( b, B-1, fp );
3507 if( !strncmp( "+===========+", b, 13 ) )
3511 pt = strchr( b, ')' ) + 1;
3512 sscanf( pt, "%d %lf %lf", &opt, &bits, &z );
3513 if( yonda[pos] == 0 )
3515 dis[pos] += (double)opt;
3520 fprintf( stderr, "b=%s\n", b );
3521 fprintf( stderr, "opt=%d\n", opt );
3522 fprintf( stderr, "pos=%d\n", pos );
3523 fprintf( stderr, "dis[pos]=%f\n", dis[pos] );
3527 else if( !strncmp( ">>>", b, 3 ) )
3529 for( c=0; c<nin; c++ ) yonda[c] = 0;
3531 else if( 0 == strncmp( ">>><<<", b, 6 ) )
3540 if( !count ) return -1;
3544 int ReadFasta34( FILE *fp, double *dis, int nseq, char name[M][B], LocalHom *localhomlist )
3549 static int junban[M];
3551 int opt, qstart, qend, tstart, tend;
3557 for( i=0; i<10000000 && count<nseq; i++ )
3559 while( !feof( fp ) )
3562 fgets( b, B-1, fp );
3563 if( !strncmp( "+==========+", b, 12 ) )
3565 junban[count] = atoi( b+12 );
3567 pt = strchr( b, ')' ) + 1;
3568 sscanf( pt, "%d %lf %lf", &opt, &bits, &z );
3569 dis[junban[count]] = (double)opt;
3573 else if( 0 == strncmp( ">>+==========+", b, 14 ) )
3579 if( !count ) return -1;
3582 while( !feof( fp ) )
3584 if( !strncmp(">>+==========+", b, 14 ) )
3586 junban[count] = atoi( b+14 );
3588 fgets( b, B-1, fp ); // initn:
3589 pt = strstr( b, "opt: " ) + 5;
3590 localhomlist[junban[count-1]].opt = atof( pt );
3591 fgets( b, B-1, fp ); // Smith-Waterman score
3592 pt = strstr( b, "ungapped) in " ) + 13;
3593 sscanf( pt, "%d", &overlapaa );
3594 fprintf( stderr, "pt = %s, overlapaa = %d\n", pt, overlapaa );
3595 pt = strstr( b, "overlap (" ) + 8;
3596 sscanf( pt, "(%d-%d:%d-%d)", &qstart, &qend, &tstart, &tend );
3597 localhomlist[junban[count-1]].overlapaa = overlapaa;
3598 localhomlist[junban[count-1]].start1 = qstart-1;
3599 localhomlist[junban[count-1]].end1 = qend-1;
3600 localhomlist[junban[count-1]].start2 = tstart-1;
3601 localhomlist[junban[count-1]].end2 = tend-1;
3603 fgets( b, B-1, fp );
3605 fprintf( stderr, "count = %d\n", count );
3609 int ReadFasta3( FILE *fp, double *dis, int nseq, char name[M][B] )
3615 int initn, init1, opt;
3620 for( i=0; i<10000000 && count<nseq; i++ )
3622 while( !feof( fp ) )
3625 fgets( b, B-1, fp );
3626 if( !strncmp( "+==========+", b, 12 ) )
3628 junban[count] = atoi( b+12 );
3630 pt = strchr( b, ')' ) + 1;
3631 sscanf( pt, "%d %d %d %lf", &initn, &init1, &opt, &z );
3632 dis[junban[count]] = (double)opt;
3639 int ReadFasta( FILE *fp, double *dis, int nseq, char name[M][B] )
3644 int initn, init1, opt;
3647 for( i=0; i<nseq; i++ ) dis[i] = 0.0;
3648 for( i=0; !feof( fp ) && count<nseq; i++ )
3650 fgets( b, B-1, fp );
3651 if( !strncmp( "+==========+", b, 12 ) )
3653 junban[count] = atoi( b+12 );
3655 sscanf( b+50, "%d %d %d", &initn, &init1, &opt );
3656 dis[junban[count]] = (double)opt;
3663 for( i=0; i<100000 && count<nseq; i++ )
3665 fgets( b, B-1, fp );
3666 if( !strncmp( name[junban[count]], b, 20 ) )
3668 dis[junban[count]] = atof( b+65 );
3677 int ReadOpt( FILE *fp, int opt[M], int nseq, char name[M][B] )
3682 int optt, initn, init1;
3685 for( i=0; i<10000000 && count<nseq; i++ )
3687 fgets( b, B-1, fp );
3688 if( !strncmp( "+==========+", b, 12 ) )
3690 junban[count] = atoi( b+12 );
3691 sscanf( b+50, "%d %d %d", &initn, &init1, &optt );
3692 opt[junban[count]] = (double)optt;
3699 int ReadOpt2( FILE *fp, int opt[M], int nseq, char name[M][B] )
3706 for( i=0; i<10000000 && count<nseq; i++ )
3708 fgets( b, B-1, fp );
3709 if( !strncmp( "+==========+", b, 12 ) )
3711 junban[count] = atoi( b+12 );
3712 opt[junban[count]] = atoi( b+65 );
3721 int writePre( int nseq, char **name, int nlen[M], char **aseq, int force )
3730 if( devide ) dvWrite( prep_g, nseq, name, nlen, aseq );
3732 else WriteGapFill( prep_g, nseq, name, nlen, aseq );
3734 else writeData( prep_g, nseq, name, nlen, aseq );
3739 for( i=0; i<10; i++ )
3742 fprintf( stderr, "SEMAPHORE = %d\n", signalSM[SEMAPHORE] );
3744 if( signalSM[SEMAPHORE]-- > 0 )
3746 #if 0 /* /tmp/pre ¤Î´Ø·¸¤Ç¤Ï¤º¤·¤¿ */
3747 if( ferror( prep_g ) ) prep_g = fopen( "pre", "w" );
3748 if( !prep_g ) ErrorExit( "Cannot re-open pre." );
3751 signalSM[STATUS] = IMA_KAITERU;
3753 if( force ) fprintf( stderr, "FINAL " );
3755 if( devide ) dvWrite( prep_g, nseq, name, nlen, aseq );
3756 else WriteGapFill( prep_g, nseq, name, nlen, aseq );
3758 fprintf( prep_g, '\EOF' );
3761 if( force ) signalSM[STATUS] = OSHIMAI;
3762 else signalSM[STATUS] = KAKIOWATTA;
3764 signalSM[SEMAPHORE]++;
3766 fprintf( stderr, "signalSM[STATUS] = %c\n", signalSM[STATUS] );
3773 fprintf( stderr, "YONDERUKARA_AKIRAMERU\n" );
3776 signalSM[SEMAPHORE]++;
3779 fprintf( stderr, "MATSU\n" );
3784 if( force && !value ) ErrorExit( "xced ga pre wo hanasanai \n" );
3790 writeData_pointer( prep_g, nseq, name, nlen, aseq );
3797 void readOtherOptions( int *ppidptr, int *fftThresholdptr, int *fftWinSizeptr )
3801 FILE *fp = fopen( "pre", "r" );
3803 if( !fp ) ErrorExit( "Cannot open pre.\n" );
3804 fgets( b, B-1, fp );
3805 sscanf( b, "%d %d %d", ppidptr, fftThresholdptr, fftWinSizeptr );
3808 fprintf( stderr, "b = %s\n", b );
3809 fprintf( stderr, "ppid = %d\n", ppid );
3810 fprintf( stderr, "fftThreshold = %d\n", fftThreshold );
3811 fprintf( stderr, "fftWinSize = %d\n", fftWinSize );
3817 *fftThresholdptr = FFT_THRESHOLD;
3819 *fftWinSizeptr = FFT_WINSIZE_D;
3821 *fftWinSizeptr = FFT_WINSIZE_P;
3824 fprintf( stderr, "fftThresholdptr=%d\n", *fftThresholdptr );
3825 fprintf( stderr, "fftWinSizeptr=%d\n", *fftWinSizeptr );
3829 void initSignalSM( void )
3834 if( ppid ) fprintf( stderr, "PID of xced = %d\n", ppid );
3843 signalsmid = shmget( (key_t)ppid, 3, IPC_ALLOC | 0666 );
3844 if( signalsmid == -1 ) ErrorExit( "Cannot get Shared memory for signal.\n" );
3845 signalSM = shmat( signalsmid, 0, 0 );
3846 if( (int)signalSM == -1 ) ErrorExit( "Cannot attatch Shared Memory for signal!\n" );
3847 signalSM[STATUS] = IMA_KAITERU;
3848 signalSM[SEMAPHORE] = 1;
3852 void initFiles( void )
3856 sprintf( pname, "/tmp/pre.%d", ppid );
3858 sprintf( pname, "pre" );
3859 prep_g = fopen( pname, "w" );
3860 if( !prep_g ) ErrorExit( "Cannot open pre" );
3862 trap_g = fopen( "trace", "w" );
3863 if( !trap_g ) ErrorExit( "cannot open trace" );
3864 fprintf( trap_g, "PID = %d\n", getpid() );
3869 void WriteForFasta( FILE *fp, int locnjob, char name[][B], int nlen[M], char **aseq )
3875 for( i=0; i<locnjob; i++ )
3877 nalen[i] = strlen( aseq[i] );
3878 fprintf( fp, ">%s\n", name[i] );
3879 for( j=0; j<nalen[i]; j=j+C )
3881 strncpy( b, aseq[i]+j, C ); b[C] = 0;
3882 fprintf( fp, "%s\n",b );
3887 void readlocalhomtable2( FILE*fp, int njob, LocalHom **localhomtable, char *kozoarivec )
3890 static char buff[B];
3892 int i, j, overlapaa, start1, end1, start2, end2;
3893 LocalHom *tmpptr1, *tmpptr2;
3895 // for( i=0; i<njob; i++ ) for( j=0; j<njob; j++ ) nlocalhom[i][j] = 0;
3897 while ( NULL != fgets( buff, B-1, fp ) )
3899 // fprintf( stderr, "\n" );
3900 sscanf( buff, "%d %d %d %lf %d %d %d %d %s", &i, &j, &overlapaa, &opt, &start1, &end1, &start2, &end2, infor );
3901 if( *infor == 'k' ) kozoarivec[i] = kozoarivec[j] = 1;
3904 if( start1 == end1 || start2 == end2 ) continue; //mondai ari
3909 if( localhomtable[i][j].nokori++ > 0 )
3911 tmpptr1 = localhomtable[i][j].last;
3912 // fprintf( stderr, "reallocating, localhomtable[%d][%d].nokori = %d\n", i, j, localhomtable[i][j].nokori );
3913 tmpptr1->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
3914 tmpptr1 = tmpptr1->next;
3915 tmpptr1->extended = -1;
3916 tmpptr1->next = NULL;
3917 localhomtable[i][j].last = tmpptr1;
3918 // fprintf( stderr, "### i,j = %d,%d, nokori=%d\n", i, j, localhomtable[i][j].nokori );
3922 tmpptr1 = localhomtable[i]+j;
3923 // fprintf( stderr, "### i,j = %d,%d, nokori=%d\n", i, j, localhomtable[i][j].nokori );
3926 tmpptr1->start1 = start1;
3927 tmpptr1->start2 = start2;
3928 tmpptr1->end1 = end1;
3929 tmpptr1->end2 = end2;
3930 // tmpptr1->opt = ( opt / overlapaa + 0.00 ) / 5.8 * 600;
3931 // tmpptr1->opt = opt;
3932 tmpptr1->opt = ( opt + 0.00 ) / 5.8 * 600;
3933 tmpptr1->overlapaa = overlapaa;
3934 tmpptr1->korh = *infor;
3938 if( localhomtable[j][i].nokori++ > 0 )
3940 tmpptr2 = localhomtable[j][i].last;
3941 tmpptr2->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
3942 tmpptr2 = tmpptr2->next;
3943 tmpptr2->extended = -1;
3944 tmpptr2->next = NULL;
3945 localhomtable[j][i].last = tmpptr2;
3946 // fprintf( stderr, "### i,j = %d,%d, nokori=%d\n", j, i, localhomtable[j][i].nokori );
3950 tmpptr2 = localhomtable[j]+i;
3951 // fprintf( stderr, "### i,j = %d,%d, nokori=%d\n", j, i, localhomtable[j][i].nokori );
3954 tmpptr2->start2 = start1;
3955 tmpptr2->start1 = start2;
3956 tmpptr2->end2 = end1;
3957 tmpptr2->end1 = end2;
3958 // tmpptr2->opt = ( opt / overlapaa + 0.00 ) / 5.8 * 600;
3959 // tmpptr2->opt = opt;
3960 tmpptr2->opt = ( opt + 0.00 ) / 5.8 * 600;
3961 tmpptr2->overlapaa = overlapaa;
3962 tmpptr2->korh = *infor;
3964 // fprintf( stderr, "i=%d, j=%d, st1=%d, en1=%d, opt = %f\n", i, j, tmpptr1->start1, tmpptr1->end1, opt );
3969 void readlocalhomtable( FILE*fp, int njob, LocalHom **localhomtable, char *kozoarivec )
3972 static char buff[B];
3974 int i, j, overlapaa, start1, end1, start2, end2;
3975 int **nlocalhom = NULL;
3976 LocalHom *tmpptr1=NULL, *tmpptr2=NULL; // by D.Mathog, a guess
3978 nlocalhom = AllocateIntMtx( njob, njob );
3979 for( i=0; i<njob; i++ ) for( j=0; j<njob; j++ ) nlocalhom[i][j] = 0;
3981 while ( NULL != fgets( buff, B-1, fp ) )
3983 // fprintf( stderr, "\n" );
3984 sscanf( buff, "%d %d %d %lf %d %d %d %d %s", &i, &j, &overlapaa, &opt, &start1, &end1, &start2, &end2, infor );
3985 if( *infor == 'k' ) kozoarivec[i] = kozoarivec[j] = 1;
3988 if( start1 == end1 || start2 == end2 ) continue; //mondai ari
3994 if( nlocalhom[i][j]++ > 0 )
3996 // fprintf( stderr, "reallocating, nlocalhom[%d][%d] = %d\n", i, j, nlocalhom[i][j] );
3997 tmpptr1->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
3998 tmpptr1 = tmpptr1->next;
3999 tmpptr1->next = NULL;
4003 tmpptr1 = localhomtable[i]+j;
4004 // fprintf( stderr, "nlocalhom[%d][%d] = %d\n", i, j, nlocalhom[i][j] );
4007 tmpptr1->start1 = start1;
4008 tmpptr1->start2 = start2;
4009 tmpptr1->end1 = end1;
4010 tmpptr1->end2 = end2;
4011 // tmpptr1->opt = ( opt / overlapaa + 0.00 ) / 5.8 * 600;
4012 // tmpptr1->opt = opt;
4013 tmpptr1->opt = ( opt + 0.00 ) / 5.8 * 600;
4014 tmpptr1->overlapaa = overlapaa;
4015 tmpptr1->korh = *infor;
4017 // fprintf( stderr, "i=%d, j=%d, opt = %f\n", i, j, opt );
4021 if( nlocalhom[j][i]++ > 0 )
4023 tmpptr2->next = (LocalHom *)calloc( 1, sizeof( LocalHom ) );
4024 tmpptr2 = tmpptr2->next;
4025 tmpptr2->next = NULL;
4028 tmpptr2 = localhomtable[j]+i;
4030 tmpptr2->start2 = start1;
4031 tmpptr2->start1 = start2;
4032 tmpptr2->end2 = end1;
4033 tmpptr2->end1 = end2;
4034 // tmpptr2->opt = ( opt / overlapaa + 0.00 ) / 5.8 * 600;
4035 // tmpptr2->opt = opt;
4036 tmpptr2->opt = ( opt + 0.00 ) / 5.8 * 600;
4037 tmpptr2->overlapaa = overlapaa;
4038 tmpptr2->korh = *infor;
4042 FreeIntMtx( nlocalhom );
4045 void outlocalhom( LocalHom **localhom, int nseq )
4049 for( i=0; i<nseq; i++ ) for( j=0; j<nseq; j++ )
4051 tmpptr = localhom[i]+j;
4052 fprintf( stderr, "%d-%d\n", i, j );
4055 fprintf( stderr, "reg1=%d-%d, reg2=%d-%d, imp=%f, opt=%f\n", tmpptr->start1, tmpptr->end1, tmpptr->start2, tmpptr->end2, tmpptr->importance, tmpptr->opt );
4057 while( (tmpptr=tmpptr->next) );
4061 void outlocalhompt( LocalHom ***localhom, int n1, int n2 )
4065 for( i=0; i<n1; i++ ) for( j=0; j<n2; j++ )
4067 tmpptr = localhom[i][j];
4068 fprintf( stderr, "%d-%d\n", i, j );
4071 fprintf( stderr, "reg1=%d-%d, reg2=%d-%d, imp=%f, opt=%f, wimp=%f\n", tmpptr->start1, tmpptr->end1, tmpptr->start2, tmpptr->end2, tmpptr->importance, tmpptr->opt, tmpptr->wimportance );
4073 while( (tmpptr=tmpptr->next) );
4077 void FreeLocalHomTable( LocalHom **localhomtable, int n )
4080 LocalHom *ppp, *tmpptr;
4081 for( i=0; i<n; i++ )
4083 for( j=0; j<n; j++ )
4085 tmpptr=localhomtable[i]+j;
4087 for( ; tmpptr; tmpptr=ppp )
4090 fprintf( stderr, "i=%d, j=%d\n", i, j );
4093 if( tmpptr!=localhomtable[i]+j )
4096 fprintf( stderr, "freeing %p\n", tmpptr );
4103 fprintf( stderr, "freeing localhomtable[%d]\n", i );
4105 free( localhomtable[i] );
4108 fprintf( stderr, "freeing localhomtable\n" );
4110 free( localhomtable );
4112 fprintf( stderr, "freed\n" );
4116 char *progName( char *str )
4119 if( ( value = strrchr( str, '/' ) ) != NULL )
4125 static void tabtospace( char *str )
4128 // fprintf( stderr, "before = %s\n", str );
4129 while( NULL != ( p = strchr( str , '\t' ) ) )
4133 // fprintf( stderr, "after = %s\n", str );
4136 static char *extractfirstword( char *str )
4143 if( val == str && *str == ' ' )
4147 else if( *str != ' ' )
4151 else if( *str == ' ' )
4159 void phylipout_pointer( FILE *fp, int nseq, int maxlen, char **seq, char **name, int *order )
4164 fprintf( fp, " %d %d\n", nseq, maxlen );
4166 while( pos < maxlen )
4168 for( j=0; j<nseq; j++ )
4171 fprintf( fp, "%-10.10s", extractfirstword( name[order[j]]+1 ) );
4176 while( pos2 < pos+41 && pos2 < maxlen )
4178 fprintf( fp, " %.10s", seq[order[j]]+pos2 );
4181 fprintf( fp, "\n" );
4183 fprintf( fp, "\n" );
4188 void clustalout_pointer( FILE *fp, int nseq, int maxlen, char **seq, char **name, char *mark, char *comment, int *order, int namelen )
4192 if( comment == NULL )
4193 fprintf( fp, "CLUSTAL format alignment by MAFFT (v%s)\n\n", VERSION );
4195 fprintf( fp, "CLUSTAL format alignment by MAFFT %s (v%s)\n\n", comment, VERSION );
4197 while( pos < maxlen )
4199 fprintf( fp, "\n" );
4200 for( j=0; j<nseq; j++ )
4202 fprintf( fp, "%-*.*s ", namelen, namelen, extractfirstword( name[order[j]]+1 ) );
4203 fprintf( fp, "%.60s\n", seq[order[j]]+pos ); // Ťµ¤¬°ã¤¦¤È¤À¤á¡£
4207 fprintf( fp, "%-*.*s ", namelen, namelen, "" );
4208 fprintf( fp, "%.60s\n", mark + pos ); // Ťµ¤¬°ã¤¦¤È¤À¤á¡£
4215 void writeData_reorder_pointer( FILE *fp, int locnjob, char **name, int *nlen, char **aseq, int *order )
4220 for( i=0; i<locnjob; i++ )
4224 fprintf( stderr, "i = %d in writeData\n", i );
4226 nalen = strlen( aseq[k] );
4227 fprintf( fp, ">%s\n", name[k]+1 );
4228 for( j=0; j<nalen; j=j+C )
4231 strncpy( b, aseq[k]+j, C ); b[C] = 0;
4232 fprintf( fp, "%s\n",b );
4234 fprintf( fp, "%.*s\n", C, aseq[k]+j );
4239 void writeData_reorder( FILE *fp, int locnjob, char name[][B], int nlen[], char **aseq, int *order )
4244 for( i=0; i<locnjob; i++ )
4248 fprintf( stderr, "i = %d in writeData\n", i );
4250 nalen = strlen( aseq[k] );
4251 fprintf( fp, ">%s\n", name[k]+1 );
4252 for( j=0; j<nalen; j=j+C )
4255 strncpy( b, aseq[k]+j, C ); b[C] = 0;
4256 fprintf( fp, "%s\n",b );
4258 fprintf( fp, "%.*s\n", C, aseq[k]+j );
4263 static void showaamtxexample()
4265 fprintf( stderr, "Format error in aa matrix\n" );
4266 fprintf( stderr, "# Example:\n" );
4267 fprintf( stderr, "# comment\n" );
4268 fprintf( stderr, " A R N D C Q E G H I L K M F P S T W Y V\n" );
4269 fprintf( stderr, "A 4 -1 -2 -2 0 -1 -1 0 -2 -1 -1 -1 -1 -2 -1 1 0 -3 -2 0\n" );
4270 fprintf( stderr, "R -1 5 0 -2 -3 1 0 -2 0 -3 -2 2 -1 -3 -2 -1 -1 -3 -2 -3\n" );
4271 fprintf( stderr, "...\n" );
4272 fprintf( stderr, "V 0 -3 -3 -3 -1 -2 -2 -3 -3 3 1 -2 1 -1 -2 -2 0 -3 -1 4\n" );
4273 fprintf( stderr, "frequency 0.07 0.05 0.04 0.05 0.02 .. \n" );
4274 fprintf( stderr, "# Example end\n" );
4275 fprintf( stderr, "Only the lower half is loaded\n" );
4276 fprintf( stderr, "The last line (frequency) is optional.\n" );
4280 double *loadaamtx( void )
4282 int i, j, k, ii, jj;
4286 char *aaorder = "ARNDCQEGHILKMFPSTWYV";
4291 char *mtxfname = "_aamtx";
4294 raw = AllocateDoubleMtx( 21, 20 );
4295 val = AllocateDoubleVec( 420 );
4296 map = AllocateIntVec( 20 );
4300 fprintf( stderr, "User-defined matrix is not supported for DNA\n" );
4304 mf = fopen( mtxfname, "r" );
4307 fprintf( stderr, "Cannot open the _aamtx file\n" );
4311 inorder = calloc( 1000, sizeof( char ) );
4312 line = calloc( 1000, sizeof( char ) );
4315 while( !feof( mf ) )
4317 fgets( inorder, 999, mf );
4318 if( inorder[0] != '#' ) break;
4320 ptr1 = ptr2 = inorder;
4323 if( isalpha( *ptr2 ) )
4325 *ptr1 = toupper( *ptr2 );
4332 for( i=0; i<20; i++ )
4334 ptr2 = strchr( inorder, aaorder[i] );
4337 fprintf( stderr, "%c: not found in the first 20 letters.\n", aaorder[i] );
4342 map[i] = ptr2 - inorder;
4347 while( !feof( mf ) )
4349 fgets( line, 999, mf );
4350 // fprintf( stderr, "line = %s\n", line );
4351 if( line[0] == '#' ) continue;
4353 // fprintf( stderr, "line = %s\n", line );
4354 for( j=0; j<=i; j++ )
4356 while( !isdigit( *ptr1 ) && *ptr1 != '-' && *ptr1 != '.' )
4359 raw[i][j] = atof( ptr1 );
4360 // fprintf( stderr, "raw[][]=%f, %c-%c %d-%d\n", raw[i][j], inorder[i], inorder[j], i, j );
4361 ptr1 = strchr( ptr1, ' ' );
4362 if( ptr1 == NULL && j<i) showaamtxexample();
4368 for( i=0; i<20; i++ ) raw[20][i] = -1.0;
4369 while( !feof( mf ) )
4371 fgets( line, 999, mf );
4372 if( line[0] == 'f' )
4374 // fprintf( stderr, "line = %s\n", line );
4376 for( j=0; j<20; j++ )
4378 while( !isdigit( *ptr1 ) && *ptr1 != '-' && *ptr1 != '.' )
4381 raw[20][j] = atof( ptr1 );
4382 // fprintf( stderr, "raw[20][]=%f, %c %d\n", raw[20][j], inorder[i], j );
4383 ptr1 = strchr( ptr1, ' ' );
4384 if( ptr1 == NULL && j<19) showaamtxexample();
4391 for( i=0; i<20; i++ )
4393 for( j=0; j<=i; j++ )
4397 ii = MAX( map[i], map[j] );
4398 jj = MIN( map[i], map[j] );
4400 else ii = jj = map[i];
4401 val[k++] = raw[ii][jj];
4402 // fprintf( stderr, "%c-%c, %f\n", aaorder[i], aaorder[j], val[k-1] );
4405 for( i=0; i<20; i++ ) val[400+i] = raw[20][map[i]];
4407 fprintf( stderr, "inorder = %s\n", inorder );
4411 FreeDoubleMtx( raw );
4417 void readmccaskill( FILE *fp, RNApair **pairprob, int length )
4426 pairnum = (int *)calloc( length, sizeof( int ) );
4427 for( i=0; i<length; i++ ) pairnum[i] = 0;
4433 fprintf( stderr, "format error in hat4\n" );
4437 fgets( gett, 999, fp );
4440 if( feof( fp ) ) break;
4447 fgets( gett, 999, fp );
4448 // fprintf( stderr, "gett = %s\n", gett );
4449 sscanf( gett, "%d %d %f", &left, &right, &prob );
4451 if( left >= length || right >= length )
4453 fprintf( stderr, "format error in hat4\n" );
4457 if( prob < 0.01 ) continue; // 080607, mafft ni dake eikyou
4459 if( left != right && prob > 0.0 )
4461 pairprob[left] = (RNApair *)realloc( pairprob[left], (pairnum[left]+2) * sizeof( RNApair ) );
4462 pairprob[left][pairnum[left]].bestscore = prob;
4463 pairprob[left][pairnum[left]].bestpos = right;
4465 pairprob[left][pairnum[left]].bestscore = -1.0;
4466 pairprob[left][pairnum[left]].bestpos = -1;
4467 // fprintf( stderr, "%d-%d, %f\n", left, right, prob );
4469 pairprob[right] = (RNApair *)realloc( pairprob[right], (pairnum[right]+2) * sizeof( RNApair ) );
4470 pairprob[right][pairnum[right]].bestscore = prob;
4471 pairprob[right][pairnum[right]].bestpos = left;
4473 pairprob[right][pairnum[right]].bestscore = -1.0;
4474 pairprob[right][pairnum[right]].bestpos = -1;
4475 // fprintf( stderr, "%d-%d, %f\n", right, left, prob );
4481 void readpairfoldalign( FILE *fp, char *s1, char *s2, char *aln1, char *aln2, int q1, int q2, int *of1, int *of2, int sumlen )
4488 char sinseq[100], sinaln[100];
4489 int posinseq, posinaln;
4499 maptoseq1 = AllocateIntVec( sumlen+1 );
4500 maptoseq2 = AllocateIntVec( sumlen+1 );
4502 posinaln = 0; // foldalign ga alingment wo kaesanaitok no tame.
4504 while( !feof( fp ) )
4506 fgets( gett, 999, fp );
4507 if( !strncmp( gett, "; ALIGNING", 10 ) ) break;
4509 sprintf( qstr, "; ALIGNING %d against %d\n", q1+1, q2+1 );
4510 if( strcmp( gett, qstr ) )
4512 fprintf( stderr, "Error in FOLDALIGN\n" );
4513 fprintf( stderr, "qstr = %s, but gett = %s\n", qstr, gett );
4517 while( !feof( fp ) )
4519 fgets( gett, 999, fp );
4520 if( !strncmp( gett, "; --------", 10 ) ) break;
4524 while( !feof( fp ) )
4526 fgets( gett, 999, fp );
4527 if( !strncmp( gett, "; ********", 10 ) ) break;
4528 // fprintf( stderr, "gett = %s\n", gett );
4529 sscanf( gett, "%c %c %s %s %d %d", &dumc, &dumc, sinseq, sinaln, &dumi, &dumi );
4530 posinaln = atoi( sinaln );
4531 posinseq = atoi( sinseq );
4532 // fprintf( stderr, "posinseq = %d\n", posinseq );
4533 // fprintf( stderr, "posinaln = %d\n", posinaln );
4534 maptoseq1[posinaln-1] = posinseq-1;
4538 while( !feof( fp ) )
4540 fgets( gett, 999, fp );
4541 if( !strncmp( gett, "; --------", 10 ) ) break;
4544 while( !feof( fp ) )
4546 fgets( gett, 999, fp );
4547 if( !strncmp( gett, "; ********", 10 ) ) break;
4548 // fprintf( stderr, "gett = %s\n", gett );
4549 sscanf( gett, "%c %c %s %s %d %d", &dumc, &dumc, sinseq, sinaln, &dumi, &dumi );
4550 posinaln = atof( sinaln );
4551 posinseq = atof( sinseq );
4552 // fprintf( stderr, "posinseq = %d\n", posinseq );
4553 // fprintf( stderr, "posinaln = %d\n", posinaln );
4554 maptoseq2[posinaln-1] = posinseq-1;
4556 if( alnlen != posinaln )
4558 fprintf( stderr, "Error in foldalign?\n" );
4564 for( i=0; i<alnlen; i++ )
4566 pos1 = maptoseq1[i];
4567 pos2 = maptoseq2[i];
4583 for( i=0; i<alnlen; i++ )
4585 *of1 = maptoseq1[i];
4586 if( *of1 > -1 ) break;
4589 for( i=0; i<alnlen; i++ )
4591 *of2 = maptoseq2[i];
4592 if( *of2 > -1 ) break;
4595 // fprintf( stderr, "*of1=%d, aln1 = :%s:\n", *of1, aln1 );
4596 // fprintf( stderr, "*of2=%d, aln2 = :%s:\n", *of2, aln2 );