📄 dna2.cc
字号:
if(!g.editing) analyze();}//--------------------------------------------------------------------------//// nextframe ////--------------------------------------------------------------------------//void nextframe(void){ g.doc[g.cs].frame++; if(g.doc[g.cs].frame>2) g.doc[g.cs].frame=0; translate(0); // don't check if it's a protein if(!g.editing) analyze();}//--------------------------------------------------------------------------//// up ////--------------------------------------------------------------------------//void up(void){ int cs; if(g.editing) cs = g.cs; else cs = g.matrix_set2; g.doc[cs].offset += 100; XClearWindow(g.display, g.draw_window); redrawscreen(0, 0, g.xsize, g.ysize);}//--------------------------------------------------------------------------//// down ////--------------------------------------------------------------------------//void down(void){ int cs; if(g.editing) cs = g.cs; else cs = g.matrix_set2; g.doc[cs].offset -= 100; if(!g.editing) g.doc[cs].offset = max(0,g.doc[cs].offset); XClearWindow(g.display, g.draw_window); redrawscreen(0, 0, g.xsize, g.ysize);}//--------------------------------------------------------------------------//// left ////--------------------------------------------------------------------------//void left(void){ int cs; if(g.editing) cs = g.cs; else cs = g.matrix_set1; g.doc[cs].offset += 100; XClearWindow(g.display, g.draw_window); redrawscreen(0, 0, g.xsize, g.ysize);}//--------------------------------------------------------------------------//// right ////--------------------------------------------------------------------------//void right(void){ int cs; if(g.editing) cs = g.cs; else cs = g.matrix_set1; g.doc[cs].offset -= 100; if(!g.editing) g.doc[cs].offset = max(0,g.doc[cs].offset); XClearWindow(g.display, g.draw_window); redrawscreen(0, 0, g.xsize, g.ysize);}//--------------------------------------------------------------------------//// toggle_sequence_mode ////--------------------------------------------------------------------------//void toggle_sequence_mode(void){ int mode = 1 - g.sequence_mode; set_sequence_mode(mode);}//--------------------------------------------------------------------------//// set_sequence_mode ////--------------------------------------------------------------------------//void set_sequence_mode(int mode){ char tempstring[32]; int but=-1,k; for(k=0;k<g.nbuttons;k++) if(!strcmp(g.button[k]->activate_cmd, "dna")){ but=k; break; } if(but<0) return; if(mode==PROTEIN) strcpy(tempstring, "Protein"); else strcpy(tempstring, "DNA"); XmString xms; if(but>0 && XtIsManaged(g.button[but]->widget)) { XtVaSetValues(g.button[but]->widget, XmNlabelString, xms=XmStringCreateSimple(tempstring), NULL); XmStringFree(xms); } g.sequence_mode = mode;}//--------------------------------------------------------------------------//// edit ////--------------------------------------------------------------------------//void edit(void){ g.editing = 1-g.editing; char tempstring[32]; int but=-1,k; for(k=0;k<g.nbuttons;k++) if(!strcmp(g.button[k]->activate_cmd, "edit")){ but=k; break; } if(g.editing) strcpy(tempstring, "Edit"); else strcpy(tempstring, "Matrix plot"); XmString xms; XtVaSetValues(g.button[but]->widget, XmNlabelString, xms=XmStringCreateSimple(tempstring), NULL); XmStringFree(xms); XClearWindow(g.display, g.draw_window); redrawscreen(0, 0, g.xsize, g.ysize);}//--------------------------------------------------------------------------//// undo ////--------------------------------------------------------------------------//void undo(void){ g.doc[g.cs].n = g.doc[g.cs].on; memcpy(g.doc[g.cs].text, g.doc[g.cs].otext, g.doc[g.cs].n); memcpy(g.doc[g.cs].dtext, g.doc[g.cs].otext, g.doc[g.cs].n); g.doc[g.cs].type = g.doc[g.cs].otype; g.doc[g.cs].frame = 0; g.doc[g.cs].offset = 0; g.doc[g.cs].touched = 0; XClearWindow(g.display, g.draw_window); redrawscreen(0, 0, g.xsize, g.ysize);}//---------------------------------------------------------------//// dna2protein ////---------------------------------------------------------------//int dna2protein(char *code){ int k; char c[8]; for(k=0; k<3; k++){ if(code[k]=='T') c[k]='U'; else c[k]=code[k]; } c[3] = 0; if(!(strcmp(c,"UUU"))) return 'F'; if(!(strcmp(c,"UUC"))) return 'F'; if(!(strcmp(c,"UUA"))) return 'L'; if(!(strcmp(c,"UUG"))) return 'L'; if(!(strcmp(c,"UCU"))) return 'S'; if(!(strcmp(c,"UCC"))) return 'S'; if(!(strcmp(c,"UCA"))) return 'S'; if(!(strcmp(c,"UCG"))) return 'S'; if(!(strcmp(c,"UCN"))) return 'S'; if(!(strcmp(c,"UAU"))) return 'Y'; if(!(strcmp(c,"UAC"))) return 'Y'; if(!(strcmp(c,"UAA"))) return 'x'; if(!(strcmp(c,"UAG"))) return 'x'; if(!(strcmp(c,"UAN"))) return 'Y'; if(!(strcmp(c,"UGU"))) return 'C'; if(!(strcmp(c,"UGC"))) return 'C'; if(!(strcmp(c,"UGA"))) return 'x'; if(!(strcmp(c,"UGG"))) return 'W'; if(!(strcmp(c,"CUU"))) return 'L'; if(!(strcmp(c,"CUC"))) return 'L'; if(!(strcmp(c,"CUA"))) return 'L'; if(!(strcmp(c,"CUG"))) return 'L'; if(!(strcmp(c,"CUN"))) return 'L'; if(!(strcmp(c,"CCU"))) return 'P'; if(!(strcmp(c,"CCC"))) return 'P'; if(!(strcmp(c,"CCA"))) return 'P'; if(!(strcmp(c,"CCG"))) return 'P'; if(!(strcmp(c,"CCN"))) return 'P'; if(!(strcmp(c,"CAU"))) return 'H'; if(!(strcmp(c,"CAC"))) return 'H'; if(!(strcmp(c,"CAA"))) return 'Q'; if(!(strcmp(c,"CAG"))) return 'Q'; if(!(strcmp(c,"CGU"))) return 'R'; if(!(strcmp(c,"CGC"))) return 'R'; if(!(strcmp(c,"CGA"))) return 'R'; if(!(strcmp(c,"CGG"))) return 'R'; if(!(strcmp(c,"CGN"))) return 'R'; if(!(strcmp(c,"AUU"))) return 'I'; if(!(strcmp(c,"AUC"))) return 'I'; if(!(strcmp(c,"AUA"))) return 'I'; if(!(strcmp(c,"AUG"))) return 'M'; if(!(strcmp(c,"ACU"))) return 'T'; if(!(strcmp(c,"ACC"))) return 'T'; if(!(strcmp(c,"ACA"))) return 'T'; if(!(strcmp(c,"ACG"))) return 'T'; if(!(strcmp(c,"ACN"))) return 'T'; if(!(strcmp(c,"AAU"))) return 'N'; if(!(strcmp(c,"AAC"))) return 'N'; if(!(strcmp(c,"AAA"))) return 'K'; if(!(strcmp(c,"AAG"))) return 'K'; if(!(strcmp(c,"AGU"))) return 'S'; if(!(strcmp(c,"AGC"))) return 'S'; if(!(strcmp(c,"AGA"))) return 'R'; if(!(strcmp(c,"AGG"))) return 'R'; if(!(strcmp(c,"GUU"))) return 'V'; if(!(strcmp(c,"GUC"))) return 'V'; if(!(strcmp(c,"GUA"))) return 'V'; if(!(strcmp(c,"GUG"))) return 'V'; if(!(strcmp(c,"GUN"))) return 'V'; if(!(strcmp(c,"GCU"))) return 'A'; if(!(strcmp(c,"GCC"))) return 'A'; if(!(strcmp(c,"GCA"))) return 'A'; if(!(strcmp(c,"GCG"))) return 'A'; if(!(strcmp(c,"GCN"))) return 'A'; if(!(strcmp(c,"GAU"))) return 'D'; if(!(strcmp(c,"GAC"))) return 'D'; if(!(strcmp(c,"GAA"))) return 'E'; if(!(strcmp(c,"GAG"))) return 'E'; if(!(strcmp(c,"GGU"))) return 'G'; if(!(strcmp(c,"GGC"))) return 'G'; if(!(strcmp(c,"GGA"))) return 'G'; if(!(strcmp(c,"GGG"))) return 'G'; if(!(strcmp(c,"GGN"))) return 'G'; return 'x';}//--------------------------------------------------------------------------//// compare ////--------------------------------------------------------------------------//void compare(void){ message("Compare not implemented");}//--------------------------------------------------------------------------//// statistics ////--------------------------------------------------------------------------//void statistics(void){ int k,n,cs=g.cs; int listcount = -1, selection; char listtitle[100] = "Sequence statistics"; char **info; int *count = new int[32]; info = new char*[MAXCOMMENTS]; if(!g.doc[cs].n) return; count_bases(cs, count, n); info[++listcount] = new char[128]; sprintf(info[listcount], "Length %d", n); info[++listcount] = new char[128]; sprintf(info[listcount], "Mol. wt %g", molecular_weight(cs)); info[++listcount] = new char[128]; sprintf(info[listcount], "Expected frequency %g", peptide_frequency(cs)); info[++listcount] = new char[128]; sprintf(info[listcount], "AA Total Pct."); for(k=0; k<=26; k++) if(count[k]) { info[++listcount] = new char[128]; sprintf(info[listcount], " %c %3d %2.3g", k+'A', count[k], 100.0*(double)count[k]/(double)n); } selection = 0; listinfo l; l.title = listtitle; l.info = info; l.size = listcount+1; l.itemstoshow = listcount-1; l.firstitem = 1; l.wantsort = 0; l.wantsave = 0; l.helptopic = 0; l.allowedit = 0; l.selection = &selection; l.width = 0; l.transient = 0; l.wantfunction = 0; l.autoupdate = 0; l.clearbutton = 0; l.highest_erased = 0; list(&l); for(k=0;k<=listcount;k++) delete[] info[k]; delete[] info; delete[] count; g.getout=0;}//--------------------------------------------------------------------------//// molecular weight ////--------------------------------------------------------------------------//double molecular_weight(int cs){ double mw = 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': mw +=313.23; break; case 'G': mw +=329.23; break; case 'C': mw +=289.20; break; case 'T': mw +=304.21; break; case 'U': mw +=290.19; break; }else switch(g.doc[cs].text[k]) { case 'A': mw += 71.09; break; case 'C': mw +=103.15; break; case 'D': mw +=115.09; break; case 'E': mw +=129.12; break; case 'F': mw +=147.18; break; case 'G': mw += 57.05; break; case 'H': mw +=137.14; break; case 'I': mw +=113.16; break; case 'K': mw +=128.17; break; case 'L': mw +=113.16; break; case 'M': mw +=131.19; break; case 'N': mw +=114.11; break; case 'P': mw += 97.12; break; case 'Q': mw +=128.14; break; case 'R': mw +=156.19; break; case 'S': mw += 87.08; break; case 'T': mw +=101.11; break; case 'V': mw += 99.14; break; case 'W': mw +=186.21; break; case 'Y': mw +=163.18; break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -