Skip to content

Calculate Böttcher score on small molecules (


Notifications You must be signed in to change notification settings


Folders and files

Last commit message
Last commit date

Latest commit



37 Commits

Repository files navigation

bottchscore (Improved Accuracy)

Calculate Böttcher score on small molecules as described in Demoret et al. (ChemRxiv 2020) according to the definition from Böttcher, J.Chem.Inf.Mod. 2016. This repository contains a modified script originally developed by ForliLab ( The modified script accounts for E/Z double bond isomers and changes the s_i term accordingly for the appropriate atom. An option to change the maximum memory size for automorphic calculations was also added, allowing to aviod the memory limit errors for highly symmetrical molecules. The complexity score can also be calculated by directly calling the appropriate function from another script.

usage: [-h] -i filename.ext [-m] [-p] [-c] [-v] [-x MaxMemory]

Tool to calculate Böttcher score on small molecules.

optional arguments:
  -h, --help       show this help message and exit
  -i filename.ext  input structure; support all input formats supported by OB,
                   including multi-structure formats
  -m               disable mesomeric effect estimate
  -p               generate PNG image of the structure
  -c               add a progressive counter to the list of results shown
  -v               verbose mode; print the full table of the terms used to
                   estimate the score, as described in the paper
  -x MaxMemory     specify the maximum memory that will be available for the automorphism/symmetry calculations; the
                   default value is set to 3000000

Require OpenBabel v.3.0 or newer.

All reading formats supported by OpenBabel are supported. Although, there might be errors with molecule labels when using the ChemDraw format (just delete molecule labels).

This version of the program supports calculating scores for optical stereoisomers as well as E/Z double bond isomers as described in Böttcher, J.Chem.Inf.Mod. 2016; however, it does not support axial isomers (axial chirality).

Python function:

calculate_bottchscore_from_smiles(smiles: str, verbose_response=False, debug_arg=False, disable_mesomer=False, automorp_memory_maxsize=3000000) -> float

can be called to calculate a Böttcher score for a molecule directly from SMILES passed to the function as a string.

The modified script returns the same scores as the original script (see the 'Calculated Examples' folder), however the accuracy improvement is seen for such molecules as:

SMILES                                            Original Score               New Score
CC(/C=C/C1=CC=CC=C1)=O                            73.43                        80.60 (the same as in SI figure S6 of the Bottcher paper)
Cl/C=C\C=C\Br                                     54.25                        68.59
CC/C(C1=CC=CC=C1)=C(C2=CC=CC=C2)/CC               60.26                        66.26
C/C(=C(/C=C/C)\CCC)/CC                            64.34                        83.51
CC/C=C(C)/[2H]                                    24.34                        31.51
CC/C=C1CCC[C@H](Br)C/1                            99.80                        106.97

Compounds that are not E/Z isomer but have a double bond also work as expected:

SMILES                                Original Score              New Score
C/C=C(C)/C                            19.17                       19.17
CC/C=C1CCCCC/1                        38.17                       38.17 


Calculate Böttcher score on small molecules (







No releases published



Contributors 4