Skip to content

Latest commit

 

History

History
155 lines (99 loc) · 5.92 KB

README.md

File metadata and controls

155 lines (99 loc) · 5.92 KB

Fragmenstein

Scaffold hopping between bound compounds by stitching them together like a reanimated corpse.

Stitched molecules

Fragmenstein can perform two different tasks.

  • Combine hits
  • Place a given followup molecule (SMILES) based on series of hits

Like Frankenstein's creation it may violate the laws of chemistry. Planar trigonal topologies may be tetrahedral, bonds unnaturally long etc. This monstrosity is therefore then energy minimised with strong constraints within the protein.

Classes

There are three main classes, named after characters from the Fragmenstein book and movies:

  • Monster makes the stitched together molecules indepent of the protein — documentation
  • Igor uses PyRosetta to minimise in the protein the fragmenstein followup — documentation
  • Victor is a pipeline that calls the parts, with several features, such as warhead switching —documentation

NB. In the absence of pyrosetta (which requires an academic licence), all bar Igor work.

Additionally, there are a few minor classes.

One of these is mRMSD, a multiple RMSD variant which does not align and bases which atoms to use on coordinates —documentation

There are two module hosted elsewhere:

Combine

It can also merge and link fragment hits by itself and find the best scoring mergers. For details about linking see linking notes It uses the same overlapping position clustering, but also has a decent amount of impossible/uncommon chemistry prevention.

Monster:

from fragmenstein import Monster
monster = Monster(hits=[hits_a, hit_b])
monster.combine()
monster.positioned_mol # RDKit.Chem.Mol

Victor:

from fragmenstein import Monster
victor = Victor(hits=[hits_a, hit_b], 
                pdb_filename='foo.pdb',
                covalent_resi=1) # if not covalent, just put the first residue or something.
victor.combine()
victor.minimised_mol

The two seem similar, but Victor places with Monster and minimises with Igor. As a result it has energy scores

victor.ddG

Fragmenstein is not really a docking algorithm as it does not find the pose with the lowest energy within a given volume. Consequently, it is a method to find how faithful is a given followup to the hits provided. Hence the minimised pose should be assessed by the RMSD metric or similar and the ∆∆G score used solely as a cutoff —lower than zero.

Place

Here is an interactive example of placed molecules.

It is rather tolerant to erroneous/excessive submissions (by automatically excluding them) and can energy minimise strained conformations. summary

Three mapping approaches were tested, but the key is that hits are pairwise mapped to each other by means of one-to-one atom matching based upon position as opposed to similarity which is easily led astray. For example, note here that the benzene and the pyridine rings overlap, not the two pyridine rings:

Examples

Monster:

from fragmenstein import Monster
monster = Monster(hits=[hits_a, hit_b])
monster.place_smiles('CCO')
monster.positioned_mol

Victor:

from fragmenstein import Monster
victor = Victor(hits=[hits_a, hit_b], pdb_filename='foo.pdb')
victor.place('CCO')
victor.minimised_mol

For a lengthier example see example notes.

Other features

Installation

Requires RDKit

To install for system Python3 on Linux:

sudo apt-get install python3-rdkit librdkit1 rdkit-data

To install for system Python3 on MacOS via Brew:

brew install rdkit --with-python3

To install for Conda Python3

conda install -c conda-forge rdkit

Requires Pyrosetta

Pyrosetta requires a password to be downloaded (acamedic licence) obtained by https://els2.comotion.uw.edu/product/pyrosetta. This is a different licence from the Rosetta one. The username of the latter is formatted variant of "academic user", while the former is the name of a researcher whose names bares an important concept in protein folding. Pyrosetta can be downloaded via a browser from http://www.pyrosetta.org/dow. Or with a variant of the following:

curl -u 👾👾👾:👾👾👾https://graylab.jhu.edu/download/PyRosetta4/archive/release/PyRosetta4.Release.python38.linux/PyRosetta4.Release.python38.linux.release-273.tar.bz2 -o a.tar.bz2
tar -xf a.tar.bz2
cd PyRosetta4.Release.python38.linux
sudo pip3 install .

Fragmenstein and dependencies

Install from pipy

sudo pip3 install fragmenstein

Origin

See Fragmenstein and COVID moonshot.

Fragmenstein was created to see how reasonable are the molecules of fragment mergers submitted in the COVID moonshot project, because after all the underlying method is fragment based screening. This dataset has some unique peculiarities that potentially are not encountered in other projects.

Autogenerated documentations

For more see the source code or the Sphinx converted documentation.

Changes

Some changes to the algorithm may happen, see changelog and wip.md for more.