Ovality gives a measure of how the shape of a molecule approaches a sphere (at one extreme) or a cigar shape (at the other). Ovality is described by a ratio of volume to area (see https://en.wikipedia.org/wiki/Ovality). So, it is basically "just" about intersecting Van-der-Waals spheres. Although this sounds simple, it can get pretty complicated.

There is a nice paper from M. Petitjean explaining how to get correct values of Van-der-Waals volumes and surfaces (see https://hal.archives-ouvertes.fr/hal-01955983). According to this paper, inacceptable approximations have been used in the past. I can follow this paper to a certain extent, but when it comes to implementing this in Python it would exceed my mathematical and programming knowledge.

Therefore my question:

Is there maybe already a Python module which can calculate Ovality from a given molecular structure? Input would be: atom types, atom positions, and Van-der-Waals radii of the atoms.

I'm already using RDKit and maybe it can do it, and I just haven't found this feature. Thank you for any hints.

I guess there was need for clarification:

The ovality (O), a parameter used as shape descriptor, is defined as the ratio between actual surface and minimum surface for the same volume (the surface of a sphere with a volume that equals the actual volume) (see https://www.sciencedirect.com/topics/chemistry/molecular-size)

For this, the van-der-Waals surface and the van-der-Waals volume of the molecule need to be calculated, basically by intersecting spheres with different sizes at different positions.

  • 3
    $\begingroup$ It may be too crude a method, but why not start by calculating moments of inertia assuming all masses are the same. This will give you a prolate or oblate spheroid from which you can get area & volume etc. and is simple to calculate. $\endgroup$
    – porphyrin
    May 26, 2020 at 16:28
  • 1
    $\begingroup$ You are looking for the terms oblate (round & flat) and prolate (rugby ball). You usually quantify their shape with the aspect ratio. $\endgroup$
    – Karl
    May 26, 2020 at 19:52
  • $\begingroup$ @Karl and porphyrin, I would like to calculate the van-der-Waals-surface and the van-der-Waals-volume of a given molecule. How could "moments of inertia" with a crude approximation and the terms "oblate" and "prolate" help me achieving this? $\endgroup$
    – theozh
    May 26, 2020 at 20:45
  • $\begingroup$ Because I have never heard the term "ovality", and suspect that you may find other literature with more common search terms, which also don´t exclude the oblate part of molecules? Spheroid might also be a good search term. $\endgroup$
    – Karl
    May 27, 2020 at 7:00
  • $\begingroup$ @Karl, ok, I see. Sorry, I was not aware that "ovality" is not such a common term. I will update the question. $\endgroup$
    – theozh
    May 27, 2020 at 8:04

1 Answer 1


I created a python library for estimating the ovality of molecules called pychemovality.

To estimate ovality for a molecule follow the below steps:

Clone the repo and cd into root dir:

git clone https://github.com/vandan-revanur/pychemovality 
cd pychemovality

Three types of coordinate files can be used as input for calculating ovality.

  • XYZ file
  • PDB file
  • MOL file

To get the ovality of the molecule in your coordinate file run the following:

python pychemovality --coord-file-path <path-to-your-coord-file>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.