/*---------------------------------------------------------------------------*/ PUBLIC int xrna_plot(char *string, char *structure, char *ssfile) { /* produce input for XRNA RNA drawing program */ FILE *ss_file; int i; int length; short *pair_table; float *X, *Y; ss_file = fopen(ssfile, "w"); if (ss_file == NULL) { fprintf(stderr, "can't open file %s - not doing xy_plot\n", ssfile); return 0; } length = strlen(string); pair_table = make_pair_table(structure); /* make coordinates */ X = (float *) space((length+1)*sizeof(float)); Y = (float *) space((length+1)*sizeof(float)); if (rna_plot_type == 0) i = simple_xy_coordinates(pair_table, X, Y); else i = naview_xy_coordinates(pair_table, X, Y); if (i!=length) fprintf(stderr,"strange things happening in xrna_plot...\n"); fprintf(ss_file, "# Vienna RNA Package %s, XRNA output\n" "# CreationDate: %s\n" "# Options: %s\n", VERSION, time_stamp(), option_string()); for (i=1; i<=length; i++) /* XRNA likes to have coordinate mirrored, so we use (-X, Y) */ fprintf(ss_file, "%d %c %6.2f %6.2f %d %d\n", i, string[i-1], -X[i-1], Y[i-1], (pair_table[i]?1:0), pair_table[i]); fclose(ss_file); free(pair_table); free(X); free(Y); return 1; /* success */ }
PUBLIC int gmlRNA(char *string, char *structure, char *ssfile, char option) { FILE *gmlfile; int i; int length; int labels=0; short *pair_table; float *X, *Y; if (isupper(option)) labels = 1; gmlfile = fopen(ssfile, "w"); if (gmlfile == NULL) { fprintf(stderr, "can't open file %s - not doing xy_plot\n", ssfile); return 0; } length = strlen(string); pair_table = make_pair_table(structure); switch(option){ case 'X' : case 'x' : /* Simple XY Plot */ X = (float *) space((length+1)*sizeof(float)); Y = (float *) space((length+1)*sizeof(float)); if (rna_plot_type == 0) i = simple_xy_coordinates(pair_table, X, Y); else i = naview_xy_coordinates(pair_table, X, Y); if(i!=length) fprintf(stderr,"strange things happening in gmlRNA ...\n"); break; default: /* No Graphics Information */ X = NULL; Y = NULL; } fprintf(gmlfile, "# Vienna RNA Package %s\n" "# GML Output\n" "# CreationDate: %s\n" "# Name: %s\n" "# Options: %s\n", VERSION, time_stamp(), ssfile, option_string()); fprintf(gmlfile, "graph [\n" " directed 0\n"); for (i=1; i<=length; i++){ fprintf(gmlfile, " node [ id %d ", i); if (option) fprintf(gmlfile, "label \"%c\"",string[i-1]); if ((option == 'X')||(option=='x')) fprintf(gmlfile, "\n graphics [ x %9.4f y %9.4f ]\n", X[i-1], Y[i-1]); fprintf(gmlfile," ]\n"); } for (i=1; i<length; i++) fprintf(gmlfile, "edge [ source %d target %d ]\n", i, i+1); for (i=1; i<=length; i++) { if (pair_table[i]>i) fprintf(gmlfile, "edge [ source %d target %d ]\n", i, pair_table[i]); } fprintf(gmlfile, "]\n"); fclose(gmlfile); free(pair_table); free(X); free(Y); return 1; /* success */ }
PUBLIC int ssv_rna_plot(char *string, char *structure, char *ssfile) { /* produce input for the SStructView java applet */ FILE *ssvfile; int i, bp; int length; short *pair_table; float *X, *Y; float xmin, xmax, ymin, ymax; ssvfile = fopen(ssfile, "w"); if (ssvfile == NULL) { fprintf(stderr, "can't open file %s - not doing xy_plot\n", ssfile); return 0; } length = strlen(string); pair_table = make_pair_table(structure); /* make coordinates */ X = (float *) space((length+1)*sizeof(float)); Y = (float *) space((length+1)*sizeof(float)); if (rna_plot_type == 0) i = simple_xy_coordinates(pair_table, X, Y); else i = naview_xy_coordinates(pair_table, X, Y); if (i!=length) fprintf(stderr,"strange things happening in ssv_rna_plot...\n"); /* make coords nonegative */ xmin = xmax = X[0]; ymin = ymax = Y[0]; for (i = 1; i < length; i++) { xmin = X[i] < xmin ? X[i] : xmin; xmax = X[i] > xmax ? X[i] : xmax; ymin = Y[i] < ymin ? Y[i] : ymin; ymax = Y[i] > ymax ? Y[i] : ymax; } if (xmin<1) { for (i = 0; i <= length; i++) X[i] -= xmin-1; xmin = 1; } if (ymin<1) { for (i = 0; i <= length; i++) Y[i] -= ymin-1; ymin = 1; } #if 0 { float size, xoff, yoff; float JSIZE = 500; /* size of the java applet window */ /* rescale coordinates, center on square of size HSIZE */ size = MAX((xmax-xmin),(ymax-ymin)); xoff = (size - xmax + xmin)/2; yoff = (size - ymax + ymin)/2; for (i = 0; i <= length; i++) { X[i] = (X[i]-xmin+xoff)*(JSIZE-10)/size + 5; Y[i] = (Y[i]-ymin+yoff)*(JSIZE-10)/size + 5; } } #endif /* */ fprintf(ssvfile, "# Vienna RNA Package %s\n" "# SStructView Output\n" "# CreationDate: %s\n" "# Name: %s\n" "# Options: %s\n", VERSION, time_stamp(), ssfile, option_string()); for (i=1; i<=length; i++) fprintf(ssvfile, "BASE\t%d\t%c\t%d\t%d\n", i, string[i-1], (int) (X[i-1]+0.5), (int) (Y[i-1]+0.5)); for (bp=1, i=1; i<=length; i++) if (pair_table[i]>i) fprintf(ssvfile, "BASE-PAIR\tbp%d\t%d\t%d\n", bp++, i, pair_table[i]); fclose(ssvfile); free(pair_table); free(X); free(Y); return 1; /* success */ }
int svg_rna_plot(char *string, char *structure, char *ssfile) { float xmin, xmax, ymin, ymax, size; int i, length; float *X, *Y; FILE *xyplot; short *pair_table; length = strlen(string); xyplot = fopen(ssfile, "w"); if (xyplot == NULL) { fprintf(stderr, "can't open file %s - not doing xy_plot\n", ssfile); return 0; } pair_table = make_pair_table(structure); X = (float *) space((length+1)*sizeof(float)); Y = (float *) space((length+1)*sizeof(float)); if (rna_plot_type == 0) i = simple_xy_coordinates(pair_table, X, Y); else i = naview_xy_coordinates(pair_table, X, Y); if(i!=length) fprintf(stderr,"strange things happening in PS_rna_plot...\n"); xmin = xmax = X[0]; ymin = ymax = Y[0]; for (i = 1; i < length; i++) { xmin = X[i] < xmin ? X[i] : xmin; xmax = X[i] > xmax ? X[i] : xmax; ymin = Y[i] < ymin ? Y[i] : ymin; ymax = Y[i] > ymax ? Y[i] : ymax; } for (i = 0; i < length; i++) Y[i] = ymin+ymax - Y[i]; /* mirror coordinates so they look as in PS */ size = MAX((xmax-xmin),(ymax-ymin)); size += 10; /* add some so the bounding box isn't too tight */ fprintf(xyplot, "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"452\" width=\"452\">\n"); fprintf(xyplot, "<script type=\"text/ecmascript\">\n" " <![CDATA[\n" " var shown = 1;\n" " function click() {\n" " var seq = document.getElementById(\"seq\");\n" " if (shown==1) {\n" " seq.setAttribute(\"style\", \"visibility: hidden\");\n" " shown = 0;\n" " } else {\n" " seq.setAttribute(\"style\", \"visibility: visible\");\n" " shown = 1;\n" " }\n" " }\n" " ]]>\n" "</script>\n"); fprintf(xyplot, " <rect style=\"stroke: white; fill: white\" height=\"452\" x=\"0\" y=\"0\" width=\"452\" onclick=\"click(evt)\" />\n" " <g transform=\"scale(%7f,%7f) translate(%7f,%7f)\">\n", SIZE/size, SIZE/size, (size-xmin-xmax)/2, (size-ymin-ymax)/2); fprintf(xyplot, " <polyline style=\"stroke: black; fill: none; stroke-width: 1.5\" id=\"outline\" points=\"\n"); for (i = 0; i < length; i++) fprintf(xyplot, " %3.3f,%3.3f\n", X[i], Y[i]); fprintf(xyplot," \" />\n"); fprintf(xyplot," <g style=\"stroke: black; stroke-width: 1\" id=\"pairs\">\n"); for (i = 1; i <= length; i++) { int j; if ((j=pair_table[i])>i) fprintf(xyplot, " <line id=\"%d,%d\" x1=\"%6.3f\" y1=\"%6.3f\" x2=\"%6.3f\" y2=\"%6.3f\" />\n", i,j, X[i-1], Y[i-1], X[j-1], Y[j-1]); } fprintf(xyplot, " </g>\n"); fprintf(xyplot, " <g style=\"font-family: SansSerif\" transform=\"translate(-4.6, 4)\" id=\"seq\">\n"); for (i = 0; i < length; i++) fprintf(xyplot, " <text x=\"%.3f\" y=\"%.3f\">%c</text>\n", X[i], Y[i], string[i]); fprintf(xyplot, " </g>\n"); fprintf(xyplot, " </g>\n"); fprintf(xyplot, "</svg>\n"); fclose(xyplot); free(pair_table); free(X); free(Y); return 1; /* success */ }
int PS_rna_plot_a(char *string, char *structure, char *ssfile, char *pre, char *post) { float xmin, xmax, ymin, ymax, size; int i, length; float *X, *Y; FILE *xyplot; short *pair_table; char *c; length = strlen(string); xyplot = fopen(ssfile, "w"); if (xyplot == NULL) { fprintf(stderr, "can't open file %s - not doing xy_plot\n", ssfile); return 0; } pair_table = make_pair_table(structure); X = (float *) space((length+1)*sizeof(float)); Y = (float *) space((length+1)*sizeof(float)); if (rna_plot_type == 0) i = simple_xy_coordinates(pair_table, X, Y); else i = naview_xy_coordinates(pair_table, X, Y); if(i!=length) fprintf(stderr,"strange things happening in PS_rna_plot...\n"); xmin = xmax = X[0]; ymin = ymax = Y[0]; for (i = 1; i < length; i++) { xmin = X[i] < xmin ? X[i] : xmin; xmax = X[i] > xmax ? X[i] : xmax; ymin = Y[i] < ymin ? Y[i] : ymin; ymax = Y[i] > ymax ? Y[i] : ymax; } size = MAX((xmax-xmin),(ymax-ymin)); fprintf(xyplot, "%%!PS-Adobe-3.0 EPSF-3.0\n" "%%%%Creator: %s, ViennaRNA-%s\n" "%%%%CreationDate: %s" "%%%%Title: RNA Secondary Structure Plot\n" "%%%%BoundingBox: 66 210 518 662\n" "%%%%DocumentFonts: Helvetica\n" "%%%%Pages: 1\n" "%%%%EndComments\n\n" "%%Options: %s\n", rcsid+5, VERSION, time_stamp(), option_string()); fprintf(xyplot, "%% to switch off outline pairs of sequence comment or\n" "%% delete the appropriate line near the end of the file\n\n"); fprintf(xyplot, "%s", RNAss_head); if (pre || post) { fprintf(xyplot, "%s", anote_macros); } fprintf(xyplot, "%%%%EndProlog\n"); fprintf(xyplot, "RNAplot begin\n" "%% data start here\n"); if ((c = strchr(structure, '&'))) { int cutpoint; cutpoint = c - structure; string[cutpoint] = ' '; /* replace & with space */ fprintf(xyplot, "/cutpoint %d def\n", cutpoint); } /* sequence */ fprintf(xyplot,"/sequence (\\\n"); i=0; while (i<length) { fprintf(xyplot, "%.255s\\\n", string+i); /* no lines longer than 255 */ i+=255; } fprintf(xyplot,") def\n"); /* coordinates */ fprintf(xyplot, "/coor [\n"); for (i = 0; i < length; i++) fprintf(xyplot, "[%3.3f %3.3f]\n", X[i], Y[i]); fprintf(xyplot, "] def\n"); /* base pairs */ fprintf(xyplot, "/pairs [\n"); for (i = 1; i <= length; i++) if (pair_table[i]>i) fprintf(xyplot, "[%d %d]\n", i, pair_table[i]); fprintf(xyplot, "] def\n\n"); fprintf(xyplot, "init\n\n"); /* draw the data */ if (pre) { fprintf(xyplot, "%% Start Annotations\n"); fprintf(xyplot, "%s\n", pre); fprintf(xyplot, "%% End Annotations\n"); } fprintf(xyplot, "%% switch off outline pairs or bases by removing these lines\n" "drawoutline\n" "drawpairs\n" "drawbases\n"); if (post) { fprintf(xyplot, "%% Start Annotations\n"); fprintf(xyplot, "%s\n", post); fprintf(xyplot, "%% End Annotations\n"); } fprintf(xyplot, "%% show it\nshowpage\n"); fprintf(xyplot, "end\n"); fprintf(xyplot, "%%%%EOF\n"); fclose(xyplot); free(pair_table); free(X); free(Y); return 1; /* success */ }
int main(int argc, char *argv[]) { struct RRNAfold_args_info args_info; /* let's call our cmdline parser */ if (RRNAfold_parser (argc, argv, &args_info) != 0) exit(1) ; // for ( unsigned i = 0 ; i < args_info.inputs_num ; ++i ) // printf("%s\n",args_info.inputs[i]) ; int type = args_info.fold_type_arg; char *iname = args_info.input_file_arg; char *oname = args_info.output_file_arg; double temp = args_info.temperature_arg; printf("Using temp: %f",temp); int length,n,i,j; /* Reads in a file containing(-I) one sequence per line and outputs (-O) a file containing the corresponiding structures */ char *let,*seq1, *struct1,* struct2,* xstruc,*ffname; float *x,*y,e1, e2, tree_dist, string_dist, profile_dist, kT,**pf1, **pf2; FILE *fi,*fo; short *pair_table; /* open the file */ fi = fopen(iname, "r"); fo = fopen(oname, "a"); if (fi == NULL) {printf("I couldn't open results.dat for reading.\n");} i=0;//Index used to keep track of line in the file /* Scanning each line in the file and folding the given sequence */ seq1 = (char* ) space(sizeof(char)*(1000+1)); while (fscanf(fi, "%s\n",seq1) == 1){ printf("%s\n",seq1); length=strlen(seq1); /* fold at 30C instead of the default 37C */ temperature = temp; /* must be set *before* initializing */ update_fold_params(); /* allocate memory for fold(), could be skipped */ //initialize_fold(strlen(seq1)); /* allocate memory for structure and fold */ struct1 = (char* ) space(sizeof(char)*(length+1)); let = (char* ) space(sizeof(char)*(length+1)); x = (float* ) space(sizeof(float)*(length+1)); y = (float* ) space(sizeof(float)*(length+1)); /* Folding the sequence */ e1 = fold(seq1, struct1); // fprintf(fo,"%s\n",struct1); pair_table=make_pair_table(struct1); if(type==2){ j=simple_xy_coordinates(pair_table,x,y); }else{ j=naview_xy_coordinates(pair_table,x,y); } j=0; let = seq1; while(j < (length)){ fprintf(fo,"%d,%f,%f,%c,%d,%d\n",i,x[j],y[j],*let,j,(pair_table[(j+1)]-1)); let++; j++; } /* Makes .ps file of RNA fold */ /////////////////////////////////////////// /* ffname=(char*) space(sizeof(char)*10); n=sprintf(ffname, "rna%d.ps",i); printf("%s\n",ffname); (void) PS_rna_plot(seq1, struct1, ffname); */ /////////////////////////////////////////// free_arrays(); /* free arrays used in fold() */ i++; } /* close the file */ fclose(fi); fclose(fo); }