static void write_hconf_mtop(FILE *out,char *title,gmx_mtop_t *mtop, int pr, rvec *x,rvec *v,matrix box) { char format[100]; int i,resnr; gmx_mtop_atomloop_all_t aloop; t_atom *atom; char *atomname,*resname; bromacs(format,99); fprintf (out,"%s\n",(title && title[0])?title:format); fprintf (out,"%5d\n",mtop->natoms); make_hconf_format(pr,v!=NULL,format); aloop = gmx_mtop_atomloop_all_init(mtop); while (gmx_mtop_atomloop_all_next(aloop,&i,&atom)) { gmx_mtop_atomloop_all_names(aloop,&atomname,&resnr,&resname); fprintf(out,"%5d%-5.5s%5.5s%5d", (resnr+1)%100000,resname,atomname,(i+1)%100000); /* next fprintf uses built format string */ if (v) fprintf(out,format, x[i][XX], x[i][YY], x[i][ZZ], v[i][XX],v[i][YY],v[i][ZZ]); else fprintf(out,format, x[i][XX], x[i][YY], x[i][ZZ]); } write_hconf_box(out,pr,box); fflush(out); }
void head(FILE *out, char *fn_, gmx_bool bH, char *cstart, char *ccont, char *cend) { char buf[STRLEN]; int i; fprintf(out,"%s\n",cstart); /* NOTE: the "" are to mislead CVS so it will not replace by version info */ fprintf(out,"%s $""Id""$\n",ccont); for(i=0; (i<NH1); i++) fprintf(out,"%s %s\n",ccont,head1[i]); fprintf(out,"%s %s\n",ccont,GromacsVersion()); for(i=0; (i<NCR); i++) fprintf(out,"%s %s\n",ccont,CopyrightText[i]); for(i=0; (i<NH2); i++) fprintf(out,"%s %s\n",ccont,head2[i]); bromacs(buf,STRLEN-1); fprintf(out,"%s %s\n",ccont,buf); fprintf(out,"%s\n",cend); if (bH) { fprintf(out,"\n"); fprintf(out,"#ifndef _%s\n",fn_); fprintf(out,"#define _%s\n",fn_); fprintf(out,"\n"); } }
void write_hconf_indexed_p(FILE *out, const char *title, t_atoms *atoms, int nx, const atom_id index[], int pr, rvec *x, rvec *v, matrix box) { char resnm[6], nm[6], format[100]; int ai, i, resind, resnr; bromacs(format, 99); fprintf (out, "%s\n", (title && title[0]) ? title : format); fprintf (out, "%5d\n", nx); make_hconf_format(pr, v != NULL, format); for (i = 0; (i < nx); i++) { ai = index[i]; resind = atoms->atom[ai].resind; strncpy(resnm, " ??? ", sizeof(resnm)-1); if (resind < atoms->nres) { strncpy(resnm, *atoms->resinfo[resind].name, sizeof(resnm)-1); resnr = atoms->resinfo[resind].nr; } else { strncpy(resnm, " ??? ", sizeof(resnm)-1); resnr = resind + 1; } if (atoms->atom) { strncpy(nm, *atoms->atomname[ai], sizeof(nm)-1); } else { strncpy(nm, " ??? ", sizeof(nm)-1); } fprintf(out, "%5d%-5.5s%5.5s%5d", resnr%100000, resnm, nm, (ai+1)%100000); /* next fprintf uses built format string */ if (v) { fprintf(out, format, x[ai][XX], x[ai][YY], x[ai][ZZ], v[ai][XX], v[ai][YY], v[ai][ZZ]); } else { fprintf(out, format, x[ai][XX], x[ai][YY], x[ai][ZZ]); } } write_hconf_box(out, pr, box); fflush(out); }
void CopyRight(FILE *out,const char *szProgram) { /* Dont change szProgram arbitrarily - it must be argv[0], i.e. the * name of a file. Otherwise, we won't be able to find the library dir. */ #define NCR (int)asize(CopyrightText) #ifdef GMX_FAHCORE #define NGPL 0 /*FAH has an exception permission from GPL to allow digital signatures in Gromacs*/ #else #define NGPL (int)asize(GPLText) #endif char buf[256],tmpstr[1024]; int i; #ifdef GMX_FAHCORE set_program_name("Gromacs"); #else set_program_name(szProgram); #endif ster_print(out,"G R O M A C S"); fprintf(out,"\n"); bromacs(tmpstr,1023); sp_print(out,tmpstr); fprintf(out,"\n"); ster_print(out,GromacsVersion()); fprintf(out,"\n"); /* fprintf(out,"\n");*/ /* sp_print(out,"PLEASE NOTE: THIS IS A BETA VERSION\n"); fprintf(out,"\n"); */ for(i=0; (i<NCR); i++) sp_print(out,CopyrightText[i]); for(i=0; (i<NGPL); i++) sp_print(out,GPLText[i]); fprintf(out,"\n"); snprintf(buf,256,"%s",Program()); #ifdef GMX_DOUBLE strcat(buf," (double precision)"); #endif ster_print(out,buf); fprintf(out,"\n"); }
void xvgr_header(FILE *fp, const char *title, const char *xaxis, const char *yaxis, int exvg_graph_type, const gmx_output_env_t *oenv) { char pukestr[100], buf[STRLEN]; if (output_env_get_print_xvgr_codes(oenv)) { gmx_format_current_time(buf, STRLEN); fprintf(fp, "# This file was created %s", buf); try { gmx::BinaryInformationSettings settings; settings.generatedByHeader(true); settings.linePrefix("# "); gmx::printBinaryInformation(fp, output_env_get_program_context(oenv), settings); } GMX_CATCH_ALL_AND_EXIT_WITH_FATAL_ERROR; fprintf(fp, "# %s is part of G R O M A C S:\n#\n", output_env_get_program_display_name(oenv)); bromacs(pukestr, 99); fprintf(fp, "# %s\n#\n", pukestr); fprintf(fp, "@ title \"%s\"\n", xvgrstr(title, oenv, buf, STRLEN)); fprintf(fp, "@ xaxis label \"%s\"\n", xvgrstr(xaxis, oenv, buf, STRLEN)); fprintf(fp, "@ yaxis label \"%s\"\n", xvgrstr(yaxis, oenv, buf, STRLEN)); switch (exvg_graph_type) { case exvggtXNY: if (output_env_get_xvg_format(oenv) == exvgXMGR) { fprintf(fp, "@TYPE nxy\n"); } else { fprintf(fp, "@TYPE xy\n"); } break; case exvggtXYDY: fprintf(fp, "@TYPE xydy\n"); break; case exvggtXYDYDY: fprintf(fp, "@TYPE xydydy\n"); break; } } }
void CopyRight(FILE *out,char *szProgram) { /* Dont change szProgram arbitrarily - it must be argv[0], i.e. the * name of a file. Otherwise, we won't be able to find the library dir. */ #define NCR (int)asize(CopyrightText) #define NGPL (int)asize(GPLText) char buf[256],tmpstr[1024]; int i; set_program_name(szProgram); ster_print(out,"G R O M A C S"); fprintf(out,"\n"); bromacs(tmpstr,1023); sp_print(out,tmpstr); fprintf(out,"\n"); ster_print(out,GromacsVersion()); fprintf(out,"\n\n"); /* fprintf(out,"\n");*/ /* sp_print(out,"PLEASE NOTE: THIS IS A BETA VERSION\n"); fprintf(out,"\n"); */ for(i=0; (i<NCR); i++) sp_print(out,CopyrightText[i]); for(i=0; (i<NGPL); i++) sp_print(out,GPLText[i]); fprintf(out,"\n"); sprintf(buf,"%s",Program()); #ifdef GMX_DOUBLE strcat(buf," (double precision)"); #endif ster_print(out,buf); fprintf(out,"\n"); }
void xvgr_header(FILE *fp, const char *title, const char *xaxis, const char *yaxis, int exvg_graph_type, const output_env_t oenv) { char pukestr[100], buf[STRLEN]; time_t t; if (output_env_get_print_xvgr_codes(oenv)) { time(&t); gmx_ctime_r(&t, buf, STRLEN); fprintf(fp, "# This file was created %s", buf); fprintf(fp, "# by the following command:\n# %s\n#\n", command_line()); fprintf(fp, "# %s is part of G R O M A C S:\n#\n", ShortProgram()); bromacs(pukestr, 99); fprintf(fp, "# %s\n#\n", pukestr); fprintf(fp, "@ title \"%s\"\n", xvgrstr(title, oenv, buf, STRLEN)); fprintf(fp, "@ xaxis label \"%s\"\n", xvgrstr(xaxis, oenv, buf, STRLEN)); fprintf(fp, "@ yaxis label \"%s\"\n", xvgrstr(yaxis, oenv, buf, STRLEN)); switch (exvg_graph_type) { case exvggtXNY: if (output_env_get_xvg_format(oenv) == exvgXMGR) { fprintf(fp, "@TYPE nxy\n"); } else { fprintf(fp, "@TYPE xy\n"); } break; case exvggtXYDY: fprintf(fp, "@TYPE xydy\n"); break; case exvggtXYDYDY: fprintf(fp, "@TYPE xydydy\n"); break; } } }
void write_hconf_indexed_p(FILE *out,char *title,t_atoms *atoms, int nx,atom_id index[], int pr, rvec *x,rvec *v,matrix box) { char resnm[6],nm[6],format[100]; int ai,i,resnr; bromacs(format,99); fprintf (out,"%s\n",(title && title[0])?title:format); fprintf (out,"%5d\n",nx); make_hconf_format(pr,v!=NULL,format); for (i=0; (i<nx); i++) { ai=index[i]; resnr=atoms->atom[ai].resnr; strcpy(resnm," ??? "); if (resnr < atoms->nres) strcpy(resnm,*atoms->resname[resnr]); if (atoms->atom) strcpy(nm,*atoms->atomname[ai]); else strcpy(nm," ??? "); fprintf(out,"%5d%-5.5s%5.5s%5d",(resnr+1)%100000,resnm,nm,(ai+1)%100000); /* next fprintf uses built format string */ if (v) fprintf(out,format, x[ai][XX], x[ai][YY], x[ai][ZZ], v[ai][XX],v[ai][YY],v[ai][ZZ]); else fprintf(out,format, x[ai][XX], x[ai][YY], x[ai][ZZ]); } write_hconf_box(out,pr,box); fflush(out); }
FILE *xvgropen(char *fn,char *title,char *xaxis,char *yaxis) { FILE *xvgr; time_t t; xvgr=(FILE *)ffopen(fn,"w"); fprintf(xvgr,"# This file was created by %s\n",Program()); fprintf(xvgr,"# which is part of G R O M A C S:\n"); fprintf(xvgr,"# %s\n",bromacs()); time(&t); fprintf(xvgr,"# All this happened at: %s",ctime(&t)); fprintf(xvgr,"#\n"); fprintf(xvgr,"@ title \"%s\"\n",title); fprintf(xvgr,"@ xaxis label \"%s\"\n",xaxis); fprintf(xvgr,"@ yaxis label \"%s\"\n",yaxis); if (use_xmgr()) fprintf(xvgr,"@TYPE nxy\n"); else fprintf(xvgr,"@TYPE xy\n"); return xvgr; }
FILE *xvgropen(const char *fn,const char *title,const char *xaxis,const char *yaxis) { FILE *xvgr; char pukestr[100]; time_t t; xvgr=gmx_fio_fopen(fn,"w"); if (bPrintXvgrCodes()) { time(&t); fprintf(xvgr,"# This file was created %s",ctime(&t)); fprintf(xvgr,"# by the following command:\n# %s\n#\n",command_line()); fprintf(xvgr,"# %s is part of G R O M A C S:\n#\n",Program()); bromacs(pukestr,99); fprintf(xvgr,"# %s\n#\n",pukestr); fprintf(xvgr,"@ title \"%s\"\n",title); fprintf(xvgr,"@ xaxis label \"%s\"\n",xaxis); fprintf(xvgr,"@ yaxis label \"%s\"\n",yaxis); if (use_xmgr()) fprintf(xvgr,"@TYPE nxy\n"); else fprintf(xvgr,"@TYPE xy\n"); } return xvgr; }
void write_pdbfile_indexed(FILE *out,char *title, t_atoms *atoms,rvec x[], int ePBC,matrix box,char chain, int model_nr, atom_id nindex, atom_id index[]) { char resnm[6],nm[6],ch,pdbform[128],pukestring[100]; atom_id i,ii; int resnr,type; real occup,bfac; bool bOccup; int nlongname=0; bromacs(pukestring,99); fprintf(out,"TITLE %s\n",(title && title[0])?title:pukestring); if (bWideFormat) { fprintf(out,"REMARK This file does not adhere to the PDB standard\n"); fprintf(out,"REMARK As a result of, some programs may not like it\n"); } if (box && ( norm2(box[XX]) || norm2(box[YY]) || norm2(box[ZZ]) ) ) { gmx_write_pdb_box(out,ePBC,box); } if (atoms->pdbinfo) { /* Check whether any occupancies are set, in that case leave it as is, * otherwise set them all to one */ bOccup = TRUE; for (ii=0; (ii<nindex) && bOccup; ii++) { i = index[ii]; bOccup = bOccup && (atoms->pdbinfo[i].occup == 0.0); } } else bOccup = FALSE; if (!bTER) fprintf(out,"MODEL %8d\n",model_nr>=0 ? model_nr : 1); for (ii=0; ii<nindex; ii++) { i=index[ii]; resnr=atoms->atom[i].resnr; strcpy(resnm,*atoms->resname[resnr]); strcpy(nm,*atoms->atomname[i]); /* rename HG12 to 2HG1, etc. */ xlate_atomname_gmx2pdb(nm); resnr++; if (resnr>=10000) resnr = resnr % 10000; if (chain) ch=chain; else if (atoms->atom[i].chain) ch=atoms->atom[i].chain; else ch=' '; if (atoms->pdbinfo) { type = atoms->pdbinfo[i].type; occup = bOccup ? 1.0 : atoms->pdbinfo[i].occup; bfac = atoms->pdbinfo[i].bfac; } else { type = 0; occup = 1.0; bfac = 0.0; } if (bWideFormat) strcpy(pdbform,"%-6s%5u %-4.4s %3.3s %c%4d %10.5f%10.5f%10.5f%8.4f%8.4f\n"); else { if (strlen(nm)<4) strcpy(pdbform,pdbformat); else { strcpy(pdbform,pdbformat4); if (strlen(nm) > 4) { int maxwln=20; if (nlongname < maxwln) { fprintf(stderr,"WARNING: Writing out atom name (%s) longer than 4 characters to .pdb file\n",nm); } else if (nlongname == maxwln) { fprintf(stderr,"WARNING: More than %d long atom names, will not write more warnings\n",maxwln); } nlongname++; } } strcat(pdbform,"%6.2f%6.2f\n"); } fprintf(out,pdbform,pdbtp[type],(i+1)%100000,nm,resnm,ch,resnr, 10*x[i][XX],10*x[i][YY],10*x[i][ZZ],occup,bfac); if (atoms->pdbinfo && atoms->pdbinfo[i].bAnisotropic) { fprintf(out,"ANISOU%5u %-4.4s%3.3s %c%4d %7d%7d%7d%7d%7d%7d\n", (i+1)%100000,nm,resnm,ch,resnr, atoms->pdbinfo[i].uij[0],atoms->pdbinfo[i].uij[1], atoms->pdbinfo[i].uij[2],atoms->pdbinfo[i].uij[3], atoms->pdbinfo[i].uij[4],atoms->pdbinfo[i].uij[5]); } } fprintf(out,"TER\n"); if (!bTER) fprintf(out,"ENDMDL\n"); }
int main(int argc,char *argv[]) { static char *desc[] = { "[TT]mkice[tt] generates an ice crystal in the Ih crystal form which is the", "most stable form. The rectangular unitcell contains eight molecules", "and all oxygens are tetrahedrally coordinated.[PAR]", "If an input file is given it is interpreted as a series of oxygen", "coordinates the distance between which can be scaled by the odist flag.", "The program then adds hydrogens to the oxygens in random orientation", "but with proper OH distances and HOH angle. This feature allows to", "build water clusters based on oxygen coordinates only." }; static int nx=1,ny=1,nz=1; static gmx_bool bYaw=FALSE,bLJ=TRUE,bFull=TRUE,bSeries=FALSE; static gmx_bool bOrdered=TRUE,bDiamond=FALSE,bPBC=TRUE; static real rcut=0.3,odist=0.274,hdist=0.09572; t_pargs pa[] = { { "-nx", FALSE, etINT, {&nx}, "nx" }, { "-ny", FALSE, etINT, {&ny}, "ny" }, { "-nz", FALSE, etINT, {&nz}, "nz" }, { "-yaw", FALSE, etBOOL, {&bYaw}, "Generate virtual sites and shell positions" }, { "-lj", FALSE, etBOOL, {&bLJ}, "Use LJ as well as coulomb for virial calculation" }, { "-rcut", FALSE,etREAL, {&rcut},"Cut-off for virial calculations" }, { "-full", FALSE,etBOOL, {&bFull},"Full virial output" }, { "-odist", FALSE, etREAL, {&odist}, "Distance (nm) between oxygens" }, { "-hdist", FALSE, etREAL, {&hdist}, "Bondlength (nm) for OH bond" }, { "-diamond",FALSE,etBOOL, {&bDiamond}, "Make a diamond instead" }, { "-pbc", FALSE, etBOOL, {&bPBC}, "Make a periodic diamond" }, { "-order", FALSE,etBOOL, {&bOrdered}, "Make a proton-ordered ice lattice" }, { "-series",FALSE, etBOOL, {&bSeries}, "Do a series of virial calculations with different cut-off (from 0.3 up till the specified one)" } }; t_filenm fnm[] = { { efSTO, "-p", "ice", ffWRITE }, { efSTO, "-c", NULL, ffOPTRD }, { efDAT, "-f", NULL, ffOPTRD }, { efTRN, "-o", "ice", ffOPTWR } }; #define NFILE asize(fnm) FILE *fp; char *fn,quote[256]; int i,j,k,n,nmax,m,natom,natmol; t_atoms *pdba; t_atoms atoms; t_symtab symtab; rvec box,tmp,*xx; matrix boxje; CopyRight(stdout,argv[0]); parse_common_args(&argc,argv,0,NFILE,fnm,asize(pa),pa,asize(desc), desc,0,NULL); if (debug) { fprintf(debug,"nx = %3d, ny = %3d, nz = %3d\n",nx,ny,nz); fprintf(debug,"YAW = %3s, LJ = %3s, rcut = %g\n",yesno_names[bYaw], yesno_names[bLJ],rcut); } if (bYaw) natmol = 5; else if (bDiamond) natmol = 1; else natmol = 3; if (opt2bSet("-f",NFILE,fnm)) { natom = read_rel_coords(opt2fn("-f",NFILE,fnm),&xx,natmol); nmax = natom; } else { natom = natmol*8; nmax = natom*nx*ny*nz; snew(xx,nmax); } snew(pdba,1); init_t_atoms(pdba,nmax,TRUE); pdba->nr = nmax; open_symtab(&symtab); for(n=0; (n<nmax); n++) { pdba->pdbinfo[n].type = epdbATOM; pdba->pdbinfo[n].atomnr = 1+n; pdba->atom[n].resnr = 1+(n/natmol); pdba->atomname[n] = put_symtab(&symtab, bDiamond ? diamname[(n % natmol)] : watname[(n % natmol)]); if (bDiamond) pdba->resname[n] = put_symtab(&symtab,"DIA"); else pdba->resname[n] = put_symtab(&symtab,"SOL"); sprintf(pdba->pdbinfo[n].pdbresnr,"%d",n); pdba->atom[n].chain = ' '; } /* Generate the unit cell */ if (bDiamond) unitcell_d(xx,box,odist); else if (opt2bSet("-f",NFILE,fnm)) { random_h_coords(natmol,natom/natmol,xx,box,bYaw,odist,hdist); } else unitcell(xx,box,bYaw,odist,hdist); if (debug) { clear_mat(boxje); boxje[XX][XX] = box[XX]; boxje[YY][YY] = box[YY]; boxje[ZZ][ZZ] = box[ZZ]; } n=0; for(i=0; (i<nx); i++) { tmp[XX] = i*box[XX]; for(j=0; (j<ny); j++) { tmp[YY] = j*box[YY]; for(k=0; (k<nz); k++) { tmp[ZZ] = k*box[ZZ]; for(m=0; (m<natom); m++,n++) { if ((!bOrdered && ((m % natmol) == 0)) || bOrdered) rvec_add(xx[n % natom],tmp,xx[n]); else ; } } } } clear_mat(boxje); boxje[XX][XX] = box[XX]*nx; boxje[YY][YY] = box[YY]*ny; boxje[ZZ][ZZ] = box[ZZ]*nz; printf("Crystal: %10.5f %10.5f %10.5f\n", nx*box[XX],ny*box[YY],nz*box[ZZ]); if (debug && !bDiamond) { if (bSeries) for(i=3; (i<=10*rcut); i++) { fprintf(debug,"This is with rcut = %g\n",i*0.1); virial(debug,bFull,nmax/natmol,xx,boxje, 0.1*i,bYaw,bYaw ? qyaw : qspc,bLJ); } else virial(debug,bFull,nmax/natmol,xx,boxje, rcut,bYaw,bYaw ? qyaw : qspc,bLJ); } if (bDiamond) mk_diamond(pdba,xx,odist,&symtab,bPBC,boxje); fn = ftp2fn(efSTO,NFILE,fnm); if (fn2ftp(fn) == efPDB) { fp = gmx_ffopen(fn,"w"); if (bDiamond) fprintf(fp,"HEADER This is a *diamond*\n"); else fprintf(fp,"HEADER A beautiful Ice Ih crystal\n"); fprintf(fp,"REMARK Generated by mkice with the following options:\n" "REMARK nx = %d, ny = %d, nz = %d, odist = %g, hdist = %g\n", nx,ny,nz,odist,hdist); bromacs(quote,255); write_pdbfile(fp,quote,pdba,xx,boxje,' ',-1); gmx_ffclose(fp); } else { bromacs(quote,255); write_sto_conf(fn,quote,pdba,xx,NULL,boxje); } if (ftp2bSet(efTRN,NFILE,fnm)) write_trn(ftp2fn(efTRN,NFILE,fnm),0,0,0,boxje,nmax,xx,NULL,NULL); return 0; }
static void init_gmx(t_x11 *x11, char *program, int nfile, t_filenm fnm[], const output_env_t oenv) { Pixmap pm; t_gmx *gmx; XSizeHints hints; int w0, h0; int natom, natom_trx; t_topology top; int ePBC; matrix box; t_trxframe fr; t_trxstatus *status; char quote[256]; snew(gmx, 1); snew(gmx->wd, 1); ePBC = read_tpx_top(ftp2fn(efTPR, nfile, fnm), NULL, box, &natom, NULL, NULL, &top); read_first_frame(oenv, &status, ftp2fn(efTRX, nfile, fnm), &fr, TRX_DONT_SKIP); close_trx(status); natom_trx = fr.natoms; /* Creates a simple window */ w0 = DisplayWidth(x11->disp, x11->screen)-132; h0 = DisplayHeight(x11->disp, x11->screen)-140; bromacs(quote, 255); InitWin(gmx->wd, 0, 0, w0, h0, 3, quote); gmx->wd->self = XCreateSimpleWindow(x11->disp, x11->root, gmx->wd->x, gmx->wd->y, gmx->wd->width, gmx->wd->height, gmx->wd->bwidth, WHITE, BLACK); pm = XCreatePixmapFromBitmapData(x11->disp, x11->root, (char *)gromacs_bits, gromacs_width, gromacs_height, WHITE, BLACK, 1); hints.flags = PMinSize; hints.min_width = 2*EWIDTH+40; hints.min_height = EHEIGHT+LDHEIGHT+LEGHEIGHT+40; XSetStandardProperties(x11->disp, gmx->wd->self, gmx->wd->text, program, pm, NULL, 0, &hints); x11->RegisterCallback(x11, gmx->wd->self, x11->root, MainCallBack, gmx); x11->SetInputMask(x11, gmx->wd->self, ButtonPressMask | ButtonReleaseMask | OwnerGrabButtonMask | ExposureMask | StructureNotifyMask); /* The order of creating windows is important here! */ /* Manager */ gmx->man = init_man(x11, gmx->wd->self, 0, 0, 1, 1, WHITE, BLACK, ePBC, box, oenv); gmx->logo = init_logo(x11, gmx->wd->self, false); /* Now put all windows in the proper place */ move_gmx(x11, gmx, w0, h0, false); XMapWindow(x11->disp, gmx->wd->self); map_man(x11, gmx->man); /* Pull Down menu */ gmx->pd = init_pd(x11, gmx->wd->self, gmx->wd->width, x11->fg, x11->bg, MSIZE, gmx_pd_size, gmx_pd, MenuTitle); /* Dialogs & Filters */ gmx->filter = init_filter(&(top.atoms), ftp2fn_null(efNDX, nfile, fnm), natom_trx); init_dlgs(x11, gmx); /* Now do file operations */ set_file(x11, gmx->man, ftp2fn(efTRX, nfile, fnm), ftp2fn(efTPR, nfile, fnm)); ShowDlg(gmx->dlgs[edFilter]); }
void write_pdbfile_indexed(FILE *out, const char *title, t_atoms *atoms, rvec x[], int ePBC, matrix box, char chainid, int model_nr, atom_id nindex, atom_id index[], gmx_conect conect, gmx_bool bTerSepChains) { gmx_conect_t *gc = (gmx_conect_t *)conect; char resnm[6], nm[6], pdbform[128], pukestring[100]; atom_id i, ii; int resind, resnr, type; unsigned char resic, ch; real occup, bfac; gmx_bool bOccup; int nlongname = 0; int chainnum, lastchainnum; int lastresind, lastchainresind; gmx_residuetype_t rt; const char *p_restype; const char *p_lastrestype; gmx_residuetype_init(&rt); bromacs(pukestring, 99); fprintf(out, "TITLE %s\n", (title && title[0]) ? title : pukestring); if (bWideFormat) { fprintf(out, "REMARK This file does not adhere to the PDB standard\n"); fprintf(out, "REMARK As a result of, some programs may not like it\n"); } if (box && ( norm2(box[XX]) || norm2(box[YY]) || norm2(box[ZZ]) ) ) { gmx_write_pdb_box(out, ePBC, box); } if (atoms->pdbinfo) { /* Check whether any occupancies are set, in that case leave it as is, * otherwise set them all to one */ bOccup = TRUE; for (ii = 0; (ii < nindex) && bOccup; ii++) { i = index[ii]; bOccup = bOccup && (atoms->pdbinfo[i].occup == 0.0); } } else { bOccup = FALSE; } fprintf(out, "MODEL %8d\n", model_nr > 0 ? model_nr : 1); lastchainresind = -1; lastchainnum = -1; resind = -1; p_restype = NULL; for (ii = 0; ii < nindex; ii++) { i = index[ii]; lastresind = resind; resind = atoms->atom[i].resind; chainnum = atoms->resinfo[resind].chainnum; p_lastrestype = p_restype; gmx_residuetype_get_type(rt, *atoms->resinfo[resind].name, &p_restype); /* Add a TER record if we changed chain, and if either the previous or this chain is protein/DNA/RNA. */ if (bTerSepChains && ii > 0 && chainnum != lastchainnum) { /* Only add TER if the previous chain contained protein/DNA/RNA. */ if (gmx_residuetype_is_protein(rt, p_lastrestype) || gmx_residuetype_is_dna(rt, p_lastrestype) || gmx_residuetype_is_rna(rt, p_lastrestype)) { fprintf(out, "TER\n"); } lastchainnum = chainnum; lastchainresind = lastresind; } strncpy(resnm, *atoms->resinfo[resind].name, sizeof(resnm)-1); strncpy(nm, *atoms->atomname[i], sizeof(nm)-1); /* rename HG12 to 2HG1, etc. */ xlate_atomname_gmx2pdb(nm); resnr = atoms->resinfo[resind].nr; resic = atoms->resinfo[resind].ic; if (chainid != ' ') { ch = chainid; } else { ch = atoms->resinfo[resind].chainid; if (ch == 0) { ch = ' '; } } if (resnr >= 10000) { resnr = resnr % 10000; } if (atoms->pdbinfo) { type = atoms->pdbinfo[i].type; occup = bOccup ? 1.0 : atoms->pdbinfo[i].occup; bfac = atoms->pdbinfo[i].bfac; } else { type = 0; occup = 1.0; bfac = 0.0; } if (bWideFormat) { strcpy(pdbform, "%-6s%5u %-4.4s %3.3s %c%4d%c %10.5f%10.5f%10.5f%8.4f%8.4f %2s\n"); } else { /* Check whether atomname is an element name */ if ((strlen(nm) < 4) && (gmx_strcasecmp(nm, atoms->atom[i].elem) != 0)) { strcpy(pdbform, pdbformat); } else { strcpy(pdbform, pdbformat4); if (strlen(nm) > 4) { int maxwln = 20; if (nlongname < maxwln) { fprintf(stderr, "WARNING: Writing out atom name (%s) longer than 4 characters to .pdb file\n", nm); } else if (nlongname == maxwln) { fprintf(stderr, "WARNING: More than %d long atom names, will not write more warnings\n", maxwln); } nlongname++; } } strcat(pdbform, "%6.2f%6.2f %2s\n"); } fprintf(out, pdbform, pdbtp[type], (i+1)%100000, nm, resnm, ch, resnr, (resic == '\0') ? ' ' : resic, 10*x[i][XX], 10*x[i][YY], 10*x[i][ZZ], occup, bfac, atoms->atom[i].elem); if (atoms->pdbinfo && atoms->pdbinfo[i].bAnisotropic) { fprintf(out, "ANISOU%5u %-4.4s%3.3s %c%4d%c %7d%7d%7d%7d%7d%7d\n", (i+1)%100000, nm, resnm, ch, resnr, (resic == '\0') ? ' ' : resic, atoms->pdbinfo[i].uij[0], atoms->pdbinfo[i].uij[1], atoms->pdbinfo[i].uij[2], atoms->pdbinfo[i].uij[3], atoms->pdbinfo[i].uij[4], atoms->pdbinfo[i].uij[5]); } } fprintf(out, "TER\n"); fprintf(out, "ENDMDL\n"); if (NULL != gc) { /* Write conect records */ for (i = 0; (i < gc->nconect); i++) { fprintf(out, "CONECT%5d%5d\n", gc->conect[i].ai+1, gc->conect[i].aj+1); } } gmx_residuetype_destroy(rt); }