matteoferla/Fragmenstein

View on GitHub
documentation/_snippets.md

Summary

Maintainability
Test Coverage
These are snippets that need to go somewhere
# 1

To make Victor carp at any exception, do

    Victor.error_to_catch = ()
    
This is because `try`/`except` can accept multiple error classes as a tuple.

# 2

`ConnectionError` is meant for comms connection errors, but here it is raised as bad bonding.

# 3

Show the steps

    from IPython.display import display
    
    monster = Monster([fore, aft]).merge()
    for m in monster.modifications:
        display(m)
        
Show multiple RDKit mols in nglview

    import nglview as nv
    from io import StringIO

    def show_mols(*mols: Chem.Mol) -> nv.NGLWidget:
        view = nv.NGLWidget()
        for mol in mols:
            fh = StringIO(Chem.MolToPDBBlock(mol))
            view.add_component(fh, ext='pdb')
        return view

# X

One issue is that the ring mergers are not transitive.
Hit order results in different cases:

    ortho = Chem.MolFromSmiles('Cc1cc(O)ccc1')
    meta = Chem.MolFromSmiles('Cc1ccc(O)cc1')
    AllChem.EmbedMolecule(ortho)
    AllChem.EmbedMolecule(meta)
    Chem.rdMolAlign.AlignMol(prbMol=ortho,
                             refMol=meta,
                             atomMap=[(0,0), (1,1)],
                             weights=[1,1],
                            )
    show_mols(ortho, meta)
    
These two cresol rings are perpendicular. The merger produces the same compound, methylcatecol
but one has a more distorted conformation.

    Monster([ortho, meta]).merge().positioned_mol  # decent
    Monster([meta, ortho]).merge().positioned_mol  # indecent
    
What are the implications for this?