int main() { int d; d=g2_open_FIG("simple.fig"); g2_line(d, 10, 10, 90, 90); g2_close(d); return 0; }
void RNAFuncs::drawRNAAlignment(const string &structure, const string &altStructure, const string &seq1, const string &seq2, const string &strname1, const string &strname2, const string &filename_prefix, const bool atX, const SquigglePlotOptions &options) { const double base_fontsize=12; string base,structname; float *X, *Y,min_X=0,max_X=0,min_Y=0,max_Y=0; Uint i; short *pair_table,*alt_pair_table; int id_PS,id; int ps_color_black,ps_color_red,ps_color_blue,ps_color_green; Uint basenr_x=0, basenr_y=0; double xpos,ypos; char buf[10]; bool isDel,isIns; string filename; #ifdef HAVE_LIBGD int id_PNG=0,id_JPG=0; int png_color_black,png_color_red,png_color_blue,png_color_green; int jpg_color_black,jpg_color_red,jpg_color_blue,jpg_color_green; #endif X = new float[structure.size()]; Y = new float[structure.size()]; assert(seq1.size() == seq2.size()); assert(seq1.size() == structure.size()); assert(seq1.size() == altStructure.size()); pair_table = make_pair_table(structure.c_str()); alt_pair_table = make_pair_table(altStructure.c_str()); i = naview_xy_coordinates(pair_table, X, Y); if(i!=structure.size()) cerr << "strange things happening in squigglePlot ..." << endl; // scale image for(i=0;i<structure.size();i++) { X[i]*=static_cast<float>(options.scale); Y[i]*=static_cast<float>(options.scale); } // calculate image dimensions for(i=0;i<structure.size();i++) { min_X=min(min_X,X[i]); max_X=max(max_X,X[i]); min_Y=min(min_Y,Y[i]); max_Y=max(max_Y,Y[i]); } // add a border to image size min_X-=10; max_X+=10; min_Y-=10; max_Y+=10; //id_PS = g2_open_PS("ali.ps", g2_A4, g2_PS_port); filename=filename_prefix + ".ps"; id_PS = g2_open_EPSF((char*)filename.c_str()); g2_set_coordinate_system(id_PS,-min_X,-min_Y,1,1); #ifdef HAVE_LIBGD if(options.generatePNG) { filename=filename_prefix + ".png"; id_PNG=g2_open_gd((char*)filename.c_str(),(int)(max_X-min_X),(int)(max_Y-min_Y),g2_gd_png); g2_set_coordinate_system(id_PNG,-min_X,-min_Y,1,1); } if(options.generateJPG) { filename=filename_prefix + ".jpg"; id_JPG=g2_open_gd((char*)filename.c_str(),(int)(max_X-min_X),(int)(max_Y-min_Y),g2_gd_jpeg); g2_set_coordinate_system(id_PS,-min_X,-min_Y,1,1); } #endif id = g2_open_vd(); g2_attach(id,id_PS); #ifdef HAVE_LIBGD if(options.generatePNG) g2_attach(id,id_PNG); if(options.generateJPG) g2_attach(id,id_JPG); #endif // cout << "min_X: " << min_X <<",max_X: " << max_X << ",min_Y: " << min_Y << "max_Y: " << max_Y << endl; // g2_set_coordinate_system(id_PS,595/2.0,842/2.0,0.5,0.5); g2_set_line_width(id,0.2); // mark 5' end g2_string(id,X[0]-20,Y[0],"5'"); // define colors if(options.greyColors) { ps_color_black=g2_ink(id_PS,0,0,0); ps_color_red=g2_ink(id_PS,0,0,0); ps_color_blue=g2_ink(id_PS,0.7,0.7,0.7); ps_color_green=g2_ink(id_PS,0.4,0.4,0.4); #ifdef HAVE_LIBGD if(options.generatePNG) { png_color_black=g2_ink(id_PNG,0,0,0); png_color_red=g2_ink(id_PNG,0,0,0); png_color_blue=g2_ink(id_PNG,0.7,0.7,0.7); png_color_green=g2_ink(id_PNG,0.4,0.4,0.4); } if(options.generateJPG) { jpg_color_black=g2_ink(id_JPG,0,0,0); jpg_color_red=g2_ink(id_JPG,0,0,0); jpg_color_blue=g2_ink(id_JPG,0.7,0.7,0.7); jpg_color_green=g2_ink(id_JPG,0.4,0.4,0.4); } #endif } else { ps_color_black=g2_ink(id_PS,0,0,0); ps_color_red=g2_ink(id_PS,1,0,0); ps_color_blue=g2_ink(id_PS,0,0,0.5); ps_color_green=g2_ink(id_PS,0,0.5,0); #ifdef HAVE_LIBGD if(options.generatePNG) { png_color_black=g2_ink(id_PNG,0,0,0); png_color_red=g2_ink(id_PNG,1,0,0); png_color_blue=g2_ink(id_PNG,0,0,0.5); png_color_green=g2_ink(id_PNG,0,0.5,0); } if(options.generateJPG) { jpg_color_black=g2_ink(id_JPG,0,0,0); jpg_color_red=g2_ink(id_JPG,1,0,0); jpg_color_blue=g2_ink(id_JPG,0,0,0.5); jpg_color_green=g2_ink(id_JPG,0,0.5,0); } #endif } // draw sequence g2_set_font_size(id,base_fontsize*options.scale); for(i=0;i<structure.size();i++) { isDel = false; isIns = false; //base g2_pen(id,ps_color_black); // match base = ""; if(seq1[i]!='-') { base += seq1[i]; basenr_x++; } else { g2_pen(id,ps_color_green); // insertion isIns=true; } if(seq2[i]!='-') { base += seq2[i]; basenr_y++; } else { g2_pen(id,ps_color_blue); // deletion isDel=true; } if(base.size()==2 && base[0]!=base[1]) g2_pen(id,ps_color_red); // mismatch else base = base[0]; // show duplicate base only once xpos=X[i]-base.length()*(base_fontsize*options.scale)/2; ypos=Y[i]-4; g2_string(id,xpos,ypos,(char*)base.c_str()); if(!options.hideBaseNumbers) { // draw base number if(!isIns && basenr_x % options.baseNumInterval == 0) { g2_pen(id,ps_color_blue); sprintf(buf,"%d",basenr_x); g2_string(id,xpos-20,ypos,buf); } if(!isDel && basenr_y % options.baseNumInterval == 0) { g2_pen(id,ps_color_green); sprintf(buf,"%d",basenr_y); g2_string(id,xpos+20,ypos,buf); } } // connection to next base if(i<structure.size()-1) { // if the connected bases are only in one of the structures // use the appropriate color if(seq1[i]=='-' && seq1[i+1]=='-') g2_pen(id,ps_color_green); else if(seq2[i]=='-' && seq2[i+1]=='-') g2_pen(id,ps_color_blue); else g2_pen(id,ps_color_black); g2_line(id,X[i],Y[i],X[i+1],Y[i+1]); // draw circles at line endpoints if(seq1[i]=='-') g2_pen(id,ps_color_green); else if(seq2[i]=='-') g2_pen(id,ps_color_blue); else g2_pen(id,ps_color_black); g2_filled_circle(id,X[i],Y[i],0.7*options.scale); // circles are drawn twice, but thats ok ... if(seq1[i+1]=='-') g2_pen(id,ps_color_green); else if(seq2[i+1]=='-') g2_pen(id,ps_color_blue); else g2_pen(id,ps_color_black); g2_filled_circle(id,X[i+1],Y[i+1],0.7*options.scale); } } // draw pairings // !!! pair_table indexing begins at 1 !!! for(i=0;i<structure.size();i++) { if((unsigned short)pair_table[i+1]>i+1 && (unsigned short)alt_pair_table[i+1]>i+1) { // pairs in both structures g2_pen(id,ps_color_black); g2_line(id,X[i],Y[i],X[pair_table[i+1]-1],Y[pair_table[i+1]-1]); } else { if((unsigned short)pair_table[i+1]>i+1 && (unsigned short)alt_pair_table[i+1]<=i+1) { // pairs only in first structure if(atX) g2_pen(id,ps_color_blue); else g2_pen(id,ps_color_green); g2_line(id,X[i],Y[i],X[pair_table[i+1]-1],Y[pair_table[i+1]-1]); } else { if((unsigned short)pair_table[i+1]<=i+1 && (unsigned short)alt_pair_table[i+1]>i+1) { // pairs only in second structure if(atX) g2_pen(id,ps_color_green); else g2_pen(id,ps_color_blue); double dashes=2.0; g2_set_dash(id,1,&dashes); g2_line(id,X[i],Y[i],X[alt_pair_table[i+1]-1],Y[alt_pair_table[i+1]-1]); dashes=0; g2_set_dash(id,1,&dashes); } } } } // draw structure names // x-at-y or y-at-x if(atX) { g2_pen(id,ps_color_green); g2_string(id,min_X,max_Y-10,(char*)strname2.c_str()); g2_pen(id,ps_color_black); g2_string(id,min_X,max_Y-20,"at"); g2_pen(id,ps_color_blue); g2_string(id,min_X,max_Y-30,(char*)strname1.c_str()); } else { g2_pen(id,ps_color_blue); g2_string(id,min_X,max_Y-10,(char*)strname1.c_str()); g2_pen(id,ps_color_black); g2_string(id,min_X,max_Y-20,"at"); g2_pen(id,ps_color_green); g2_string(id,min_X,max_Y-30,(char*)strname2.c_str()); } g2_flush(id); g2_close(id); free(pair_table); free(alt_pair_table); DELETE(X); DELETE(Y); }
void RNAFuncs::drawRNAStructure(const string &seq, const string &structure, const string &filename_prefix, const string &structname, const list<pair<Uint,Uint> > ®ions, const SquigglePlotOptions &options) { const double base_fontsize=12; float *X, *Y,min_X=0,max_X=0,min_Y=0,max_Y=0; Uint i; short *pair_table; int id_PS,id_FIG=0,id; int color_black, *colors; double xpos,ypos; char buf[10]; string filename; double *points; int numPoints; #ifdef HAVE_LIBGD int id_PNG=0,id_JPG=0; #endif X = new float[structure.size()]; Y = new float[structure.size()]; points=new double[2*structure.size()]; colors=new int[NUM_COLORS]; assert(seq.size() == structure.size()); pair_table = make_pair_table(structure.c_str()); i = naview_xy_coordinates(pair_table, X, Y); if(i!=structure.size()) cerr << "strange things happening in squigglePlot ..." << endl; // scale image for(i=0;i<structure.size();i++) { X[i]*=static_cast<float>(options.scale); Y[i]*=static_cast<float>(options.scale); } // calculate image dimensions for(i=0;i<structure.size();i++) { min_X=min(min_X,X[i]); max_X=max(max_X,X[i]); min_Y=min(min_Y,Y[i]); max_Y=max(max_Y,Y[i]); } // add a border to image size min_X-=10; max_X+=10; min_Y-=10; max_Y+=10; //id_PS = g2_open_PS("ali.ps", g2_A4, g2_PS_port); filename=filename_prefix + ".ps"; id_PS = g2_open_EPSF((char*)filename.c_str()); g2_set_coordinate_system(id_PS,-min_X,-min_Y,1,1); if(options.generateFIG) { filename=filename_prefix + ".fig"; id_FIG=g2_open_FIG((char*)filename.c_str()); g2_set_coordinate_system(id_FIG,-min_X,-min_Y,1,1); } #ifdef HAVE_LIBGD if(options.generatePNG) { filename=filename_prefix + ".png"; id_PNG=g2_open_gd((char*)filename.c_str(),(int)(max_X-min_X),(int)(max_Y-min_Y),g2_gd_png); g2_set_coordinate_system(id_PNG,-min_X,-min_Y,1,1); } if(options.generateJPG) { filename=filename_prefix + ".jpg"; id_JPG=g2_open_gd((char*)filename.c_str(),(int)(max_X-min_X),(int)(max_Y-min_Y),g2_gd_jpeg); g2_set_coordinate_system(id_PS,-min_X,-min_Y,1,1); } #endif id = g2_open_vd(); g2_attach(id,id_PS); if(options.generateFIG) { g2_attach(id,id_FIG); } #ifdef HAVE_LIBGD if(options.generatePNG) g2_attach(id,id_PNG); if(options.generateJPG) g2_attach(id,id_JPG); #endif // cout << "min_X: " << min_X <<",max_X: " << max_X << ",min_Y: " << min_Y << "max_Y: " << max_Y << endl; // g2_set_coordinate_system(id_PS,595/2.0,842/2.0,0.5,0.5); // define colors if(options.greyColors) { color_black=g2_ink(id_PS,0,0,0); for(i=0;i<NUM_COLORS;i++) colors[i]=g2_ink(id_PS,0,0,0); if(options.generateFIG) { color_black=g2_ink(id_FIG,0,0,0); for(i=0;i<NUM_COLORS;i++) colors[i]=g2_ink(id_FIG,0,0,0); } #ifdef HAVE_LIBGD if(options.generatePNG) { color_black=g2_ink(id_PNG,0,0,0); for(i=0;i<NUM_COLORS;i++) colors[i]=g2_ink(id_PNG,0,0,0); } if(options.generateJPG) { color_black=g2_ink(id_JPG,0,0,0); for(i=0;i<NUM_COLORS;i++) colors[i]=g2_ink(id_JPG,0,0,0); } #endif } else { color_black=g2_ink(id,0,0,0); colors[COLOR_RED]=g2_ink(id_PS,COLOR_DEF_RED); colors[COLOR_GREEN]=g2_ink(id_PS,COLOR_DEF_GREEN); colors[COLOR_BLUE]=g2_ink(id_PS,COLOR_DEF_BLUE); colors[COLOR_YELLOW]=g2_ink(id_PS,COLOR_DEF_YELLOW); colors[COLOR_MAGENTA]=g2_ink(id_PS,COLOR_DEF_MAGENTA); colors[COLOR_TURKIS]=g2_ink(id_PS,COLOR_DEF_TURKIS); if(options.generateFIG) { color_black=g2_ink(id_FIG,0,0,0); colors[COLOR_RED]=g2_ink(id_FIG,COLOR_DEF_RED); colors[COLOR_GREEN]=g2_ink(id_FIG,COLOR_DEF_GREEN); colors[COLOR_BLUE]=g2_ink(id_FIG,COLOR_DEF_BLUE); colors[COLOR_YELLOW]=g2_ink(id_FIG,COLOR_DEF_YELLOW); colors[COLOR_MAGENTA]=g2_ink(id_FIG,COLOR_DEF_MAGENTA); colors[COLOR_TURKIS]=g2_ink(id_FIG,COLOR_DEF_TURKIS); } #ifdef HAVE_LIBGD if(options.generatePNG) { color_black=g2_ink(id_PNG,0,0,0); colors[COLOR_RED]=g2_ink(id_PNG,COLOR_DEF_RED); colors[COLOR_GREEN]=g2_ink(id_PNG,COLOR_DEF_GREEN); colors[COLOR_BLUE]=g2_ink(id_PNG,COLOR_DEF_BLUE); colors[COLOR_YELLOW]=g2_ink(id_PNG,COLOR_DEF_YELLOW); colors[COLOR_MAGENTA]=g2_ink(id_PNG,COLOR_DEF_MAGENTA); colors[COLOR_TURKIS]=g2_ink(id_PNG,COLOR_DEF_TURKIS); } if(options.generateJPG) { color_black=g2_ink(id_JPG,0,0,0); colors[COLOR_RED]=g2_ink(id_JPG,COLOR_DEF_RED); colors[COLOR_GREEN]=g2_ink(id_JPG,COLOR_DEF_GREEN); colors[COLOR_BLUE]=g2_ink(id_JPG,COLOR_DEF_BLUE); colors[COLOR_YELLOW]=g2_ink(id_JPG,COLOR_DEF_YELLOW); colors[COLOR_MAGENTA]=g2_ink(id_JPG,COLOR_DEF_MAGENTA); colors[COLOR_TURKIS]=g2_ink(id_JPG,COLOR_DEF_TURKIS); } #endif } for(i=0;i<structure.size();i++) { // connection to next base if(i<structure.size()-1) { // if the connected bases are only in one of the structures // use the appropriate color g2_line(id,X[i],Y[i],X[i+1],Y[i+1]); // draw circles at line endpoints g2_filled_circle(id,X[i],Y[i],0.7*options.scale); // circles are drawn twice, but thats ok ... } } // draw pairings // !!! pair_table indexing begins at 1 !!! for(i=0;i<structure.size();i++) { if((unsigned short)pair_table[i+1]>i+1) { // pairs in both structures g2_line(id,X[i],Y[i],X[pair_table[i+1]-1],Y[pair_table[i+1]-1]); } } // draw regions g2_set_line_width(id,0.4); list<pair<Uint,Uint> >::const_iterator it; Uint regionNr=0; for(it=regions.begin();it!=regions.end();it++) { double center_x=0,center_y=0; // fill coordinate list for(i=0;i < it->second;i++) { points[2*i]=X[it->first+i]; points[2*i+1]=Y[it->first+i]; center_x+=X[it->first+i]; center_y+=Y[it->first+i]; } numPoints=it->second-1; center_x/=numPoints; // center of gravity center_y/=numPoints; g2_pen(id,colors[regionNr % NUM_COLORS]); g2_poly_line(id,numPoints,points); sprintf(buf,"%d",regionNr+1); g2_string(id,center_x,center_y,buf); // draw region number regionNr++; } // mark 5' end g2_pen(id,color_black); g2_string(id,X[0]-20,Y[0],"5'"); g2_set_font_size(id,base_fontsize*options.scale); g2_set_line_width(id,0.2); // draw sequence for(i=0;i<structure.size();i++) { g2_pen(id,color_black); // match xpos=X[i]-(base_fontsize*options.scale)/2; ypos=Y[i]-4; sprintf(buf,"%c",seq[i]); g2_string(id,xpos,ypos,buf); /* if(!options.hideBaseNumbers) { // draw base number if(basenr % options.baseNumInterval == 0) { sprintf(buf,"%d",basenr); g2_string(id,xpos-20,ypos,buf); } }*/ } // draw structure name g2_string(id,min_X,max_Y-10,(char*)structname.c_str()); g2_flush(id); g2_close(id); free(pair_table); DELETE(X); DELETE(Y); DELETE(points); DELETE(colors); }
int main() { struct main_data data; struct point *tail = 0; struct point *start = 0; pthread_t t_cockpit = 0, t_fisica = 0, t_graph = 0; data.option = -1; data.pdev = -1; data.vdev = -1; data.font_size = 16; data.label_value_dist = 10; /*Define Some variables from main_data*/ data.window_h = 600; data.window_w = 800; data.tempo = 0; data.radius = 5; data.force_t = 0; data.force_r = 0; data.terminate_cp = 0; while(1) /* Main Loop */ { printf("\033[2J"); printf("\n"); printf(" 1. Especificação dos dados do módulo e das condições iniciais do voo (Unidades S.I.).\n"); printf(" 2. Simulação do voo em modo de \"cockpit\".\n"); printf(" 3. Apresentação em modo gráfico da trajectória do módulo.\n"); printf(" 4. Definição do perfil da superfície lunar.\n"); printf(" 5. Simulação do voo em modo gráfico.\n"); printf(" 0. Terminar Programa\n"); printf("\n"); printf(" Escolha uma opção: "); if((scanf("%d", &data.option)) < 1){ printf("Opção Invalida\n"); __fpurge(stdin); } switch(data.option) { case 1 : spec_input(&data); data.option = -1; break; case 2 : if(data.vdev == -1 || data.pdev == -1) { data.pdev = g2_open_X11(data.window_w, data.window_h); data.vdev = g2_open_vd(); g2_attach(data.vdev, data.pdev); strcpy(data.landing_status,"Ready"); } pthread_join(t_cockpit, NULL); pthread_join(t_fisica, NULL); pthread_join(t_graph, NULL); pthread_create(&t_cockpit, NULL, &cockpit_display, &data); pthread_create(&t_fisica, NULL, &fisica, &data); data.option = -1; break; case 3 : data.terminate_cp = 1; pthread_join(t_cockpit, NULL); pthread_join(t_fisica, NULL); pthread_join(t_graph, NULL); data.terminate_cp = 0; pthread_create(&t_graph, NULL, &pos_graph, &data); data.option = -1; break; case 4 : pthread_join(t_cockpit, NULL); pthread_join(t_fisica, NULL); pthread_join(t_graph, NULL); surface_setup(start, tail); break; case 5 : printf("\nList Points\n"); break; case 0 : g2_detach(data.vdev, data.pdev); g2_close(data.pdev); exit(0); default : if(data.vdev != -1 || data.pdev != -1) data.pdev = -1; data.vdev = -1; break; } usleep(100000); } return 0; }
int main() { int i, j; int d, dev[maxdev]={-1, -1, -1, -1, -1,-1, -1, -1, -1, -1}; int ndev=0; char str[256]; double y; printf("\nG2_VERSION %s\n", G2_VERSION); d=g2_open_vd(); /* open virtual device */ printf("Adding.."); #ifdef DO_PS printf("..PS"); dev[ndev]=g2_open_PS("g2_arc.ps", g2_A4, g2_PS_land); g2_attach(d, dev[ndev]); ndev++; printf("..EPSF"); dev[ndev]=g2_open_EPSF("g2_arc.eps"); g2_attach(d, dev[ndev]); ndev++; printf("..EPSF_CLIP"); dev[ndev]=g2_open_EPSF_CLIP("g2_arc_clip.eps",400,400); g2_attach(d, dev[ndev]); ndev++; #endif #ifdef DO_FIG printf("..FIG"); dev[ndev]=g2_open_FIG("g2_arc.fig"); g2_attach(d, dev[ndev]); ndev++; #endif #ifdef DO_X11 printf("..X11"); dev[ndev]=g2_open_X11(400,400); g2_attach(d, dev[ndev]); ndev++; #endif #ifdef DO_GD printf("..GD(png)"); dev[ndev]=g2_open_gd("g2_arc.png", 400, 400,g2_gd_png); g2_attach(d, dev[ndev]); ndev++; printf("..GD(jpeg)"); dev[ndev]=g2_open_gd("g2_arc.jpg", 400, 400,g2_gd_jpeg); g2_attach(d, dev[ndev]); ndev++; #endif #ifdef DO_WIN32 printf("..WIN32"); dev[ndev]=g2_open_win32(400, 400,"g2_arc",0); g2_attach(d, dev[ndev]); ndev++; #endif #ifdef DO_WMF32 printf("..WMF32"); dev[ndev]=g2_open_win32(775, 575,"g2_arc.emf",1); g2_attach(d, dev[ndev]); ndev++; #endif g2_set_auto_flush(d,0); printf("\n"); g2_string(d,10, 50,"90,90"); g2_string(d,10,100,"90,360"); g2_string(d,10,150,"90,0"); g2_string(d,10,200,"360,90"); g2_string(d,10,250,"-45,45"); g2_string(d,10,300,"-45,-315"); g2_string(d,10,350,"-495,-405"); g2_arc(d, 100, 50, 45, 25, 90, 90); g2_arc(d, 100, 100, 45, 25, 90, 360); g2_arc(d, 100, 150, 45, 25, 90, 0); g2_arc(d, 100, 200, 45, 25, 360, 90); g2_arc(d, 100, 250, 45, 25, -45, 45); g2_arc(d, 100, 300, 45, 25, -45, -315); g2_arc(d, 100, 350, 45, 25, -495, -405); g2_filled_arc(d, 100, 50, 40, 20, 90, 90); g2_filled_arc(d, 100, 100, 40, 20, 90, 360); g2_filled_arc(d, 100, 150, 40, 20, 90, 0); g2_filled_arc(d, 100, 200, 40, 20, 360, 90); g2_filled_arc(d, 100, 250, 40, 20, -45, 45); g2_filled_arc(d, 100, 300, 40, 20, -45, -315); g2_filled_arc(d, 100, 350, 40, 20, -495, -405); g2_string(d,320, 50,"0,0"); g2_string(d,320,100,"360,90"); g2_string(d,320,150,"0,90"); g2_string(d,320,200,"90,360"); g2_string(d,320,250,"45,-45"); g2_string(d,320,300,"-315,-45"); g2_string(d,320,350,"-405,-495"); g2_arc(d, 250, 50, 45, 25, 0, 0); g2_arc(d, 250, 100, 45, 25, 360, 90); g2_arc(d, 250, 150, 45, 25, 0, 90); g2_arc(d, 250, 200, 45, 25, 90, 360); g2_arc(d, 250, 250, 45, 25, 45, -45); g2_arc(d, 250, 300, 45, 25, -315, -45); g2_arc(d, 250, 350, 45, 25, -405, -495); g2_filled_arc(d, 250, 50, 40, 20, 90, 90); g2_filled_arc(d, 250, 100, 40, 20, 360, 90); g2_filled_arc(d, 250, 150, 40, 20, 0, 90); g2_filled_arc(d, 250, 200, 40, 20, 90, 360); g2_filled_arc(d, 250, 250, 40, 20, 45, -45); g2_filled_arc(d, 250, 300, 40, 20, -315, -45); g2_filled_arc(d, 250, 350, 40, 20, -405, -495); g2_flush(d); printf("\nDone.\n[Enter]\n"); getchar(); g2_close(d); return 0; }
void FIF(g2_close)(F_REAL *dev) { g2_close(dtoi(*dev)); }
void RNAProfileAlignment::squigglePlot(const string &filename, SquigglePlotOptions &options) const { const double base_fontsize=8; const Uint num_grey_colors=100; const double min_grey_color=1.0; string seq,structure; string base,structname; float *X,*Y,min_X=0,max_X=0,min_Y=0,max_Y=0; Uint i; short *pair_table; int id_PS,id; int ps_grey_colors[num_grey_colors]; int ps_color_red; int ps_color_black; double xpos,ypos; deque<double> pairprob; deque<BaseProbs> baseprobs; getStructureAlignment(options.minPairProb,structure,pairprob); getSequenceAlignment(baseprobs); // filterConsensus(structure,pairprob,baseprobs,0.5); //assert(baseprobs.size() == structure.size()); if(baseprobs.size() != structure.size()) cerr << "Error in resolving consensus structure!" << endl; X = new float[structure.size()]; Y = new float[structure.size()]; pair_table = make_pair_table(structure.c_str()); i = naview_xy_coordinates(pair_table, X, Y); if(i!=structure.size()) cerr << "strange things happening in squigglePlot ..." << endl; // calculate image dimesions for(i=0;i<structure.size();i++) { min_X=min(min_X,X[i]); max_X=max(max_X,X[i]); min_Y=min(min_Y,Y[i]); max_Y=max(max_Y,Y[i]); } // id_PS = g2_open_PS("ali.ps", g2_A4, g2_PS_port); id_PS = g2_open_EPSF((char*)filename.c_str()); id = g2_open_vd(); g2_attach(id,id_PS); // cout << "min_X: " << min_X <<",max_X: " << max_X << ",min_Y: " << min_Y << "max_Y: " << max_Y << endl; g2_set_coordinate_system(id_PS,595/2.0,842/2.0,0.5,0.5); g2_set_line_width(id,0.2); // set colors double intv=min_grey_color/(double)num_grey_colors; for(i=0;i<num_grey_colors;i++) { double grey_color=min_grey_color-i*intv; ps_grey_colors[i]=g2_ink(id_PS,grey_color,grey_color,grey_color); } ps_color_black=g2_ink(id_PS,0,0,0); if(options.greyColors) ps_color_red=g2_ink(id_PS,0,0,0); else ps_color_red=g2_ink(id_PS,1,0,0); // draw sequence g2_set_font_size(id,base_fontsize); for(i=0;i<structure.size();i++) { if(options.mostLikelySequence) { double p=getMlBaseFreq(baseprobs[i]); //base color if(p==1) g2_pen(id,ps_color_red); else g2_pen(id,ps_grey_colors[(int)floor(p*num_grey_colors-1)]); base=getMlBase(baseprobs[i]); xpos=X[i]-base.length()*base_fontsize/2.0; ypos=Y[i]-4; g2_string(id,xpos,ypos,(char*)base.c_str()); } else { drawBaseCircles(id_PS,baseprobs[i],X[i],Y[i]); } // connection to next base if(i<structure.size()-1) { if((1-baseprobs[i].gap)*(1-baseprobs[i+1].gap)==1) g2_pen(id,ps_color_red); else g2_pen(id,ps_grey_colors[(int)floor((1-baseprobs[i].gap)*(1-baseprobs[i+1].gap)*num_grey_colors-1)]); g2_line(id,X[i],Y[i],X[i+1],Y[i+1]); } } // draw pairings // !!! pair_table indexing begins at 1 !!! for(i=0;i<structure.size();i++) { if((unsigned short)pair_table[i+1]>i+1) { // pairs in both structures if(pairprob[i]==1) g2_pen(id,ps_color_red); else g2_pen(id,ps_grey_colors[(int)floor(pairprob[i]*num_grey_colors-1)]); g2_line(id,X[i],Y[i],X[pair_table[i+1]-1],Y[pair_table[i+1]-1]); } } g2_flush(id); g2_close(id); free(pair_table); DELETE(X); DELETE(Y); }