Let us say that I wish to create a function that may do the following:

>>> find_bond_energy(atom1="C", atom2="O", order=3)
1072 kJ/mol

The above example entails a triple covalent bond between carbon (C) and oxygen (O), with the hypothetical function returning the known dissociation energy. The same could then be applied to a wide range of covalent bonds.

I have attempted to explore packages such as mendeleev, RDKit and others, with no luck. There is plenty of data available for arbitrary individual elements, but it seems to not be the case for arbitrary chemical bonds. Databases such as PubChem (along with its API) are useful for exploring properties of molecules, but again, I cannot find any useful equivalent for chemical bonds.

There exist some educational websites which list limited tables of bond dissociation energies, however these are not exhaustive and also would require a less Pythonic web-scraping solution.

Can any existing packages, APIs or databases (ideally tailored to Python scripting) help?

  • $\begingroup$ Why did this have the qsar tag? $\endgroup$ Commented Mar 12, 2023 at 14:49
  • $\begingroup$ I'm using this to build a QSAR model - I can adapt the question to make this more clear, if needed. That said, I think your edits are quite appropriate. $\endgroup$ Commented Mar 12, 2023 at 15:19
  • 1
    $\begingroup$ Since your question is about all the things that happen before you use the QSAR model, and the software-recommendations tag is more appropriate anyway, I've removed the QSAR tag to make room for the software-recommendations tag. Likewise for RDKit vs one-topic-per-answer, since you correctly pointed out that RDKit is probably not the best way to get what you're seeking! $\endgroup$ Commented Mar 12, 2023 at 15:41

1 Answer 1



Bond dissociation energies are either found by laboratory experiments followed by spectroscopic analysis, or by ab initio calculations. Secondary research could be done to find bond dissociation energies that have already been determined via one of the above two primary research methods, and databases that come to mind for that are NIST's CCCBDB database (not well-maintained anymore), and my own AI ENERGIES database (open source on GitHub and currently maintained regularly, but doesn't yet work well with Python). Since I don't know of any databases of bond dissociation energies that are tailored to Python scripting, and you're not looking for a wet-lab solution, ab initio calculations seem ideal for you if you don't want to write a web-scraper do collect data from CCCBDB or AI ENERGIES; and PySCF is currently the most popular Python package for ab initio calculations of molecular electronic energies.

By doing a geometry optimization in PySCF with basis='cc-pVTZ' and the CASSCF method with a "full valence active space", you will be able to get a decent bond length without waiting for too long, for most diatomic molecules that involve elements up to the Kr atom. For molecules including heavier elements you would probably want to start doing relativistic calculations, which you could have been doing all along for the molecules containing lighter elements too, but for such calculations you would ideally use effective core potentials or uncontracted basis sets or basis sets contracted for relativistic Hamiltonians like the X2C one, which are all a bit further away from the "default" strategy explained in the first sentence of this paragraph and the linked webpage.

This strategy can be turned into a function like what you proposed (but I've removed the order=3 part, because it's not necessary if you're just looking for dissociation energies of molecules in their ground electronic states):

find_bond_energy(atom1="C", atom2="O")
  • $\begingroup$ One might want to combine this with memoization, if it's anticipated that it's likely that the same calculation with be done repeatedly. $\endgroup$ Commented Mar 13, 2023 at 3:50
  • $\begingroup$ @Acccumulation maybe you can go into more detail about how you think memoization would help? Certainly once the CO bond dissociation energy is calculated once, it would make sense to store it (because it's only one number!) so that there's no need to calculate it from scratch all over again, but I'm not sure what exactly you had in mind when you wrote the comment! $\endgroup$ Commented Mar 13, 2023 at 4:13
  • $\begingroup$ The question was on bond dissociation energies, not bond lengths. CASSCF does not give you accurate energies, since it lacks dynamic correlation. It also doesn't give you a way to target a given bond order... $\endgroup$ Commented Mar 19, 2023 at 16:27

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .