Chemistry - Generating electron density from protein coordinate (PDB)

Solution 1:

For the more recent structures, you can view the density (based on measured diffraction data and the model, so-called 2Fo-Fc density) directly in the protein data bank, e.g.

enter image description here

For a theoretical model or a model without deposited diffraction data, you would first have to generate structure factors, and then calculate the electron density. In the simplest case, the electron density would just reflect the density of isolated atoms (i.e. no deformation density). Program suites such as CCP4 (originally in Fortran) or Phenix (in python) are available to do these steps.

In these calculations, the electron density of individual atoms is encoded in so-called atomic form factors (see e.g., which are fourier transform coefficients of the model electron density for each atom.

Solution 2:

What you've described is the field of electronic structure theory. To obtain the electronic density from the cartesian coordinates of the atoms requires immense amount of computation (assuming you have a protein in your pdb file). If you have a small molecule, you could use any number of common electronic structure packages. ORCA is open-source (assuming academic), or you could check if you have access to Gaussian (another widely used one) through a university.

EDIT: Having re-read your question, I see it is indeed a protein you are trying to get the electronic density of. In this case, you will not be able to use even the most basic electronic structure methods on the entire protein. If you need the electron density of a small section (<100-500 atoms, with 500 atoms already heavily straining most computational setups) of the protein (say an active site), then you could do it. (Worth noting that you could go beyond 500 atoms with some advanced computational setups, see the paper Ian Bush mentioned in the comments).

However, if you just need an approximate charge distribution, you can assign point charges located at the center of each atom (water can be modeled in that way or with more complicated methods with the TIP models, where TIP3P is the simple "point charge on each atom" approach). The tleap command in Ambertools will do that for you. You could also use VMD's built-in support of CHARMM to add point charges centered on each atom. This is the psfgen plugin for VMD.