Testing possible atom mappings in perses

Module to test how a hybrid system will be generated for a system

* This does _not_ check if hydrogens are mapped or not. That is handled by class SmallMoleculeSetProposalEngine as a system needs to be generated and the hydrogens restraints need to be checked
* AtomMapper also does not check that the minimal number of core atoms are retained by a map. If

In [1]:
# from perses.utils.openeye import createOEMolFromSDF
from perses.utils.smallmolecules import render_atom_mapping
from perses.utils.openeye import smiles_to_oemol
from perses.rjmc.topology_proposal import AtomMapper
from openeye import oechem
import itertools
from IPython.display import display, Image

In [2]:
# download files of interest from openmm-forcefields repo!
import os
os.system('wget https://raw.githubusercontent.com/openmm/openmmforcefields/master/openmmforcefields/data/perses_jacs_systems/bace/Bace_ligands_shifted.sdf')




os.system('wget https://raw.githubusercontent.com/openmm/openmmforcefields/master/openmmforcefields/data/perses_jacs_systems/jnk1/Jnk1_ligands.sdf')


Out[2]:
0

Starting by just using the three default options in perses


In [3]:
smiles = {'benzene':'c1ccccc1','toluene':'c1ccccc1C','nitrobenzene':'C1=CC=C(C=C1)[N+](=O)[O-]','cyclohexane':'C1CCCCC1'}
list_of_mols = []
for name,smi in smiles.items():
    mol = smiles_to_oemol(smi, title=name)
    list_of_mols.append(mol)


names_and_oemols = dict(zip(smiles.keys(),list_of_mols))

# looping over default mapping strengths
for map_strength in ['weak']:
    print(f'Doing {map_strength} mapping')
    for nameA,nameB in itertools.combinations(names_and_oemols,2):
        molA = names_and_oemols[nameA]
        molB = names_and_oemols[nameB]
        mapping = AtomMapper._get_mol_atom_map(molA,molB,map_strength=map_strength)

        if mapping is None or len(mapping) < 3:
            # too many unique atoms
            print(f'Cannot map {nameA} to {nameB} effectively with {map_strength} map strength')
        else:
            print(f'{nameA} ---> {nameB} '+u'\u2713')
            render_atom_mapping(f'{nameA}to{nameB}_{map_strength}.png', molA, molB, mapping)
            i = Image(filename=f'{nameA}to{nameB}_{map_strength}.png')
            display(i)
    print()


