📄 dna2.cc
字号:
} return mw + 18.0;}//--------------------------------------------------------------------------//// peptide_frequency ////--------------------------------------------------------------------------//double peptide_frequency(int cs){ double p = 1.0; int k; for(k=0;k<g.doc[cs].n;k++) if(g.doc[cs].type==DNA) switch(g.doc[cs].text[k]) { case 'A': p *=0.25; break; case 'G': p *=0.25; break; case 'C': p *=0.25; break; case 'T': p *=0.25; break; case 'U': p *=0.25; break; }else switch(g.doc[cs].text[k]) { case 'A': p *=0.083; break; case 'C': p *=0.017; break; case 'D': p *=0.053; break; case 'E': p *=0.062; break; case 'F': p *=0.039; break; case 'G': p *=0.072; break; case 'H': p *=0.022; break; case 'I': p *=0.052; break; case 'K': p *=0.057; break; case 'L': p *=0.090; break; case 'M': p *=0.024; break; case 'N': p *=0.044; break; case 'P': p *=0.051; break; case 'Q': p *=0.040; break; case 'R': p *=0.057; break; case 'S': p *=0.069; break; case 'T': p *=0.058; break; case 'V': p *=0.066; break; case 'W': p *=0.013; break; case 'Y': p *=0.032; break; } return p;}//--------------------------------------------------------------------------//// count_bases ////--------------------------------------------------------------------------//void count_bases(int cs, int *count, int &n){ int ii, k, len=g.doc[cs].n; for(k=0; k<=26; k++) count[k]=0; for(k=0; k<len; k++) { ii = g.doc[cs].text[k]-'A'; if(between(ii,0,26)) count[ii]++; } n = 0; for(k=0; k<=26; k++) n += count[k];}//--------------------------------------------------------------------------//// close ////--------------------------------------------------------------------------//void close(void){ g.noofsequences--; init_editor(g.cs); XClearWindow(g.display, g.draw_window); redrawscreen(0, 0, g.xsize, g.ysize);}//--------------------------------------------------------------------------//// set_offset ////--------------------------------------------------------------------------//void set_offset(int cs){ char tempstring[128]; sprintf(tempstring, "Offset for sequence #%d", cs+1); g.doc[cs].offset = clickbox(tempstring, g.doc[cs].offset, 0, g.doc[cs].n, null, 0); XClearWindow(g.display, g.draw_window); redrawscreen(0, 0, g.xsize, g.ysize);}//--------------------------------------------------------------------------//// configure ////--------------------------------------------------------------------------//void configure(void){ int j,k; Dialog dialog; dialog.needrepeat=0; strcpy(dialog.title,"Configuration"); strcpy(dialog.radio[0][0],"Save file format"); strcpy(dialog.radio[0][1],"Screen"); strcpy(dialog.radio[0][2],"Highlight format"); dialog.radioset[0] = g.save_format; strcpy(dialog.boxes[0],"Matrix Data"); strcpy(dialog.boxes[1],"1st sequence"); strcpy(dialog.boxes[2],"2nd sequence"); sprintf(dialog.answer[1], "%d ", g.matrix_set1+1); sprintf(dialog.answer[2], "%d ", g.matrix_set2+1); dialog.boxtype[0]=LABEL; dialog.boxtype[1]=INTCLICKBOX; dialog.boxmin[1]=1; dialog.boxmax[1]=MAXSEQUENCES; dialog.boxtype[2]=INTCLICKBOX; dialog.boxmin[2]=1; dialog.boxmax[2]=MAXSEQUENCES; dialog.noofboxes=3; dialog.noofradios=1; dialog.radiono[0]=3; dialog.helptopic=0; for(j=0;j<10;j++) for(k=0;k<20;k++) dialog.radiotype[j][k]=RADIO; dialog.keep=0; dialog.want_changecicb = 0; dialog.f1 = null; dialog.transient = 1; strcpy(dialog.path,"."); /////////////////// dialogbox(dialog); /////////////////// g.save_format = dialog.radioset[0]; g.matrix_set1 = atoi(dialog.answer[1])-1; g.matrix_set2 = atoi(dialog.answer[2])-1; return;}//--------------------------------------------------------------------------//// save ////--------------------------------------------------------------------------//void save(int needfilename){ int j,k; char title[128]; FILE *fp; static char filename[FILENAMELENGTH] = "Untitled"; if(needfilename) { strcpy(filename, getfilename(filename)); if(cant_overwrite_file(filename)) return; }else // for printing strcpy(filename, "/tmp/dna.print"); if((fp=fopen(filename,"w"))==NULL) { message("Can't open file"); return; } if(g.editing) { if(g.save_format==SCREEN) { save_screen_text(fp); }else if(g.save_format==HIGHLIGHT) { fprintf(fp, "TITLE Alignment\n"); fprintf(fp, "#These are comments \n"); fprintf(fp, "#Boxes are specified by x1 x2 y1 y2, for example:\n"); fprintf(fp, "#BOX 40 54 1 2\n"); fprintf(fp, "#LABEL 41 0 Labels can be placed using x y coordinates\n"); fprintf(fp, "#TEXT 0 This text would be placed at row 0\n"); fprintf(fp, "SEQUENCES\n"); for(k=0; k<g.noofsequences; k++) { strncpy(title, basefilename(g.doc[k].filename), 20); for(j=strlen(title); j<20; j++) title[j] = ' '; title[20] = 0; fprintf(fp, "%s | %s\n", title, g.doc[k].text); } fprintf(fp, "END\n"); } }else { save_screen_image(fp); } fclose(fp); g.touched = 0;}//--------------------------------------------------------------------------//// save_screen_text ////--------------------------------------------------------------------------//void save_screen_text(FILE *fp){ int seq,k,longest=0,pos=0,width; int charsperline = g.xsize / g.doc[0].charwidth; int negoff[g.noofsequences]; char *s1; char *s2; for(k=0; k<g.noofsequences; k++) { if(g.doc[k].n > longest) longest = g.doc[k].n; if(g.doc[k].offset < 0) negoff[k] = -g.doc[k].offset; else negoff[k] = 0; } while(pos < longest) { for(seq=0; seq<g.noofsequences; seq++) { s1 = pos + g.doc[seq].text + g.doc[seq].offset; width = charsperline; for(k=0; k<width; k++) { if(s1+k < g.doc[seq].text) fputc(' ', fp); else if(s1[k]) fputc(s1[k], fp); } fputc('\n', fp); if(seq+1<g.noofsequences && g.doc[seq+1].n) { s2 = pos + g.doc[seq+1].text + g.doc[seq+1].offset; for(k=0; k<width; k++) { if(matchable_base(s1[k], g.doc[seq].type) && matchable_base(s2[k], g.doc[seq+1].type)) { if(toupper(s1[k]) == toupper(s2[k])) fputc('|', fp); else fputc(' ', fp); } } fputc('\n', fp); } } fputs("\n\n", fp); pos += charsperline; }}//--------------------------------------------------------------------------//// save_screen_image ////--------------------------------------------------------------------------//void save_screen_image(FILE *fp){ int k,x,v,y; int set1 = g.matrix_set1; int set2 = g.matrix_set2; char *s1 = g.doc[set1].text; char *s2 = g.doc[set2].text; int n1 = 8 * ((g.doc[set1].n + 7) / 8); int n2 = g.doc[set2].n; fprintf(fp, "P4 %d %d\n", n1, n2); for(y=0;y<n2;y++) for(x=0;x<n1;x+=8) { v = 0; for(k=0;k<8;k++) if(x+k < g.doc[set1].n) v |= ((s1[x+k]==s2[y])<<(7-k)); fwrite(&v,1,1,fp); }}//--------------------------------------------------------------------------//// printsequence ////--------------------------------------------------------------------------//void printsequence(void){ char tempstring[FILENAMELENGTH]; int j, k; Dialog dialog; dialog.needrepeat=0; strcpy(dialog.title,"Print"); strcpy(dialog.boxes[0],"Print Parameters"); strcpy(dialog.boxes[1],"Printer command"); strcpy(dialog.boxes[2],"Printer device"); strcpy(dialog.boxes[3],"Print to file"); for(k=1;k<=3;k++) if(g.printer_device==k) dialog.boxset[k]=1; else dialog.boxset[k]=0; strcpy(dialog.answer[1], g.printer_command); strcpy(dialog.answer[2], g.printer_name); strcpy(dialog.answer[3], g.printer_file); dialog.boxtype[0]=LABEL; dialog.boxtype[1]=TOGGLESTRING; dialog.boxtype[2]=TOGGLESTRING; dialog.boxtype[3]=TOGGLESTRING; dialog.noofboxes=4; dialog.noofradios=0; dialog.radiono[0]=0; dialog.helptopic=0; for(j=0;j<10;j++) for(k=0;k<20;k++) dialog.radiotype[j][k]=RADIO; dialog.keep=0; dialog.want_changecicb = 0; dialog.f1 = printcheck; dialog.transient = 1; strcpy(dialog.path,"."); /////////////////// dialogbox(dialog); /////////////////// if(g.getout) return; for(k=1;k<=3;k++) if(dialog.boxset[k]) g.printer_device = k; strcpy(g.printer_command, dialog.answer[1]); strcpy(g.printer_name, dialog.answer[2]); strcpy(g.printer_file, dialog.answer[3]); save(0); // save in /tmp/dna.print if(!g.editing) { sprintf(tempstring, "pnmtops /tmp/dna.print > /tmp/dna.ps"); printf("%s\n", tempstring); system(tempstring); } switch(g.printer_device) { case 1: // printer command if(g.editing) sprintf(tempstring, "%s /tmp/dna.print", g.printer_command); else sprintf(tempstring, "%s /tmp/dna.ps", g.printer_command); printf("%s\n", tempstring); system(tempstring); break; case 2: // printer name if(g.editing) sprintf(tempstring, "cat /tmp/dna.print > %s", g.printer_name); else sprintf(tempstring, "cat /tmp/dna.ps > %s", g.printer_name); printf("%s\n", tempstring); system(tempstring); break; case 3: // file name if(g.editing) sprintf(tempstring, "cp /tmp/dna.print %s", g.printer_file); else sprintf(tempstring, "cp /tmp/dna.ps %s", g.printer_file); printf("%s\n", tempstring); system(tempstring); break; } unlink("/tmp/dna.print"); if(!g.editing) unlink("/tmp/dna.ps"); }//--------------------------------------------------------------------------//// printcheck ////--------------------------------------------------------------------------//void printcheck(dialoginfo *a, int radio, int box, int boxbutton){ int k; if(boxbutton==0 && between(box,1,3)) // Printer device { for(k=1;k<=3;k++) a->boxset[k]=False; for(k=1;k<=3;k++) if(k==box) a->boxset[k]=True; for(k=1;k<=3;k++) if(k!=box) XmToggleButtonSetState(a->boxwidget[k][0],a->boxset[k],False); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -