int gmx_rama(int argc,char *argv[]) { const char *desc[] = { "[TT]g_rama[tt] selects the [GRK]phi[grk]/[GRK]psi[grk] dihedral combinations from your topology file", "and computes these as a function of time.", "Using simple Unix tools such as [IT]grep[it] you can select out", "specific residues." }; FILE *out; t_xrama *xr; int j; output_env_t oenv; t_filenm fnm[] = { { efTRX, "-f", NULL, ffREAD }, { efTPX, NULL, NULL, ffREAD }, { efXVG, NULL, "rama",ffWRITE } }; #define NFILE asize(fnm) parse_common_args(&argc,argv,PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE, NFILE,fnm,0,NULL,asize(desc),desc,0,NULL,&oenv); snew(xr,1); init_rama(oenv,ftp2fn(efTRX,NFILE,fnm),ftp2fn(efTPX,NFILE,fnm),xr,3); out=xvgropen(ftp2fn(efXVG,NFILE,fnm),"Ramachandran Plot","Phi","Psi",oenv); xvgr_line_props(out,0,elNone,ecFrank,oenv); xvgr_view(out,0.2,0.2,0.8,0.8,oenv); xvgr_world(out,-180,-180,180,180,oenv); fprintf(out,"@ xaxis tick on\n@ xaxis tick major 60\n@ xaxis tick minor 30\n"); fprintf(out,"@ yaxis tick on\n@ yaxis tick major 60\n@ yaxis tick minor 30\n"); fprintf(out,"@ s0 symbol 2\n@ s0 symbol size 0.4\n@ s0 symbol fill 1\n"); j=0; do { plot_rama(out,xr); j++; } while (new_data(xr)); fprintf(stderr,"\n"); ffclose(out); do_view(oenv,ftp2fn(efXVG,NFILE,fnm),NULL); thanx(stderr); return 0; }
int main(int argc, char *argv[]) { const char *desc[] = { "[TT]g_xrama[tt] shows a Ramachandran movie, that is, it shows", "the Phi/Psi angles as a function of time in an X-Window.[PAR]" "Static Phi/Psi plots for printing can be made with [TT]g_rama[tt].[PAR]", "Some of the more common X command line options can be used:[BR]", "[TT]-bg[tt], [TT]-fg[tt] change colors, [TT]-font fontname[tt], changes the font." }; output_env_t oenv; t_x11 *x11; t_topology *ramatop; t_app *app; t_filenm fnm[] = { { efTRX, "-f", NULL, ffREAD }, { efTPX, NULL, NULL, ffREAD } }; #define NFILE asize(fnm) CopyRight(stderr, argv[0]); parse_common_args(&argc, argv, PCA_CAN_TIME, NFILE, fnm, 0, NULL, asize(desc), desc, 0, NULL, &oenv); if ((x11 = GetX11(&argc, argv)) == NULL) { fprintf(stderr, "Can't open display, set your DISPLAY environment variable\n"); exit(1); } XSetForeground(x11->disp, x11->gc, x11->fg); app = init_app(x11, argc, argv); ramatop = init_rama(oenv, ftp2fn(efTRX, NFILE, fnm), ftp2fn(efTPX, NFILE, fnm), app->xr, 3); mk_gly(app); XMapWindow(x11->disp, app->wd.self); XMapSubwindows(x11->disp, app->wd.self); x11->MainLoop(x11); x11->CleanUp(x11); thanx(stderr); return 0; }
int gmx_dih(int argc,char *argv[]) { const char *desc[] = { "g_dih can do two things. The default is to analyze dihedral transitions", "by merely computing all the dihedral angles defined in your topology", "for the whole trajectory. When a dihedral flips over to another minimum", "an angle/time plot is made.[PAR]", "The opther option is to discretize the dihedral space into a number of", "bins, and group each conformation in dihedral space in the", "appropriate bin. The output is then given as a number of dihedral", "conformations sorted according to occupancy." }; static int mult = -1; static bool bSA = FALSE; t_pargs pa[] = { { "-sa", FALSE, etBOOL, {&bSA}, "Perform cluster analysis in dihedral space instead of analysing dihedral transitions." }, { "-mult", FALSE, etINT, {&mult}, "mulitiplicity for dihedral angles (by default read from topology)" } }; FILE *out; t_xrama *xr; t_topology *top; real **dih,*time; real dd; int i,nframes,maxframes=1000; t_filenm fnm[] = { { efTRX, "-f", NULL, ffREAD }, { efTPX, NULL, NULL, ffREAD }, { efOUT, NULL, NULL, ffWRITE } }; #define NFILE asize(fnm) CopyRight(stderr,argv[0]); parse_common_args(&argc,argv,PCA_CAN_VIEW | PCA_CAN_TIME | PCA_BE_NICE, NFILE,fnm,asize(pa),pa,asize(desc),desc,0,NULL); if (mult != -1) fprintf(stderr,"Using %d for dihedral multiplicity rather than topology values\n",mult); snew(xr,1); init_rama(ftp2fn(efTRX,NFILE,fnm), ftp2fn(efTPX,NFILE,fnm),xr,3); top=read_top(ftp2fn(efTPX,NFILE,fnm),NULL); /* Brute force malloc, may be too big... */ snew(dih,xr->ndih); for(i=0; (i<xr->ndih); i++) snew(dih[i],maxframes); snew(time,maxframes); fprintf(stderr,"\n"); nframes = 0; while (new_data(xr)) { for(i=0; (i<xr->ndih); i++) { dd=xr->dih[i].ang*RAD2DEG; while (dd < 0) dd+=360; while (dd > 360) dd-=360; dih[i][nframes]=dd; } time[nframes]=xr->t; nframes++; if (nframes > maxframes) { maxframes += 1000; for(i=0; (i<xr->ndih); i++) srenew(dih[i],maxframes); srenew(time,maxframes); } } fprintf(stderr,"\nCalculated all dihedrals, now analysing...\n"); out=ftp2FILE(efOUT,NFILE,fnm,"w"); if (bSA) { /* Cluster and structure analysis */ ana_cluster(out,xr,dih,time,top,nframes,mult); } else { /* Analyse transitions... */ ana_trans(out,xr,dih,time,top,nframes); } fclose(out); thanx(stderr); return 0; }