INFO:utils.openeye:molecule                       does not have unique atom names. Generating now...
INFO:utils.openeye:molecule                       does not have unique atom names. Generating now...
INFO:utils.openeye:molecule                       does not have unique atom names. Generating now...
INFO:utils.openeye:molecule                       does not have unique atom names. Generating now...
INFO:proposal_generator:Using core to chose best atom map
INFO:proposal_generator:[6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
INFO:proposal_generator:Scaffold has symmetry of 12
INFO:proposal_generator:[6]
INFO:proposal_generator:[6]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:12 maps are reduced to 1
INFO:proposal_generator:molecule_maps_scores: dict_keys([0.0])
Doing weak mapping
benzene ---> toluene ✓
INFO:proposal_generator:Using core to chose best atom map
INFO:proposal_generator:[6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
INFO:proposal_generator:Scaffold has symmetry of 12
INFO:proposal_generator:[6]
INFO:proposal_generator:[6]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:[12]
INFO:proposal_generator:12 maps are reduced to 1
INFO:proposal_generator:molecule_maps_scores: dict_keys([0.0])
benzene ---> nitrobenzene ✓
INFO:proposal_generator:Using core to chose best atom map
INFO:proposal_generator:[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
INFO:proposal_generator:Scaffold has symmetry of 36
INFO:proposal_generator:[6]
INFO:proposal_generator:[6]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
INFO:proposal_generator:2592 maps are reduced to 1
INFO:proposal_generator:molecule_maps_scores: dict_keys([0])
INFO:proposal_generator:Using core to chose best atom map
INFO:proposal_generator:[6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
INFO:proposal_generator:Scaffold has symmetry of 12
INFO:proposal_generator:[6]
INFO:proposal_generator:[6]
INFO:proposal_generator:[13, 13]
INFO:proposal_generator:[13, 13]
INFO:proposal_generator:[13, 13]
INFO:proposal_generator:[13, 13]
INFO:proposal_generator:[13, 13]
INFO:proposal_generator:[13, 13]
INFO:proposal_generator:[13, 13]
INFO:proposal_generator:[13, 13]
INFO:proposal_generator:[13, 13]
INFO:proposal_generator:[13, 13]
INFO:proposal_generator:[13, 13]
INFO:proposal_generator:[13, 13]
INFO:proposal_generator:24 maps are reduced to 1
INFO:proposal_generator:molecule_maps_scores: dict_keys([0.07161082454512313])
Cannot map benzene to cyclohexane effectively with weak map strength
toluene ---> nitrobenzene ✓
INFO:proposal_generator:Using core to chose best atom map
INFO:proposal_generator:[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
INFO:proposal_generator:Scaffold has symmetry of 36
INFO:proposal_generator:[6]
INFO:proposal_generator:[6]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:[5, 5, 5, 5, 5, 5]
INFO:proposal_generator:216 maps are reduced to 6
INFO:proposal_generator:molecule_maps_scores: dict_keys([6.070268095508417, 5.806376434956268, 5.132874946298295, 4.616038548150793, 3.733510625030356, 3.2874380687519524])
INFO:proposal_generator:Finding best map using matching_criterion index
INFO:proposal_generator:Using core to chose best atom map
INFO:proposal_generator:[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
INFO:proposal_generator:Scaffold has symmetry of 36
INFO:proposal_generator:[6]
INFO:proposal_generator:[6]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
INFO:proposal_generator:[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
Cannot map toluene to cyclohexane effectively with weak map strength
INFO:proposal_generator:1080 maps are reduced to 18
INFO:proposal_generator:molecule_maps_scores: dict_keys([6.009154504591247, 12.11369504889459, 10.917346075029585, 5.73798448523496, 11.806348845850932, 10.833554232981193, 5.080636476477669, 11.149000837093642, 8.656811033463635, 4.545586024072418, 10.65012656837576, 8.18308498189786, 3.680984581826011, 8.589176152264347, 7.318483539651453, 3.2196963768576463, 8.31526612460388, 6.795870933843613])
INFO:proposal_generator:Finding best map using matching_criterion index
Cannot map nitrobenzene to cyclohexane effectively with weak map strength

Now lets try a few different mapping schemes using openeye's OEExprOpts

https://docs.eyesopen.com/toolkits/python/oechemtk/OEChemConstants/OEExprOpts.html


In [4]:
# this just checks atoms are in rings of the same size, with no check for aromaticity
atom_expr = oechem.OEExprOpts_IntType
bond_expr = oechem.OEExprOpts_RingMember 

from openforcefield.topology import Molecule
molecules = Molecule.from_file('Bace_ligands_shifted.sdf')
list_of_mols = [ molecule.to_openeye() for molecule in molecules ]

names_and_oemols = dict(zip(smiles.keys(),list_of_mols))

for nameA,nameB in itertools.combinations(names_and_oemols,2):
    molA = names_and_oemols[nameA]
    molB = names_and_oemols[nameB]    
    mapping = AtomMapper._get_mol_atom_map(molA,molB,atom_expr=atom_expr,bond_expr=bond_expr)
    
    print(f'{nameA} ---> {nameB} '+u'\u2713')
    render_atom_mapping(f'{nameA}to{nameB}.png', molA, molB, mapping)
    i = Image(filename=f'{nameA}to{nameB}.png')
    display(i)
    print()


INFO:proposal_generator:Using core to chose best atom map
INFO:proposal_generator:[17, 17, 17, 17]
INFO:proposal_generator:Scaffold has symmetry of 4
INFO:proposal_generator:[22]
INFO:proposal_generator:[20]
INFO:proposal_generator:[35]
INFO:proposal_generator:[35]
INFO:proposal_generator:[34, 34, 34, 34, 34, 34, 34, 34, 34]
INFO:proposal_generator:[34, 34, 34, 34, 34, 34, 34, 34, 34]
INFO:proposal_generator:20 maps are reduced to 3
INFO:proposal_generator:molecule_maps_scores: dict_keys([12.999028162919261, 24.275168746106914, 15.035388789795533])
benzene ---> toluene ✓
INFO:proposal_generator:Using core to chose best atom map
INFO:proposal_generator:[17, 17, 17, 17]
INFO:proposal_generator:Scaffold has symmetry of 4
INFO:proposal_generator:[22]
INFO:proposal_generator:[23]
INFO:proposal_generator:[34, 34, 34, 34, 34, 34, 34, 34, 34]
INFO:proposal_generator:[34, 34, 34, 34, 34, 34, 34, 34, 34]
INFO:proposal_generator:[35]

INFO:proposal_generator:[35]
INFO:proposal_generator:20 maps are reduced to 3
INFO:proposal_generator:molecule_maps_scores: dict_keys([21.40494471490694, 28.277624061053633, 10.441688659031954])
benzene ---> nitrobenzene ✓
INFO:proposal_generator:Using core to chose best atom map
INFO:proposal_generator:[17, 17, 17, 17]
INFO:proposal_generator:Scaffold has symmetry of 4
INFO:proposal_generator:[22]
INFO:proposal_generator:[17]
INFO:proposal_generator:[34, 34, 34, 34, 34, 34, 34, 34, 34]
INFO:proposal_generator:[34, 34, 34, 34, 34, 34, 34, 34, 34]
INFO:proposal_generator:[35]

INFO:proposal_generator:[35]
INFO:proposal_generator:20 maps are reduced to 3
INFO:proposal_generator:molecule_maps_scores: dict_keys([24.58957426295529, 15.389125701782206, 13.230241359852048])
benzene ---> cyclohexane ✓
INFO:proposal_generator:Using core to chose best atom map
INFO:proposal_generator:[17, 17, 17, 17]
INFO:proposal_generator:Scaffold has symmetry of 4
INFO:proposal_generator:[20]
INFO:proposal_generator:[23]
INFO:proposal_generator:[34, 34, 34, 34, 34, 34]
INFO:proposal_generator:[34, 34, 34, 34, 34, 34]
INFO:proposal_generator:[35]

INFO:proposal_generator:[35]
INFO:proposal_generator:14 maps are reduced to 2
INFO:proposal_generator:molecule_maps_scores: dict_keys([21.36826445473162, 9.67919668582741])
toluene ---> nitrobenzene ✓
INFO:proposal_generator:Using core to chose best atom map
INFO:proposal_generator:[17, 17, 17, 17]
INFO:proposal_generator:Scaffold has symmetry of 4
INFO:proposal_generator:[20]
INFO:proposal_generator:[17]
INFO:proposal_generator:[34, 34, 34, 34, 34, 34]
INFO:proposal_generator:[34, 34, 34, 34, 34, 34]
INFO:proposal_generator:[35]
INFO:proposal_generator:[35]
INFO:proposal_generator:14 maps are reduced to 2
INFO:proposal_generator:molecule_maps_scores: dict_keys([23.3056664991967, 10.30859050151824])
toluene ---> cyclohexane ✓
INFO:proposal_generator:Using core to chose best atom map
INFO:proposal_generator:[17, 17, 17, 17]

INFO:proposal_generator:Scaffold has symmetry of 4
INFO:proposal_generator:[23]
INFO:proposal_generator:[17]
INFO:proposal_generator:[35]
INFO:proposal_generator:[35]
INFO:proposal_generator:[35]
INFO:proposal_generator:[35]
INFO:proposal_generator:4 maps are reduced to 2
INFO:proposal_generator:molecule_maps_scores: dict_keys([9.97983797857188, 16.950330587936968])
INFO:proposal_generator:Finding best map using matching_criterion index
nitrobenzene ---> cyclohexane ✓

Now lets look at different map_strategy's that can be used, that can prioritise different mappings


In [5]:
# this just checks atoms are in rings of the same size, with no check for aromaticity
atom_expr = oechem.OEExprOpts_IntType
bond_expr = oechem.OEExprOpts_RingMember 

from openforcefield.topology import Molecule
molecules = Molecule.from_file('Jnk1_ligands.sdf')
list_of_mols = [ molecule.to_openeye() for molecule in molecules ]

molA = list_of_mols[0]
molB = list_of_mols[1]

for map_strategy in ['core','geometry']: 
    mapping = AtomMapper._get_mol_atom_map(molA,molB,atom_expr=atom_expr,bond_expr=bond_expr, map_strategy=map_strategy)

    print(f'{map_strategy}'+u'\u2713')
    render_atom_mapping(f'{nameA}to{nameB}.png', molA, molB, mapping)
    i = Image(filename=f'{nameA}to{nameB}.png')
    display(i)
    print()


INFO:proposal_generator:Using core to chose best atom map
INFO:proposal_generator:[15, 15, 15, 15, 15, 15, 15, 15]
INFO:proposal_generator:Scaffold has symmetry of 8
INFO:proposal_generator:[15]
INFO:proposal_generator:[15]
INFO:proposal_generator:[39, 39, 39]
INFO:proposal_generator:[38]
INFO:proposal_generator:[39, 39, 39]
INFO:proposal_generator:[38]
INFO:proposal_generator:[31, 31, 31, 31, 31, 31, 31, 31, 31, 31]
INFO:proposal_generator:[32, 32, 32, 32, 32, 32, 32, 32]
INFO:proposal_generator:[31, 31, 31, 31, 31, 31, 31, 31, 31, 31]
INFO:proposal_generator:[32, 32, 32, 32, 32, 32, 32, 32]
INFO:proposal_generator:44 maps are reduced to 4
INFO:proposal_generator:molecule_maps_scores: dict_keys([20.791024768657902, 9.411564742065682, 107.81202665890979, 111.92886264923382])
core✓
INFO:proposal_generator:Using geometry to chose best atom map
INFO:proposal_generator:[15, 15, 15, 15, 15, 15, 15, 15]
INFO:proposal_generator:Scaffold has symmetry of 8
INFO:proposal_generator:[15]
INFO:proposal_generator:[15]
INFO:proposal_generator:[39, 39, 39]
INFO:proposal_generator:[38]

INFO:proposal_generator:[39, 39, 39]
INFO:proposal_generator:[38]
INFO:proposal_generator:[31, 31, 31, 31, 31, 31, 31, 31, 31, 31]
INFO:proposal_generator:[32, 32, 32, 32, 32, 32, 32, 32]
INFO:proposal_generator:[31, 31, 31, 31, 31, 31, 31, 31, 31, 31]
INFO:proposal_generator:[32, 32, 32, 32, 32, 32, 32, 32]
INFO:proposal_generator:44 maps are reduced to 4
INFO:proposal_generator:molecule_maps_scores: dict_keys([20.791024768657902, 9.411564742065682, 107.81202665890979, 111.92886264923382])
geometry✓

Here - trying to get as many atoms into the core as possible, maps the methyl and the ether group on to eachother. In reality, these groups point opposite directions in the binding site, and most likely won't freely interconvert in a tightly constrained active site.

Using the geometry as the strategy fixes this, and gets them the right way round, even though there are more unique atoms to grow in/dissapear in the simulation.

Finally lets look at all the ways that we can map. -- from best (i.e. geometrically. closest to worse)


In [9]:
# this just checks atoms are in rings of the same size, with no check for aromaticity
atom_expr = oechem.OEExprOpts_IntType
bond_expr = oechem.OEExprOpts_RingMember 

from openforcefield.topology import Molecule
molecules = Molecule.from_file('Jnk1_ligands.sdf')
list_of_mols = [ molecule.to_openeye() for molecule in molecules ]

molA = list_of_mols[0]
molB = list_of_mols[1]

mappings = AtomMapper._get_mol_atom_map(molA,molB,atom_expr=atom_expr,bond_expr=bond_expr, map_strategy='return-all')

for score, mapping in sorted(mappings.items()):
    print(f'geometry score {score:.2f}')
    render_atom_mapping(f'{nameA}to{nameB}.png', molA, molB, mapping)
    i = Image(filename=f'{nameA}to{nameB}.png')
    display(i)
    print()


INFO:proposal_generator:Using return-all to chose best atom map
INFO:proposal_generator:[15, 15, 15, 15, 15, 15, 15, 15]
INFO:proposal_generator:Scaffold has symmetry of 8
INFO:proposal_generator:[15]
INFO:proposal_generator:[15]
INFO:proposal_generator:[39, 39, 39]
INFO:proposal_generator:[38]
INFO:proposal_generator:[39, 39, 39]
INFO:proposal_generator:[38]
INFO:proposal_generator:[31, 31, 31, 31, 31, 31, 31, 31, 31, 31]
INFO:proposal_generator:[32, 32, 32, 32, 32, 32, 32, 32]
INFO:proposal_generator:[31, 31, 31, 31, 31, 31, 31, 31, 31, 31]
INFO:proposal_generator:[32, 32, 32, 32, 32, 32, 32, 32]
INFO:proposal_generator:44 maps are reduced to 4
INFO:proposal_generator:molecule_maps_scores: dict_keys([20.791024768657902, 9.411564742065682, 107.81202665890979, 111.92886264923382])
WARNING:proposal_generator:Returning a list of all maps, rather than a dictionary.
geometry score 9.41
geometry score 20.79
geometry score 107.81
geometry score 111.93

Here we see the geometrically best first, with fewer core atoms, and then we see the one with the benzene ring flipped. We can see that more is in the core, but it's further from the input coordinates.

Following these two, the mapping has found symmetry in the scaffold, and has mapped the two aromatic rings the 'wrong way around.' These are geometrically very far from the right binding mode, and have the most atoms not in the core, but in cases where the binding mode of B is very unclear, this might be an interesting experiment to run.


In [ ]: