From: EPF (E. P. Friis) <ep...@no...> - 2003-07-09 14:48:23
|
Hi PyMOL users, MEAD's potential maps can be used in PyMOL, but it requires a little more than a bit of tweaking, as the maps are in the AVS .fld format, which can not be read by PyMOL. (These maps can be read by Dino, as Paulo just mentioned). Also, PyMOL reads (as far as I can see) only big-endian phi-maps. I have written a small program, which does the conversion from .fld to big-endian-.phi, so the maps can be read by PyMOL. It just finished it today, and it has only been tested on Linux (i386), so beware ;-) To create a nice electrostatic surface, you need: * Gromacs (not strictly necessary, but makes life easier) Download from http://www.gromacs.org * MEAD. Download from http://www.scripps.edu/bashford/ * fld2phi, source code quoted below (sorry, but I don't have access to our external web server, and it's only about 4kb). * PyMOL, of course (v0.88 or newer). Here is an example how to create everything from scratch for 4PTI.pdb Gromacs steps ------------- 1) use pdb2gmx to create .gro and .top files: pdb2gmx -f 4PTI.pdb -o 4PTI.gro -p 4PTI.top 2) use grompp to create .tpr file: grompp -f 4PTI.mdp -p 4PTI.top -o 4PTI.tpr -c 4PTI.gro The file 4PTI.mdp contains the parameters for the Gromacs simulation. But as we are not going to do any simulation this time, an empty file is ok. It can be created with touch 4PTI.mdp. 3) use editconf to create a MEAD-readable pdb file: editconf -f 4PTI.tpr -mead -o 4PTI.pqr.pdb The output pdb file must then be renamed to be recognized by MEAD: mv 4PTI.pqr.pdb 4PTI.pqr MEAD steps ---------- 1) create a .ogm file which specifies the grid size. Notice that PyMOL can only handle grids which are 65x65x65 points, so your only option is to change the spacing between points. You can specify focussing options in the .ogm file, but only the coarsest grid is written anyway, so you only need one line in the 4PTI.ogm file: ON_GEOM_CENT 65 1.0 See documentation for other centering options (first parameter). Next number is the number of grid points on each side (must be 65 to be readable by PyMOL). The last number is a real specifying the distance between grid points. 2) Run 'potential' to create the grid: potential -epsin 2 -CoarseFieldOut 4PTI 4PTI The epsin option is mandatory and specifies the internal (in the protein) dielectric constant. The program will say something like: WARINING from potential main program: Could not open field point file, 4PTI.fpt, for reading. Exiting without giving any potentials. This can be ignored. The program still writes out a 4PTI.fld file with the grid. Notice that this file in not overwritten, so you must delete it manually if it already exists. Convert to PyMOL readable grid ------------------------------ 1) Use the fld2phi to convert the .fld file to a big-endian .phi grid file: fld2phi 4PTI.fld 4PTI.phi This sould create a 4PTI.phi file which is readable by PyMOL. PyMOL steps ----------- 1) Load the structure including the hydrogens built by Gromacs: load 4PTI.pqr, 4PTI 2) Create a selection of the water: select water, 4PTI and resn SOL 3) Remove the water atoms: remove water 4) Show the surface of the 4PTI object: show surface, 4PTI 5) Load the electrostatic grid: load 4PTI.phi, map You can show the extent of the grid box by clicking on the object called "map" in the object list to the right. 6) Create a color ramp object: ramp_new e_lvl, map, [-0.02,0.00,0.02] 7) Color the surface according to the grid and map: set surface_color, e_lvl, 4PTI Thats it. You can change the color scale on the fly by issuing another ramp_new command with other numbers. The 3 numbers are red-point, white-point and blue-point, respectively. The scale can also be changed by ctrl+mid-click while you drag the color scale. It is also possible to create one or more contour surfaces: isosurface contour1, map, -0.05 where contour1 is the object name of the surface (choose whatever you want), "map" is the object name of the electrostatic potential map and the number is the contour level. The commands isomesh and isodot have the same syntax and do exactly what you think. Best regards (and please forgive me for quoting source code here :) Esben ************************************************************** * Source code for fld2phi * * save as: fld2phi.c * * compile with: gcc -o fld2phi fld2phi.c * ************************************************************** /* This is fld2phi.c */ /* This program reads little-endian AVS fields (.fld-files) from MEAD and */ /* convert it to big-endian .phi maps readable by PyMOL */ /* Tested on i386-Linux only */ /* (c) Esben Friis, 2003 */ /* ------------ INCLUDES --------------- */ #include <stdio.h> #include <stdlib.h> /* ------------- DEFINES --------------- */ #define VERSION "1.0" #define DATE "2003-07-09" /* ------------- FUNCTIONS ------------- */ int get_fld_header (char *filename, int *gridpts, float *xmin, float *ymin, float *zmin, float *xmax, float *ymax, float *zmax ) { char buffer[256]; int i; FILE *infile; if (!(infile = fopen(filename,"rb"))) return 0; else { for (i=0; i<4; i++) fgets(buffer, 256, infile); fgets(buffer, 256, infile); *gridpts = atoi(buffer+5); /* the number of grid points in each direction */ for (i=0; i<5; i++) fgets(buffer, 256, infile); fgets(buffer, 256, infile); /* min extent line */ sscanf(buffer+8, "%f %f %f", xmin, ymin, zmin); fgets(buffer, 256, infile); /* max extent line */ sscanf(buffer+8, "%f %f %f", xmax, ymax, zmax); fgets(buffer, 256, infile); fclose (infile); return 1; } } int get_fld_grid (char *filename, int gridpts, float *grid) { char buffer[256]; int i, x, y, z, nobj; FILE *infile; if (!(infile = fopen(filename,"rb"))) return 0; else { for (i=0; i<13; i++) fgets(buffer, 256, infile); /* --- end of header ---- */ fgets(buffer, 3, infile); /* junk bytes */ nobj = fread(grid, 4, gridpts*gridpts*gridpts, infile); /* data array */ printf ("read %d data points from %s\n", nobj, filename); fclose (infile); } } void write_big_endian_float(FILE *stream, float *f) { char *p; char rev[4]; p = (char*) f; rev[0] = p[3]; rev[1] = p[2]; rev[2] = p[1]; rev[3] = p[0]; fwrite(&rev, 4, 1, stream); } int write_phi(char *filename, int gridpts, float *grid, float xmin, float ymin, float zmin, float xmax, float ymax, float zmax) { float xmid, ymid, zmid, scale; FILE *outfile; int i, x, y,z; if (!(outfile = fopen(filename,"wb"))) return 0; else { xmid = (xmax+xmin)/2.0; ymid = (ymax+ymin)/2.0; zmid = (zmax+zmin)/2.0; scale = ((float)gridpts-1.0)/(xmax-xmin); printf ("midpoint %f, %f, %f, scale = %f\n", xmid, ymid, zmid, scale); fprintf(outfile,"%c%c%c%c",0,0,0,0x14); fprintf(outfile,"now starting phimap "); fprintf(outfile,"%c%c%c%c",0,0,0,0x14); fprintf(outfile,"%c%c%c%c",0,0,0,0x46); fprintf(outfile,"potential "); fprintf(outfile,"Map converted from MEAD AVS (fld) file "); fprintf(outfile,"%c%c%c%c",0,0,0,0x46); fprintf(outfile,"%c%c%c%c",0,0x10,0xc3,0x04); /* order is z y x */ for (z=0; z<gridpts; z++) for (y=0; y<gridpts; y++) for (x=0; x<gridpts; x++) write_big_endian_float(outfile, grid+gridpts*gridpts*z+gridpts*y+x); fprintf(outfile,"%c%c%c%c%c%c%c%c",0x13,0x80,0x00,0x10,0xc3,0x04,0x00,0x00); fprintf(outfile," end of phimap "); fprintf(outfile,"%c%c%c%c",0x10,0,0,0); fprintf(outfile,"%c%c%c%c",0x10,0,0,0); write_big_endian_float(outfile, &scale); write_big_endian_float(outfile, &xmid); write_big_endian_float(outfile, &ymid); write_big_endian_float(outfile, &zmid); fprintf(outfile,"%c%c%c%c",0x10,0,0,0); fclose(outfile); } } void usage(void) { fprintf(stderr,"USAGE:\n"); fprintf(stderr,"fld2phi <map.fld> <map.phi>\n\n"); fprintf(stderr,"Converts an AVS .fld grid file <map.fld> written by MEAD's 'potential'\n"); fprintf(stderr,"program to a big-endian Delphi grid file <map.phi> which is readable\n"); fprintf(stderr,"by eg. PyMOL.\n"); fprintf(stderr,"Notice that PyMOL (v0.90) can only handle grids of 65x65x65 points.\n"); fprintf(stderr,"fld2phi is version %s from %s\n",VERSION,DATE); exit(0); } int main (int argc, char **argv) { float xmin, ymin, zmin, xmax, ymax, zmax; float *grid; int gridpts; if (argc !=3) usage(); get_fld_header(argv[1], &gridpts, &xmin, &ymin, &zmin, &xmax, &ymax, &zmax); printf ("%d, %f, %f, %f, %f, %f, %f\n", gridpts, xmin, ymin, zmin, xmax, ymax, zmax); printf ("Grid size is %d.\n", gridpts); if (gridpts != 65) { printf ("WARNING:\n"); printf ("PyMOL version 0.90 only reads maps which are 65x65x65!\n"); } grid = (float*) malloc(gridpts*gridpts*gridpts*4); get_fld_grid(argv[1], gridpts, grid); write_phi(argv[2], gridpts, grid, xmin, ymin, zmin, xmax, ymax, zmax); return 0; } |
From: Kaushik R. <kx...@ps...> - 2003-07-09 19:00:41
|
There has been some talk on the list regarding failure of PyMOL in reading Delphi generated potential maps that I missed. I have generated phimap using a modified version of Delphi in the GRASP format that PyMOL reads and displays without any problem. So I am not sure what the problem is. Can anybody please let me know what was the problem with PyMOL reading Delphi generated GRASP potential maps? Was wondering if PyMOL is doing the right thing?? Thanks, Kaushik Raha Penn State University On Wednesday, July 9, 2003, at 10:48 AM, EPF (Esben Peter Friis) wrote: > > Hi PyMOL users, > > MEAD's potential maps can be used in PyMOL, but it requires a little > more > than a bit of tweaking, as the maps are in the AVS .fld format, which > can > not be read by PyMOL. (These maps can be read by Dino, as Paulo just > mentioned). Also, PyMOL reads (as far as I can see) only big-endian > phi-maps. > > I have written a small program, which does the conversion from .fld to > big-endian-.phi, so the maps can be read by PyMOL. It just finished it > today, and it has only been tested on Linux (i386), so beware ;-) > > To create a nice electrostatic surface, you need: > > > * Gromacs (not strictly necessary, but makes life easier) Download from > http://www.gromacs.org > * MEAD. Download from http://www.scripps.edu/bashford/ > * fld2phi, source code quoted below (sorry, but I don't have access to > our > external web server, and it's only about 4kb). > * PyMOL, of course (v0.88 or newer). > > > Here is an example how to create everything from scratch for 4PTI.pdb > > > Gromacs steps > ------------- > 1) use pdb2gmx to create .gro and .top files: > pdb2gmx -f 4PTI.pdb -o 4PTI.gro -p 4PTI.top > > 2) use grompp to create .tpr file: > grompp -f 4PTI.mdp -p 4PTI.top -o 4PTI.tpr -c 4PTI.gro > > The file 4PTI.mdp contains the parameters for the Gromacs simulation. > But as > we are not going to do any simulation this time, an empty file is ok. > It can > be created with touch 4PTI.mdp. > > 3) use editconf to create a MEAD-readable pdb file: > editconf -f 4PTI.tpr -mead -o 4PTI.pqr.pdb > > The output pdb file must then be renamed to be recognized by MEAD: > mv 4PTI.pqr.pdb 4PTI.pqr > > > MEAD steps > ---------- > > 1) create a .ogm file which specifies the grid size. Notice that PyMOL > can > only handle grids which are 65x65x65 points, so your only option is to > change the spacing between points. You can specify focussing options > in the > .ogm file, but only the coarsest grid is written anyway, so you only > need > one line in the 4PTI.ogm file: > > ON_GEOM_CENT 65 1.0 > > See documentation for other centering options (first parameter). Next > number > is the number of grid points on each side (must be 65 to be readable by > PyMOL). The last number is a real specifying the distance between grid > points. > > 2) Run 'potential' to create the grid: > potential -epsin 2 -CoarseFieldOut 4PTI 4PTI > > The epsin option is mandatory and specifies the internal (in the > protein) > dielectric constant. The program will say something like: > > WARINING from potential main program: > Could not open field point file, 4PTI.fpt, for reading. Exiting without > giving any potentials. > > This can be ignored. The program still writes out a 4PTI.fld file with > the > grid. Notice that this file in not overwritten, so you must delete it > manually if it already exists. > > Convert to PyMOL readable grid > ------------------------------ > > 1) Use the fld2phi to convert the .fld file to a big-endian .phi grid > file: > fld2phi 4PTI.fld 4PTI.phi > > This sould create a 4PTI.phi file which is readable by PyMOL. > > > PyMOL steps > ----------- > > 1) Load the structure including the hydrogens built by Gromacs: > load 4PTI.pqr, 4PTI > > 2) Create a selection of the water: > select water, 4PTI and resn SOL > > 3) Remove the water atoms: > remove water > > 4) Show the surface of the 4PTI object: > show surface, 4PTI > > 5) Load the electrostatic grid: > load 4PTI.phi, map > > You can show the extent of the grid box by clicking on the object > called > "map" in the object list to the right. > > 6) Create a color ramp object: > ramp_new e_lvl, map, [-0.02,0.00,0.02] > > 7) Color the surface according to the grid and map: > set surface_color, e_lvl, 4PTI > > Thats it. You can change the color scale on the fly by issuing another > ramp_new command with other numbers. The 3 numbers are red-point, > white-point and blue-point, respectively. The scale can also be > changed by > ctrl+mid-click while you drag the color scale. > > It is also possible to create one or more contour surfaces: > isosurface contour1, map, -0.05 > > where contour1 is the object name of the surface (choose whatever you > want), > "map" is the object name of the electrostatic potential map and the > number > is the contour level. The commands isomesh and isodot have the same > syntax > and do exactly what you think. > > > > Best regards (and please forgive me for quoting source code here :) > > Esben > > > ************************************************************** > * Source code for fld2phi * > * save as: fld2phi.c * > * compile with: gcc -o fld2phi fld2phi.c * > ************************************************************** > > /* This is fld2phi.c */ > /* This program reads little-endian AVS fields (.fld-files) from MEAD > and > */ > /* convert it to big-endian .phi maps readable by PyMOL > */ > /* Tested on i386-Linux only */ > /* (c) Esben Friis, 2003 */ > > /* ------------ INCLUDES --------------- */ > > #include <stdio.h> > #include <stdlib.h> > > /* ------------- DEFINES --------------- */ > > #define VERSION "1.0" > #define DATE "2003-07-09" > > /* ------------- FUNCTIONS ------------- */ > > int get_fld_header (char *filename, int *gridpts, float *xmin, float > *ymin, > float *zmin, float *xmax, float *ymax, float *zmax ) > { > char buffer[256]; > int i; > FILE *infile; > > if (!(infile = fopen(filename,"rb"))) > return 0; > else > { > for (i=0; i<4; i++) > fgets(buffer, 256, infile); > > fgets(buffer, 256, infile); > *gridpts = atoi(buffer+5); /* the number of grid points in each > direction */ > > for (i=0; i<5; i++) > fgets(buffer, 256, infile); > > fgets(buffer, 256, infile); /* min extent line */ > sscanf(buffer+8, "%f %f %f", xmin, ymin, zmin); > > fgets(buffer, 256, infile); /* max extent line */ > sscanf(buffer+8, "%f %f %f", xmax, ymax, zmax); > > fgets(buffer, 256, infile); > > fclose (infile); > > return 1; > } > } > > > int get_fld_grid (char *filename, int gridpts, float *grid) > { > char buffer[256]; > int i, x, y, z, nobj; > FILE *infile; > > if (!(infile = fopen(filename,"rb"))) > return 0; > else > { > for (i=0; i<13; i++) > fgets(buffer, 256, infile); > > /* --- end of header ---- */ > > fgets(buffer, 3, infile); /* junk bytes */ > nobj = fread(grid, 4, gridpts*gridpts*gridpts, infile); /* data > array > */ > > printf ("read %d data points from %s\n", nobj, filename); > > fclose (infile); > } > } > > > void write_big_endian_float(FILE *stream, float *f) > { > char *p; > char rev[4]; > > p = (char*) f; > rev[0] = p[3]; > rev[1] = p[2]; > rev[2] = p[1]; > rev[3] = p[0]; > fwrite(&rev, 4, 1, stream); > } > > > int write_phi(char *filename, int gridpts, float *grid, float xmin, > float > ymin, float zmin, float xmax, float ymax, float zmax) > { > float xmid, ymid, zmid, scale; > FILE *outfile; > int i, x, y,z; > > if (!(outfile = fopen(filename,"wb"))) > return 0; > else > { > > xmid = (xmax+xmin)/2.0; > ymid = (ymax+ymin)/2.0; > zmid = (zmax+zmin)/2.0; > > scale = ((float)gridpts-1.0)/(xmax-xmin); > > printf ("midpoint %f, %f, %f, scale = %f\n", xmid, ymid, zmid, > scale); > > fprintf(outfile,"%c%c%c%c",0,0,0,0x14); > fprintf(outfile,"now starting phimap "); > fprintf(outfile,"%c%c%c%c",0,0,0,0x14); > fprintf(outfile,"%c%c%c%c",0,0,0,0x46); > fprintf(outfile,"potential "); > fprintf(outfile,"Map converted from MEAD AVS (fld) file > "); > fprintf(outfile,"%c%c%c%c",0,0,0,0x46); > fprintf(outfile,"%c%c%c%c",0,0x10,0xc3,0x04); > > /* order is z y x */ > for (z=0; z<gridpts; z++) > for (y=0; y<gridpts; y++) > for (x=0; x<gridpts; x++) > write_big_endian_float(outfile, > grid+gridpts*gridpts*z+gridpts*y+x); > > > fprintf(outfile,"%c%c%c%c%c%c%c%c",0x13,0x80,0x00,0x10,0xc3,0x04,0x00,0 > x00); > > fprintf(outfile," end of phimap "); > > fprintf(outfile,"%c%c%c%c",0x10,0,0,0); > fprintf(outfile,"%c%c%c%c",0x10,0,0,0); > > write_big_endian_float(outfile, &scale); > write_big_endian_float(outfile, &xmid); > write_big_endian_float(outfile, &ymid); > write_big_endian_float(outfile, &zmid); > fprintf(outfile,"%c%c%c%c",0x10,0,0,0); > > fclose(outfile); > } > } > > void usage(void) > { > fprintf(stderr,"USAGE:\n"); > fprintf(stderr,"fld2phi <map.fld> <map.phi>\n\n"); > fprintf(stderr,"Converts an AVS .fld grid file <map.fld> written by > MEAD's 'potential'\n"); > fprintf(stderr,"program to a big-endian Delphi grid file <map.phi> > which > is readable\n"); > fprintf(stderr,"by eg. PyMOL.\n"); > fprintf(stderr,"Notice that PyMOL (v0.90) can only handle grids of > 65x65x65 points.\n"); > fprintf(stderr,"fld2phi is version %s from %s\n",VERSION,DATE); > > exit(0); > } > > int main (int argc, char **argv) > { > float xmin, ymin, zmin, xmax, ymax, zmax; > float *grid; > int gridpts; > > if (argc !=3) > usage(); > > get_fld_header(argv[1], &gridpts, &xmin, &ymin, &zmin, &xmax, &ymax, > &zmax); > > printf ("%d, %f, %f, %f, %f, %f, %f\n", gridpts, xmin, ymin, zmin, > xmax, > ymax, zmax); > > printf ("Grid size is %d.\n", gridpts); > if (gridpts != 65) > { > printf ("WARNING:\n"); > printf ("PyMOL version 0.90 only reads maps which are > 65x65x65!\n"); > } > > grid = (float*) malloc(gridpts*gridpts*gridpts*4); > > get_fld_grid(argv[1], gridpts, grid); > > write_phi(argv[2], gridpts, grid, xmin, ymin, zmin, xmax, ymax, > zmax); > > return 0; > } > > > ------------------------------------------------------- > This SF.Net email sponsored by: Parasoft > Error proof Web apps, automate testing & more. > Download & eval WebKing and get a free book. > www.parasoft.com/bulletproofapps > _______________________________________________ > PyMOL-users mailing list > PyM...@li... > https://lists.sourceforge.net/lists/listinfo/pymol-users > |
From: Yu C. <ch...@hh...> - 2003-07-09 19:59:21
|
Hello, Kaushik Yeah, we do had problems with DelPhi to PyMoL. I don't know what your mean by "modified version of Delphi..." We bought the latest Delphi from their website, and used the data from all the example folders comes with Delphi. The calculation all went well. When we tried to read the phimap into PyMoL, after load delphi-map.phi, e_pot In the console window, the line objectMap: Map Read. Range= -....... to ...... Then range is incredibly large, the negtive and positive values each has about over 30 digits! But when we use the same data in GRASP to generate the phimap, it reads in well. If you could give us some advice on how you modified Delphi, or how to get it, we would be greatly appreciate! Best Yu Chen =========================================== Yu Chen Howard Hughes Medical Institute Chemistry Building, Rm 122 University of Maryland at Baltimore County 1000 Hilltop Circle Baltimore, MD 21250 email: ch...@hh... =========================================== On Wed, 9 Jul 2003, Kaushik Raha wrote: > There has been some talk on the list regarding failure of PyMOL in > reading Delphi generated potential maps that I missed. I have generated > phimap using a modified version of Delphi in the GRASP format that > PyMOL reads and displays without any problem. So I am not sure what the > problem is. Can anybody please let me know what was the problem with > PyMOL reading Delphi generated GRASP potential maps? Was wondering if > PyMOL is doing the right thing?? > > Thanks, > Kaushik Raha > Penn State University > > On Wednesday, July 9, 2003, at 10:48 AM, EPF (Esben Peter Friis) wrote: > > > > > Hi PyMOL users, > > > > MEAD's potential maps can be used in PyMOL, but it requires a little > > more > > than a bit of tweaking, as the maps are in the AVS .fld format, which > > can > > not be read by PyMOL. (These maps can be read by Dino, as Paulo just > > mentioned). Also, PyMOL reads (as far as I can see) only big-endian > > phi-maps. > > > > I have written a small program, which does the conversion from .fld to > > big-endian-.phi, so the maps can be read by PyMOL. It just finished it > > today, and it has only been tested on Linux (i386), so beware ;-) > > > > To create a nice electrostatic surface, you need: > > > > > > * Gromacs (not strictly necessary, but makes life easier) Download from > > http://www.gromacs.org > > * MEAD. Download from http://www.scripps.edu/bashford/ > > * fld2phi, source code quoted below (sorry, but I don't have access to > > our > > external web server, and it's only about 4kb). > > * PyMOL, of course (v0.88 or newer). > > > > > > Here is an example how to create everything from scratch for 4PTI.pdb > > > > > > Gromacs steps > > ------------- > > 1) use pdb2gmx to create .gro and .top files: > > pdb2gmx -f 4PTI.pdb -o 4PTI.gro -p 4PTI.top > > > > 2) use grompp to create .tpr file: > > grompp -f 4PTI.mdp -p 4PTI.top -o 4PTI.tpr -c 4PTI.gro > > > > The file 4PTI.mdp contains the parameters for the Gromacs simulation. > > But as > > we are not going to do any simulation this time, an empty file is ok. > > It can > > be created with touch 4PTI.mdp. > > > > 3) use editconf to create a MEAD-readable pdb file: > > editconf -f 4PTI.tpr -mead -o 4PTI.pqr.pdb > > > > The output pdb file must then be renamed to be recognized by MEAD: > > mv 4PTI.pqr.pdb 4PTI.pqr > > > > > > MEAD steps > > ---------- > > > > 1) create a .ogm file which specifies the grid size. Notice that PyMOL > > can > > only handle grids which are 65x65x65 points, so your only option is to > > change the spacing between points. You can specify focussing options > > in the > > .ogm file, but only the coarsest grid is written anyway, so you only > > need > > one line in the 4PTI.ogm file: > > > > ON_GEOM_CENT 65 1.0 > > > > See documentation for other centering options (first parameter). Next > > number > > is the number of grid points on each side (must be 65 to be readable by > > PyMOL). The last number is a real specifying the distance between grid > > points. > > > > 2) Run 'potential' to create the grid: > > potential -epsin 2 -CoarseFieldOut 4PTI 4PTI > > > > The epsin option is mandatory and specifies the internal (in the > > protein) > > dielectric constant. The program will say something like: > > > > WARINING from potential main program: > > Could not open field point file, 4PTI.fpt, for reading. Exiting without > > giving any potentials. > > > > This can be ignored. The program still writes out a 4PTI.fld file with > > the > > grid. Notice that this file in not overwritten, so you must delete it > > manually if it already exists. > > > > Convert to PyMOL readable grid > > ------------------------------ > > > > 1) Use the fld2phi to convert the .fld file to a big-endian .phi grid > > file: > > fld2phi 4PTI.fld 4PTI.phi > > > > This sould create a 4PTI.phi file which is readable by PyMOL. > > > > > > PyMOL steps > > ----------- > > > > 1) Load the structure including the hydrogens built by Gromacs: > > load 4PTI.pqr, 4PTI > > > > 2) Create a selection of the water: > > select water, 4PTI and resn SOL > > > > 3) Remove the water atoms: > > remove water > > > > 4) Show the surface of the 4PTI object: > > show surface, 4PTI > > > > 5) Load the electrostatic grid: > > load 4PTI.phi, map > > > > You can show the extent of the grid box by clicking on the object > > called > > "map" in the object list to the right. > > > > 6) Create a color ramp object: > > ramp_new e_lvl, map, [-0.02,0.00,0.02] > > > > 7) Color the surface according to the grid and map: > > set surface_color, e_lvl, 4PTI > > > > Thats it. You can change the color scale on the fly by issuing another > > ramp_new command with other numbers. The 3 numbers are red-point, > > white-point and blue-point, respectively. The scale can also be > > changed by > > ctrl+mid-click while you drag the color scale. > > > > It is also possible to create one or more contour surfaces: > > isosurface contour1, map, -0.05 > > > > where contour1 is the object name of the surface (choose whatever you > > want), > > "map" is the object name of the electrostatic potential map and the > > number > > is the contour level. The commands isomesh and isodot have the same > > syntax > > and do exactly what you think. > > > > > > > > Best regards (and please forgive me for quoting source code here :) > > > > Esben > > > > > > ************************************************************** > > * Source code for fld2phi * > > * save as: fld2phi.c * > > * compile with: gcc -o fld2phi fld2phi.c * > > ************************************************************** > > > > /* This is fld2phi.c */ > > /* This program reads little-endian AVS fields (.fld-files) from MEAD > > and > > */ > > /* convert it to big-endian .phi maps readable by PyMOL > > */ > > /* Tested on i386-Linux only */ > > /* (c) Esben Friis, 2003 */ > > > > /* ------------ INCLUDES --------------- */ > > > > #include <stdio.h> > > #include <stdlib.h> > > > > /* ------------- DEFINES --------------- */ > > > > #define VERSION "1.0" > > #define DATE "2003-07-09" > > > > /* ------------- FUNCTIONS ------------- */ > > > > int get_fld_header (char *filename, int *gridpts, float *xmin, float > > *ymin, > > float *zmin, float *xmax, float *ymax, float *zmax ) > > { > > char buffer[256]; > > int i; > > FILE *infile; > > > > if (!(infile = fopen(filename,"rb"))) > > return 0; > > else > > { > > for (i=0; i<4; i++) > > fgets(buffer, 256, infile); > > > > fgets(buffer, 256, infile); > > *gridpts = atoi(buffer+5); /* the number of grid points in each > > direction */ > > > > for (i=0; i<5; i++) > > fgets(buffer, 256, infile); > > > > fgets(buffer, 256, infile); /* min extent line */ > > sscanf(buffer+8, "%f %f %f", xmin, ymin, zmin); > > > > fgets(buffer, 256, infile); /* max extent line */ > > sscanf(buffer+8, "%f %f %f", xmax, ymax, zmax); > > > > fgets(buffer, 256, infile); > > > > fclose (infile); > > > > return 1; > > } > > } > > > > > > int get_fld_grid (char *filename, int gridpts, float *grid) > > { > > char buffer[256]; > > int i, x, y, z, nobj; > > FILE *infile; > > > > if (!(infile = fopen(filename,"rb"))) > > return 0; > > else > > { > > for (i=0; i<13; i++) > > fgets(buffer, 256, infile); > > > > /* --- end of header ---- */ > > > > fgets(buffer, 3, infile); /* junk bytes */ > > nobj = fread(grid, 4, gridpts*gridpts*gridpts, infile); /* data > > array > > */ > > > > printf ("read %d data points from %s\n", nobj, filename); > > > > fclose (infile); > > } > > } > > > > > > void write_big_endian_float(FILE *stream, float *f) > > { > > char *p; > > char rev[4]; > > > > p = (char*) f; > > rev[0] = p[3]; > > rev[1] = p[2]; > > rev[2] = p[1]; > > rev[3] = p[0]; > > fwrite(&rev, 4, 1, stream); > > } > > > > > > int write_phi(char *filename, int gridpts, float *grid, float xmin, > > float > > ymin, float zmin, float xmax, float ymax, float zmax) > > { > > float xmid, ymid, zmid, scale; > > FILE *outfile; > > int i, x, y,z; > > > > if (!(outfile = fopen(filename,"wb"))) > > return 0; > > else > > { > > > > xmid = (xmax+xmin)/2.0; > > ymid = (ymax+ymin)/2.0; > > zmid = (zmax+zmin)/2.0; > > > > scale = ((float)gridpts-1.0)/(xmax-xmin); > > > > printf ("midpoint %f, %f, %f, scale = %f\n", xmid, ymid, zmid, > > scale); > > > > fprintf(outfile,"%c%c%c%c",0,0,0,0x14); > > fprintf(outfile,"now starting phimap "); > > fprintf(outfile,"%c%c%c%c",0,0,0,0x14); > > fprintf(outfile,"%c%c%c%c",0,0,0,0x46); > > fprintf(outfile,"potential "); > > fprintf(outfile,"Map converted from MEAD AVS (fld) file > > "); > > fprintf(outfile,"%c%c%c%c",0,0,0,0x46); > > fprintf(outfile,"%c%c%c%c",0,0x10,0xc3,0x04); > > > > /* order is z y x */ > > for (z=0; z<gridpts; z++) > > for (y=0; y<gridpts; y++) > > for (x=0; x<gridpts; x++) > > write_big_endian_float(outfile, > > grid+gridpts*gridpts*z+gridpts*y+x); > > > > > > fprintf(outfile,"%c%c%c%c%c%c%c%c",0x13,0x80,0x00,0x10,0xc3,0x04,0x00,0 > > x00); > > > > fprintf(outfile," end of phimap "); > > > > fprintf(outfile,"%c%c%c%c",0x10,0,0,0); > > fprintf(outfile,"%c%c%c%c",0x10,0,0,0); > > > > write_big_endian_float(outfile, &scale); > > write_big_endian_float(outfile, &xmid); > > write_big_endian_float(outfile, &ymid); > > write_big_endian_float(outfile, &zmid); > > fprintf(outfile,"%c%c%c%c",0x10,0,0,0); > > > > fclose(outfile); > > } > > } > > > > void usage(void) > > { > > fprintf(stderr,"USAGE:\n"); > > fprintf(stderr,"fld2phi <map.fld> <map.phi>\n\n"); > > fprintf(stderr,"Converts an AVS .fld grid file <map.fld> written by > > MEAD's 'potential'\n"); > > fprintf(stderr,"program to a big-endian Delphi grid file <map.phi> > > which > > is readable\n"); > > fprintf(stderr,"by eg. PyMOL.\n"); > > fprintf(stderr,"Notice that PyMOL (v0.90) can only handle grids of > > 65x65x65 points.\n"); > > fprintf(stderr,"fld2phi is version %s from %s\n",VERSION,DATE); > > > > exit(0); > > } > > > > int main (int argc, char **argv) > > { > > float xmin, ymin, zmin, xmax, ymax, zmax; > > float *grid; > > int gridpts; > > > > if (argc !=3) > > usage(); > > > > get_fld_header(argv[1], &gridpts, &xmin, &ymin, &zmin, &xmax, &ymax, > > &zmax); > > > > printf ("%d, %f, %f, %f, %f, %f, %f\n", gridpts, xmin, ymin, zmin, > > xmax, > > ymax, zmax); > > > > printf ("Grid size is %d.\n", gridpts); > > if (gridpts != 65) > > { > > printf ("WARNING:\n"); > > printf ("PyMOL version 0.90 only reads maps which are > > 65x65x65!\n"); > > } > > > > grid = (float*) malloc(gridpts*gridpts*gridpts*4); > > > > get_fld_grid(argv[1], gridpts, grid); > > > > write_phi(argv[2], gridpts, grid, xmin, ymin, zmin, xmax, ymax, > > zmax); > > > > return 0; > > } > > > > > > ------------------------------------------------------- > > This SF.Net email sponsored by: Parasoft > > Error proof Web apps, automate testing & more. > > Download & eval WebKing and get a free book. > > www.parasoft.com/bulletproofapps > > _______________________________________________ > > PyMOL-users mailing list > > PyM...@li... > > https://lists.sourceforge.net/lists/listinfo/pymol-users > > > > > > ------------------------------------------------------- > This SF.Net email sponsored by: Parasoft > Error proof Web apps, automate testing & more. > Download & eval WebKing and get a free book. > www.parasoft.com/bulletproofapps > _______________________________________________ > PyMOL-users mailing list > PyM...@li... > https://lists.sourceforge.net/lists/listinfo/pymol-users > |
From: Kaushik R. <kx...@ps...> - 2003-07-09 20:46:19
|
Yu Chen, I have attached the output from the load command (which loads the phimap). I don't see the error that you describe. Does this output mean that it is working fine? I can generate a surface and color it with the electrostatic potential too. But I am not sure if I can trust the results since there is no gradient in the colors. It is either red or blue. Unfortunately I cant compare it to GRASP since we don't have that in our lab. Anyway let me know. Kaushik. PHIMapToStr: now starting phimap PHIMapToStr: potential PHIMapToStr: qdiffxas: qdiffxs4 with an improved surfacing routine PHIMapToStr: end of phimap Crystal: Unit Cell 1.000 1.000 1.000 Crystal: Alpha Beta Gamma 90.000 90.000 90.000 Crystal: RealToFrac Matrix Crystal: 1.0000 0.0000 0.0000 Crystal: 0.0000 1.0000 0.0000 Crystal: 0.0000 0.0000 1.0000 Crystal: FracToReal Matrix Crystal: 1.0000 0.0000 0.0000 Crystal: 0.0000 1.0000 0.0000 Crystal: 0.0000 0.0000 1.0000 Crystal: Unit Cell Volume 1. Executive: object "map" created. On Wednesday, July 9, 2003, at 03:58 PM, Yu Chen wrote: > Hello, Kaushik > > Yeah, we do had problems with DelPhi to PyMoL. I don't know what your > mean by "modified version of Delphi..." We bought the latest Delphi > from > their website, and used the data from all the example folders comes > with > Delphi. The calculation all went well. When we tried to read the phimap > into PyMoL, > > after > load delphi-map.phi, e_pot > > In the console window, the line > objectMap: Map Read. Range= -....... to ...... > > Then range is incredibly large, the negtive and positive values each > has > about over 30 digits! > > But when we use the same data in GRASP to generate the phimap, it > reads in > well. If you could give us some advice on how you modified Delphi, or > how > to get it, we would be greatly appreciate! > > Best > Yu Chen > > =========================================== > Yu Chen > Howard Hughes Medical Institute > Chemistry Building, Rm 122 > University of Maryland at Baltimore County > 1000 Hilltop Circle > Baltimore, MD 21250 > email: ch...@hh... > =========================================== > > On Wed, 9 Jul 2003, Kaushik Raha wrote: > >> There has been some talk on the list regarding failure of PyMOL in >> reading Delphi generated potential maps that I missed. I have >> generated >> phimap using a modified version of Delphi in the GRASP format that >> PyMOL reads and displays without any problem. So I am not sure what >> the >> problem is. Can anybody please let me know what was the problem with >> PyMOL reading Delphi generated GRASP potential maps? Was wondering if >> PyMOL is doing the right thing?? >> >> Thanks, >> Kaushik Raha >> Penn State University >> >> On Wednesday, July 9, 2003, at 10:48 AM, EPF (Esben Peter Friis) >> wrote: >> >>> >>> Hi PyMOL users, >>> >>> MEAD's potential maps can be used in PyMOL, but it requires a little >>> more >>> than a bit of tweaking, as the maps are in the AVS .fld format, which >>> can >>> not be read by PyMOL. (These maps can be read by Dino, as Paulo just >>> mentioned). Also, PyMOL reads (as far as I can see) only big-endian >>> phi-maps. >>> >>> I have written a small program, which does the conversion from .fld >>> to >>> big-endian-.phi, so the maps can be read by PyMOL. It just finished >>> it >>> today, and it has only been tested on Linux (i386), so beware ;-) >>> >>> To create a nice electrostatic surface, you need: >>> >>> >>> * Gromacs (not strictly necessary, but makes life easier) Download >>> from >>> http://www.gromacs.org >>> * MEAD. Download from http://www.scripps.edu/bashford/ >>> * fld2phi, source code quoted below (sorry, but I don't have access >>> to >>> our >>> external web server, and it's only about 4kb). >>> * PyMOL, of course (v0.88 or newer). >>> >>> >>> Here is an example how to create everything from scratch for 4PTI.pdb >>> >>> >>> Gromacs steps >>> ------------- >>> 1) use pdb2gmx to create .gro and .top files: >>> pdb2gmx -f 4PTI.pdb -o 4PTI.gro -p 4PTI.top >>> >>> 2) use grompp to create .tpr file: >>> grompp -f 4PTI.mdp -p 4PTI.top -o 4PTI.tpr -c 4PTI.gro >>> >>> The file 4PTI.mdp contains the parameters for the Gromacs simulation. >>> But as >>> we are not going to do any simulation this time, an empty file is ok. >>> It can >>> be created with touch 4PTI.mdp. >>> >>> 3) use editconf to create a MEAD-readable pdb file: >>> editconf -f 4PTI.tpr -mead -o 4PTI.pqr.pdb >>> >>> The output pdb file must then be renamed to be recognized by MEAD: >>> mv 4PTI.pqr.pdb 4PTI.pqr >>> >>> >>> MEAD steps >>> ---------- >>> >>> 1) create a .ogm file which specifies the grid size. Notice that >>> PyMOL >>> can >>> only handle grids which are 65x65x65 points, so your only option is >>> to >>> change the spacing between points. You can specify focussing options >>> in the >>> .ogm file, but only the coarsest grid is written anyway, so you only >>> need >>> one line in the 4PTI.ogm file: >>> >>> ON_GEOM_CENT 65 1.0 >>> >>> See documentation for other centering options (first parameter). Next >>> number >>> is the number of grid points on each side (must be 65 to be readable >>> by >>> PyMOL). The last number is a real specifying the distance between >>> grid >>> points. >>> >>> 2) Run 'potential' to create the grid: >>> potential -epsin 2 -CoarseFieldOut 4PTI 4PTI >>> >>> The epsin option is mandatory and specifies the internal (in the >>> protein) >>> dielectric constant. The program will say something like: >>> >>> WARINING from potential main program: >>> Could not open field point file, 4PTI.fpt, for reading. Exiting >>> without >>> giving any potentials. >>> >>> This can be ignored. The program still writes out a 4PTI.fld file >>> with >>> the >>> grid. Notice that this file in not overwritten, so you must delete it >>> manually if it already exists. >>> >>> Convert to PyMOL readable grid >>> ------------------------------ >>> >>> 1) Use the fld2phi to convert the .fld file to a big-endian .phi grid >>> file: >>> fld2phi 4PTI.fld 4PTI.phi >>> >>> This sould create a 4PTI.phi file which is readable by PyMOL. >>> >>> >>> PyMOL steps >>> ----------- >>> >>> 1) Load the structure including the hydrogens built by Gromacs: >>> load 4PTI.pqr, 4PTI >>> >>> 2) Create a selection of the water: >>> select water, 4PTI and resn SOL >>> >>> 3) Remove the water atoms: >>> remove water >>> >>> 4) Show the surface of the 4PTI object: >>> show surface, 4PTI >>> >>> 5) Load the electrostatic grid: >>> load 4PTI.phi, map >>> >>> You can show the extent of the grid box by clicking on the object >>> called >>> "map" in the object list to the right. >>> >>> 6) Create a color ramp object: >>> ramp_new e_lvl, map, [-0.02,0.00,0.02] >>> >>> 7) Color the surface according to the grid and map: >>> set surface_color, e_lvl, 4PTI >>> >>> Thats it. You can change the color scale on the fly by issuing >>> another >>> ramp_new command with other numbers. The 3 numbers are red-point, >>> white-point and blue-point, respectively. The scale can also be >>> changed by >>> ctrl+mid-click while you drag the color scale. >>> >>> It is also possible to create one or more contour surfaces: >>> isosurface contour1, map, -0.05 >>> >>> where contour1 is the object name of the surface (choose whatever you >>> want), >>> "map" is the object name of the electrostatic potential map and the >>> number >>> is the contour level. The commands isomesh and isodot have the same >>> syntax >>> and do exactly what you think. >>> >>> >>> >>> Best regards (and please forgive me for quoting source code here :) >>> >>> Esben >>> >>> >>> ************************************************************** >>> * Source code for fld2phi * >>> * save as: fld2phi.c * >>> * compile with: gcc -o fld2phi fld2phi.c * >>> ************************************************************** >>> >>> /* This is fld2phi.c */ >>> /* This program reads little-endian AVS fields (.fld-files) from MEAD >>> and >>> */ >>> /* convert it to big-endian .phi maps readable by PyMOL >>> */ >>> /* Tested on i386-Linux only */ >>> /* (c) Esben Friis, 2003 */ >>> >>> /* ------------ INCLUDES --------------- */ >>> >>> #include <stdio.h> >>> #include <stdlib.h> >>> >>> /* ------------- DEFINES --------------- */ >>> >>> #define VERSION "1.0" >>> #define DATE "2003-07-09" >>> >>> /* ------------- FUNCTIONS ------------- */ >>> >>> int get_fld_header (char *filename, int *gridpts, float *xmin, float >>> *ymin, >>> float *zmin, float *xmax, float *ymax, float *zmax ) >>> { >>> char buffer[256]; >>> int i; >>> FILE *infile; >>> >>> if (!(infile = fopen(filename,"rb"))) >>> return 0; >>> else >>> { >>> for (i=0; i<4; i++) >>> fgets(buffer, 256, infile); >>> >>> fgets(buffer, 256, infile); >>> *gridpts = atoi(buffer+5); /* the number of grid points in each >>> direction */ >>> >>> for (i=0; i<5; i++) >>> fgets(buffer, 256, infile); >>> >>> fgets(buffer, 256, infile); /* min extent line */ >>> sscanf(buffer+8, "%f %f %f", xmin, ymin, zmin); >>> >>> fgets(buffer, 256, infile); /* max extent line */ >>> sscanf(buffer+8, "%f %f %f", xmax, ymax, zmax); >>> >>> fgets(buffer, 256, infile); >>> >>> fclose (infile); >>> >>> return 1; >>> } >>> } >>> >>> >>> int get_fld_grid (char *filename, int gridpts, float *grid) >>> { >>> char buffer[256]; >>> int i, x, y, z, nobj; >>> FILE *infile; >>> >>> if (!(infile = fopen(filename,"rb"))) >>> return 0; >>> else >>> { >>> for (i=0; i<13; i++) >>> fgets(buffer, 256, infile); >>> >>> /* --- end of header ---- */ >>> >>> fgets(buffer, 3, infile); /* junk bytes */ >>> nobj = fread(grid, 4, gridpts*gridpts*gridpts, infile); /* data >>> array >>> */ >>> >>> printf ("read %d data points from %s\n", nobj, filename); >>> >>> fclose (infile); >>> } >>> } >>> >>> >>> void write_big_endian_float(FILE *stream, float *f) >>> { >>> char *p; >>> char rev[4]; >>> >>> p = (char*) f; >>> rev[0] = p[3]; >>> rev[1] = p[2]; >>> rev[2] = p[1]; >>> rev[3] = p[0]; >>> fwrite(&rev, 4, 1, stream); >>> } >>> >>> >>> int write_phi(char *filename, int gridpts, float *grid, float xmin, >>> float >>> ymin, float zmin, float xmax, float ymax, float zmax) >>> { >>> float xmid, ymid, zmid, scale; >>> FILE *outfile; >>> int i, x, y,z; >>> >>> if (!(outfile = fopen(filename,"wb"))) >>> return 0; >>> else >>> { >>> >>> xmid = (xmax+xmin)/2.0; >>> ymid = (ymax+ymin)/2.0; >>> zmid = (zmax+zmin)/2.0; >>> >>> scale = ((float)gridpts-1.0)/(xmax-xmin); >>> >>> printf ("midpoint %f, %f, %f, scale = %f\n", xmid, ymid, zmid, >>> scale); >>> >>> fprintf(outfile,"%c%c%c%c",0,0,0,0x14); >>> fprintf(outfile,"now starting phimap "); >>> fprintf(outfile,"%c%c%c%c",0,0,0,0x14); >>> fprintf(outfile,"%c%c%c%c",0,0,0,0x46); >>> fprintf(outfile,"potential "); >>> fprintf(outfile,"Map converted from MEAD AVS (fld) file >>> "); >>> fprintf(outfile,"%c%c%c%c",0,0,0,0x46); >>> fprintf(outfile,"%c%c%c%c",0,0x10,0xc3,0x04); >>> >>> /* order is z y x */ >>> for (z=0; z<gridpts; z++) >>> for (y=0; y<gridpts; y++) >>> for (x=0; x<gridpts; x++) >>> write_big_endian_float(outfile, >>> grid+gridpts*gridpts*z+gridpts*y+x); >>> >>> >>> fprintf(outfile,"%c%c%c%c%c%c%c%c",0x13,0x80,0x00,0x10,0xc3,0x04,0x00 >>> ,0 >>> x00); >>> >>> fprintf(outfile," end of phimap "); >>> >>> fprintf(outfile,"%c%c%c%c",0x10,0,0,0); >>> fprintf(outfile,"%c%c%c%c",0x10,0,0,0); >>> >>> write_big_endian_float(outfile, &scale); >>> write_big_endian_float(outfile, &xmid); >>> write_big_endian_float(outfile, &ymid); >>> write_big_endian_float(outfile, &zmid); >>> fprintf(outfile,"%c%c%c%c",0x10,0,0,0); >>> >>> fclose(outfile); >>> } >>> } >>> >>> void usage(void) >>> { >>> fprintf(stderr,"USAGE:\n"); >>> fprintf(stderr,"fld2phi <map.fld> <map.phi>\n\n"); >>> fprintf(stderr,"Converts an AVS .fld grid file <map.fld> written >>> by >>> MEAD's 'potential'\n"); >>> fprintf(stderr,"program to a big-endian Delphi grid file <map.phi> >>> which >>> is readable\n"); >>> fprintf(stderr,"by eg. PyMOL.\n"); >>> fprintf(stderr,"Notice that PyMOL (v0.90) can only handle grids of >>> 65x65x65 points.\n"); >>> fprintf(stderr,"fld2phi is version %s from %s\n",VERSION,DATE); >>> >>> exit(0); >>> } >>> >>> int main (int argc, char **argv) >>> { >>> float xmin, ymin, zmin, xmax, ymax, zmax; >>> float *grid; >>> int gridpts; >>> >>> if (argc !=3) >>> usage(); >>> >>> get_fld_header(argv[1], &gridpts, &xmin, &ymin, &zmin, &xmax, >>> &ymax, >>> &zmax); >>> >>> printf ("%d, %f, %f, %f, %f, %f, %f\n", gridpts, xmin, ymin, zmin, >>> xmax, >>> ymax, zmax); >>> >>> printf ("Grid size is %d.\n", gridpts); >>> if (gridpts != 65) >>> { >>> printf ("WARNING:\n"); >>> printf ("PyMOL version 0.90 only reads maps which are >>> 65x65x65!\n"); >>> } >>> >>> grid = (float*) malloc(gridpts*gridpts*gridpts*4); >>> >>> get_fld_grid(argv[1], gridpts, grid); >>> >>> write_phi(argv[2], gridpts, grid, xmin, ymin, zmin, xmax, ymax, >>> zmax); >>> >>> return 0; >>> } >>> >>> >>> ------------------------------------------------------- >>> This SF.Net email sponsored by: Parasoft >>> Error proof Web apps, automate testing & more. >>> Download & eval WebKing and get a free book. >>> www.parasoft.com/bulletproofapps >>> _______________________________________________ >>> PyMOL-users mailing list >>> PyM...@li... >>> https://lists.sourceforge.net/lists/listinfo/pymol-users >>> >> >> >> >> ------------------------------------------------------- >> This SF.Net email sponsored by: Parasoft >> Error proof Web apps, automate testing & more. >> Download & eval WebKing and get a free book. >> www.parasoft.com/bulletproofapps >> _______________________________________________ >> PyMOL-users mailing list >> PyM...@li... >> https://lists.sourceforge.net/lists/listinfo/pymol-users >> > > > > > ------------------------------------------------------- > This SF.Net email sponsored by: Parasoft > Error proof Web apps, automate testing & more. > Download & eval WebKing and get a free book. > www.parasoft.com/bulletproofapps > _______________________________________________ > PyMOL-users mailing list > PyM...@li... > https://lists.sourceforge.net/lists/listinfo/pymol-users > |
From: Andreas <an...@bi...> - 2003-07-10 19:43:56
|
Hi Esben, I tried to follow your instructions to create and display an electrostatic surface potential. I used 1UBQ.pdb as input. In Mead, I encountered the following error when running potential -epsin 2 -CoarseFieldOut 1UBQ 1UBQ Starting potential for molecule named 1UBQ with interior dielectric constant = 2 using the following physical conditions: Exterior dielectric constant, espext = 80 Solvent probe radius, solrad = 1.4 Ion exclusion layer thickness, sterln = 2 Temperature, T = 300 Ionic strength, ionicstr = 0 Hueckel factor (epsext*kappasq) = 0 ln(10) * kBolt * T = 0.00413391 kBolt = 5.98444e-06 conconv = 0.000602214 econv = 331.842 Bohr radius = 0.529177 Proton Charge = 1 No blab level set (so no blabbing) INPUT FAILURE in FinDiffMethodRep::read from file1UBQ.ogmbad Coord-type entry No fld file is created. Any suggestion? The calculation was run on a PIII Xeon linux box. Thanks Andreas On Wed, 2003-07-09 at 08:48, EPF (Esben Peter Friis) wrote: > Hi PyMOL users, > > MEAD's potential maps can be used in PyMOL, but it requires a little more > than a bit of tweaking, as the maps are in the AVS .fld format, which can > not be read by PyMOL. (These maps can be read by Dino, as Paulo just > mentioned). Also, PyMOL reads (as far as I can see) only big-endian > phi-maps. > > I have written a small program, which does the conversion from .fld to > big-endian-.phi, so the maps can be read by PyMOL. It just finished it > today, and it has only been tested on Linux (i386), so beware ;-) > > To create a nice electrostatic surface, you need: > > > * Gromacs (not strictly necessary, but makes life easier) Download from > http://www.gromacs.org > * MEAD. Download from http://www.scripps.edu/bashford/ > * fld2phi, source code quoted below (sorry, but I don't have access to our > external web server, and it's only about 4kb). > * PyMOL, of course (v0.88 or newer). > > > Here is an example how to create everything from scratch for 4PTI.pdb > > > Gromacs steps > ------------- > 1) use pdb2gmx to create .gro and .top files: > pdb2gmx -f 4PTI.pdb -o 4PTI.gro -p 4PTI.top > > 2) use grompp to create .tpr file: > grompp -f 4PTI.mdp -p 4PTI.top -o 4PTI.tpr -c 4PTI.gro > > The file 4PTI.mdp contains the parameters for the Gromacs simulation. But as > we are not going to do any simulation this time, an empty file is ok. It can > be created with touch 4PTI.mdp. > > 3) use editconf to create a MEAD-readable pdb file: > editconf -f 4PTI.tpr -mead -o 4PTI.pqr.pdb > > The output pdb file must then be renamed to be recognized by MEAD: > mv 4PTI.pqr.pdb 4PTI.pqr > > > MEAD steps > ---------- > > 1) create a .ogm file which specifies the grid size. Notice that PyMOL can > only handle grids which are 65x65x65 points, so your only option is to > change the spacing between points. You can specify focussing options in the > .ogm file, but only the coarsest grid is written anyway, so you only need > one line in the 4PTI.ogm file: > > ON_GEOM_CENT 65 1.0 > > See documentation for other centering options (first parameter). Next number > is the number of grid points on each side (must be 65 to be readable by > PyMOL). The last number is a real specifying the distance between grid > points. > > 2) Run 'potential' to create the grid: > potential -epsin 2 -CoarseFieldOut 4PTI 4PTI > > The epsin option is mandatory and specifies the internal (in the protein) > dielectric constant. The program will say something like: > > WARINING from potential main program: > Could not open field point file, 4PTI.fpt, for reading. Exiting without > giving any potentials. > > This can be ignored. The program still writes out a 4PTI.fld file with the > grid. Notice that this file in not overwritten, so you must delete it > manually if it already exists. > > Convert to PyMOL readable grid > ------------------------------ > > 1) Use the fld2phi to convert the .fld file to a big-endian .phi grid file: > fld2phi 4PTI.fld 4PTI.phi > > This sould create a 4PTI.phi file which is readable by PyMOL. > > > PyMOL steps > ----------- > > 1) Load the structure including the hydrogens built by Gromacs: > load 4PTI.pqr, 4PTI > > 2) Create a selection of the water: > select water, 4PTI and resn SOL > > 3) Remove the water atoms: > remove water > > 4) Show the surface of the 4PTI object: > show surface, 4PTI > > 5) Load the electrostatic grid: > load 4PTI.phi, map > > You can show the extent of the grid box by clicking on the object called > "map" in the object list to the right. > > 6) Create a color ramp object: > ramp_new e_lvl, map, [-0.02,0.00,0.02] > > 7) Color the surface according to the grid and map: > set surface_color, e_lvl, 4PTI > > Thats it. You can change the color scale on the fly by issuing another > ramp_new command with other numbers. The 3 numbers are red-point, > white-point and blue-point, respectively. The scale can also be changed by > ctrl+mid-click while you drag the color scale. > > It is also possible to create one or more contour surfaces: > isosurface contour1, map, -0.05 > > where contour1 is the object name of the surface (choose whatever you want), > "map" is the object name of the electrostatic potential map and the number > is the contour level. The commands isomesh and isodot have the same syntax > and do exactly what you think. > > > > Best regards (and please forgive me for quoting source code here :) > > Esben > > > ************************************************************** > * Source code for fld2phi * > * save as: fld2phi.c * > * compile with: gcc -o fld2phi fld2phi.c * > ************************************************************** > -- Andreas Förster Dept of Biochem, Univ of Utah, 20N 1900E, #2460 Eccles Bldg. Salt Lake City, UT 84132, phone: 001.801.585.3919 home: 1736 Kensington, SLC, UT 84108, 001.801.463.3607 http://www.biochem.utah.edu/~andreas |