/* Distances of Secondary Structure Ensembles Peter F Stadler, Ivo L Hofacker, Sebastian Bonhoeffer Vienna RNA Package */ #include #include #include #include #include #include #include #include "part_func.h" #include "fold_vars.h" #include "dist_vars.h" #include "utils.h" #include "PS_dot.h" #include "read_epars.h" #include "profiledist.h" #define MAXLENGTH 10000 #define MAXSEQ 1000 /*@unused@*/ static char rcsid[] = "$Id: RNApdist.c,v 1.8 2002/11/07 12:19:41 ivo Exp $"; PRIVATE void command_line(int argc, char *argv[]); PRIVATE void usage(void); PRIVATE void print_aligned_lines(FILE *somewhere); PRIVATE char task; PRIVATE char outfile[50]; PRIVATE char ruler[] ="....,....1....,....2....,....3....,....4" "....,....5....,....6....,....7....,....8"; static int noconv = 0; int main(int argc, char *argv[]) { float *T[MAXSEQ]; int i,j, istty, n=0; int type, length, taxa_list=0; float dist; FILE *somewhere=NULL; char *structure; char *line=NULL, fname[20], *list_title=NULL; plist *pr_pl, *mfe_pl; pr_pl = mfe_pl = NULL; command_line(argc, argv); if((outfile[0]=='\0')&&(task=='m')&&(edit_backtrack)) strcpy(outfile,"backtrack.file"); if (outfile[0]!='\0') somewhere = fopen(outfile,"w"); if (somewhere==NULL) somewhere = stdout; istty = (isatty(fileno(stdout))&&isatty(fileno(stdin))); while (1) { if ((istty)&&(n==0)) { printf("\nInput sequence; @ to quit\n"); printf("%s\n", ruler); } type = 0; do { /* get sequence to fold */ if (line!=NULL) free(line); *fname='\0'; if ((line=get_line(stdin))==NULL) {type = 999; break;} if (line[0]=='@') type = 999; if (line[0]=='*') { if (taxa_list==0) { if (task=='m') taxa_list=1; printf("%s\n", line); type = 0; } else { list_title = strdup(line); type = 888; } } if (line[0]=='>') { if (sscanf(line,">%12s", fname)!=0) strcat(fname, "_dp.ps"); if (taxa_list) printf("%d : %s\n", n+1, line+1); else printf("%s\n",line); type = 0; } if (isalpha(line[0])) { char *cp; cp =strchr(line,' '); if (cp) *cp='\0'; type = 1; } } while(type==0); if( (task == 'm')&&(type>800) ) { if (taxa_list) printf("* END of taxa list\n"); printf("> p %d (pdist)\n",n); for (i=1; i %d %d\n",i+1,j+1); print_aligned_lines(somewhere); } printf("\n"); } if (type==888) { /* do another distance matrix */ n = 0; printf("%s\n", list_title); free(list_title); } } if(type>800) { for (i=0; i1) { dist = profile_edit_distance(T[1], T[0]); printf("%g\n",dist); print_aligned_lines(somewhere); free_profile(T[1]); n=1; } break; case 'c' : if (n>1) { dist = profile_edit_distance(T[1], T[0]); printf("%g\n",dist); print_aligned_lines(somewhere); free_profile(T[0]); T[0] = T[1]; n=1; } break; case 'm' : break; default : nrerror("This can't happen."); } /* END switch task */ (void) fflush(stdout); } /* END while */ if (line !=NULL) free(line); return 0; } /* ----------------------------------------------------------------- */ PRIVATE void command_line(int argc, char *argv[]) { int i, sym; char *ns_bases=NULL, *c; char *ParamFile=NULL; task = 'p'; for (i=1; i= argc) outfile[0] = '\0'; else if (argv[i+1][0]=='-') outfile[0] = '\0'; else { i++; strncpy(outfile,argv[i],49); } edit_backtrack = 1; break; case 'P': if (++i