Getting the lowest energy conformer.ΒΆ

This is a simple script for iterating over an ensemble and getting the lowest energy bbprepared.Conformer.

import stk
import stko
import bbprepared

building_block = stk.BuildingBlock(
    smiles="C1=CC=NC(=C1)C=NBr",
    functional_groups=[
        stk.SmartsFunctionalGroupFactory(
            smarts="[#6]~[#7X2]~[#35]",
            bonders=(1,),
            deleters=(),
        ),
        stk.SmartsFunctionalGroupFactory(
            smarts="[#6]~[#7X2]~[#6]",
            bonders=(1,),
            deleters=(),
        ),
    ],
)

# This uses the rdkit conformer generation.
ensemble = bbprepared.generators.ETKDG(num_confs=100).generate_conformers(
    building_block
)

Note that you could couple this with any energy function, especially those provided in stko. And in the new verstion, it is a one-liner!

calculator = bbprepared.EnergyCalculator(
    name="MMFFEnergy",
    function=stko.MMFFEnergy().get_energy,
)

# Iterate over ensemble without optimisation.
minimum_conformer = ensemble.get_lowest_energy_conformer(
    calculator=calculator,
)
minimum_score_no_opt = minimum_conformer.score

# With optimisation...
optimiser = bbprepared.Optimiser(
    name="MMFF",
    function=stko.MMFF().optimize,
)
new_ensemble = ensemble.optimise_conformers(
    optimiser=optimiser,
)
minimum_conformer = new_ensemble.get_lowest_energy_conformer(
    calculator=calculator,
)
minimum_score_opt = minimum_conformer.score