Dear Jerry,

When calculating the RMS, try:

rms = AllChem.CalcRMS(probeMol, refMol, map=[list(zip(mv, refMatch))])

Note that you are calculating MCS across all mols, however; you might want
to consider pairwise-MCS (i.e. MCS between each docked ligand and the ref
ligand individually and then calculate RMS based on it) since you want
difference between each docked ligand and reference ligand.

I hope this works for you.
Best regards,
Omar

On Sat, Dec 19, 2020 at 2:03 AM Parks, Jerry M. via Rdkit-discuss <
rdkit-discuss@lists.sourceforge.net> wrote:

> Hello
>
>
>
> I’m trying to calculate RMSDs between a reference molecule from an X-ray
> structure and a series of similar but somewhat different molecules with a
> common scaffold that I have docked to the protein. I don’t want to align
> the structures, I just want to measure how different their docked poses are
> to the reference structure. All of the molecules have the same core
> structure, but have different functional groups. This functionality is
> available in the recently developed web server LigRMSD (
> https://ligrmsd.appsbio.utalca.cl), but I need to make some modifications
> to the procedure.
>
>
>
> Following this thread (
> https://sourceforge.net/p/rdkit/mailman/message/35678724/) and this blog
> post (http://rdkit.blogspot.com/2013/12/using-allchemconstrainedembed.html),
> I’ve written the following code:
>
>
>
> from rdkit import Chem
>
> from rdkit.Chem import AllChem
>
> from rdkit.Chem.Draw import IPythonConsole
>
> from rdkit.Chem.Draw.MolDrawing import MolDrawing, DrawingOptions
>
> from rdkit.Chem import rdFMCS
>
> import glob
>
>
>
> # Load a set of mol files.
>
> mols = []
>
> for m in glob.glob('*.mol'):
>
>     tmpmol = Chem.MolFromMolFile(m)
>
>     name_without_suffix = m[:-4]
>
>     tmpmol.SetProp('_Name', name_without_suffix)
>
>     mols.append(tmpmol)
>
>
>
> # Draw the molecules.
>
> Chem.Draw.MolsToGridImage(mols, molsPerRow=2, subImgSize=(350, 350),
> legends=[mol.GetProp('_Name') for mol in mols])
>
>
>
> # Find the MCS.
>
> mcs = rdFMCS.FindMCS(mols,threshold=1.0, ringMatchesRingOnly=True,
> completeRingsOnly=True)
>
>
>
> # Align everything to the reference molecule.
>
>
>
> patt = Chem.MolFromSmarts(mcs.smartsString)
>
> refMol = mols[0]
>
> refMatch = refMol.GetSubstructMatch(patt)
>
> rmsVs = []
>
> for probeMol in mols[1:]:
>
>     mv = probeMol.GetSubstructMatch(patt)
>
>     rms = AllChem.AlignMol(probeMol, refMol, atomMap=list(zip(mv,
> refMatch)), maxIters=0)
>
>     print(probeMol.GetProp('_Name'), f'{rms:.2f}')
>
>     rmsVs.append(rms)
>
>
>
> However, even though I set maxIters=0 in the call to AlignMol, the
> molecules have all been translated to a common origin (which is not what I
> want).
>
>
>
> I tried replacing that line of code with the following call to CalcRMS
> (using the same atom mapping):
>
>
>
> rms = AllChem.CalcRMS(probeMol, refMol, map=list(zip(mv, refMatch)))
>
>
>
> but then I got the following error:
>
>
>
> ---------------------------------------------------------------------------
>
> ValueError                                Traceback (most recent call
> last)
>
> <ipython-input-7-0faef2f852d9> in <module>()
>
> *      8*     mv = probeMol.GetSubstructMatch(patt)
>
> *      9*     #rms = AllChem.AlignMol(probeMol, refMol,
> atomMap=list(zip(mv, refMatch)), maxIters=0)
>
> ---> 10     rms = AllChem.CalcRMS(probeMol, refMol, map=list(zip(mv,
> refMatch)))
>
> *     11*     print(probeMol.GetProp('_Name'), f'{rms:.2f}')
>
> *     12*     rmsVs.append(rms)
>
>
>
> ValueError: sequence does not support length query
>
>
>
> Any suggestions for fixing the code would be appreciated.
>
>
>
> Thank you,
>
> Jerry Parks
> _______________________________________________
> Rdkit-discuss mailing list
> Rdkit-discuss@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/rdkit-discuss
>
_______________________________________________
Rdkit-discuss mailing list
Rdkit-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss

Reply via email to