How does one calculate the electronic difference density in practice?

I am interested in calculating electronic difference density maps. These have been described for quite a long time by Bader and others. For example, below is the fourth of a series of papers which discusses these extensively.


Cade, P. E., Bader, R. F. W., Henneker, W. H., & Keaveny, I. (1969). Molecular Charge Distributions and Chemical Binding. IV. The Second‐Row Diatomic Hydrides AH. The Journal of Chemical Physics, 50(12), 5313-5333.


The idea is fairly simple. Use some electronic structure method (or in principle experimental data) to calculate the electron density of some atom or molecule by itself (but at the appropriate geometry) and then calculate the electron density of the molecule containing the atoms for which you have reference density distributions. Sum all the reference densities and take the difference from the reference densities. You then get a map with positive and negative regions that show areas of electron enrichment and depletion which hopefully provides some physical insight.


It is simple enough to calculate electron densities with most electronic structure packages and have the program print out the density in terms of expansion coefficients for the molecular orbitals which various other programs are able to read and visualize.


Now with that information in hand, is anyone aware of software packages which can do this operation I am describing? Or am I stuck with doing something like fitting the electron densities numerically and taking the differences in that way? If so, if anyone has done this before, some input in that regard would be useful.


This seems like such a simple thing to calculate, but I've been a bit confused. I know I've seen people make spin density difference plots for open-shell and excited state systems. This is such a similar calculation that it seems like one should be able to use the same tools, but I assume the latter calculations are buried in the electronic structure package somewhere and hence not easy for the user to adapt.


Any help is greatly appreciated.


