Based on the code snippets, Paolo has not used the basic-knowledge terms
whereas Tim did.
When setting useExpTorsionAnglePrefs=True and useBasicKnowledge=True, a
minimization is in principle not necessary anymore (unless there are aliphatic
rings, because we currently don’t have torsion rules for them).
Best,
Sereina
On 22 Jun 2016, at 05:02, Greg Landrum <greg.land...@gmail.com> wrote:
> I don't have anything to add to the pieces about the alignment (Paolo is the
> expert there!), but one comment on the conformation generation: If you used
> the background knowledge terms in the embedding, I don't think you should be
> getting the really distorted aromatic rings. Since in this case that does
> happen, for at least some conformations, I suspect there may be something
> wrong in the code.
>
> I'll take a look at that (and ask Sereina too).
>
> Best,
> -greg
>
>
> On Tue, Jun 21, 2016 at 10:30 PM, Paolo Tosco <paolo.to...@unito.it> wrote:
> Dear Tim,
>
> the Align() method returns an RMSD value, which however is computed only on a
> limited number of atom pairs, namely those that the algorithm was able to
> match between the two molecules, so a low value is not particularly
> informative of the overall goodness of the alignment, as it only indicates
> that the matched atoms were matched nicely, but there might only be a few of
> those in the core, while side chains are scattered all over.
> The Score() method instead returns the O3AScore for the alignment, which is a
> better way to assess the quality of the superimposition.
>
> The other problem in your script is that the i index is incremented before
> recording it in the lowest/highest variables, so the confIds are shifted by
> 1, as the conformation index in the RDKit is 0-based.
>
> I also noticed that without minimizing the conformations the aromatic rings
> look quite distorted, so I added a MMFF minimization, and I increased the
> number of generated conformations and the pruneRmsThreshold. Setting to False
> the experimental torsion angle preferences and basic knowledge about rings
> seems to yield a larger variety of geometries which helps reproducing this
> quite peculiar x-ray geometry which is probably not so commonly found. Please
> find the modified script below.
>
> Hope this helps, kind regards
> Paolo
>
>
> #!/usr/bin/env python
>
>
> from rdkit import Chem, RDConfig
> from rdkit.Chem import AllChem, rdMolAlign
>
> ref =
> Chem.MolFromSmiles('NC(=[NH2+])c1ccc(C[C@@H](NC(=O)CNS(=O)(=O)c2ccc3ccccc3c2)C(=O)N2CCCCC2)cc1')
> mol1 =
> Chem.MolFromPDBFile(RDConfig.RDBaseDir+'/rdkit/Chem/test_data/1DWD_ligand.pdb')
> mol1 = AllChem.AssignBondOrdersFromTemplate(ref, mol1)
> mol2 =
> Chem.MolFromPDBFile(RDConfig.RDBaseDir+'/rdkit/Chem/test_data/1PPC_ligand.pdb')
> mol2 = AllChem.AssignBondOrdersFromTemplate(ref, mol2)
>
> pyO3A = rdMolAlign.GetO3A(mol1, mol2)
> rmsd = pyO3A.Align()
> score = pyO3A.Score()
> print "Orig",score
> Chem.MolToMolFile(mol1, "orig.mol")
>
> cids = AllChem.EmbedMultipleConfs(mol1, numConfs=250, maxAttempts=100,
> pruneRmsThresh=0.5, useExpTorsionAnglePrefs=False,
> useBasicKnowledge=False)
> AllChem.MMFFOptimizeMoleculeConfs(mol1, mmffVariant='MMFF94s')
> pyO3As = rdMolAlign.GetO3AForProbeConfs(mol1, mol2, numThreads=0)
> i = 0
> lowest = 999999999.9
> highest = 0.0
> for pyO3A in pyO3As:
> rmsd = pyO3A.Align()
> score = pyO3A.Score()
> if score < lowest:
> lowest = score
> lowestConfId = i
> if score > highest:
> highest = score
> highestConfId = i
> i +=1
>
> print "Lowest:", lowest, lowestConfId
> print "Highest:", highest, highestConfId
>
> Chem.MolToMolFile(mol1, "lowest.mol", confId=lowestConfId)
> Chem.MolToMolFile(mol1, "highest.mol", confId=highestConfId)
>
>
> On 06/21/16 15:41, Tim Dudgeon wrote:
>> Hi All,
>>
>> I'm trying to get to grips with using Open3D Align in RDKit, but hitting
>> problems.
>>
>> My approach is to generate random conformers of the probe molecule and align
>> it to the reference molecule. My example is cobbled together from the
>> examples in the cookbook.
>>
>>
>>
>> from rdkit import Chem, RDConfig
>> from rdkit.Chem import AllChem, rdMolAlign
>>
>> ref =
>> Chem.MolFromSmiles('NC(=[NH2+])c1ccc(C[C@@H](NC(=O)CNS(=O)(=O)c2ccc3ccccc3c2)C(=O)N2CCCCC2)cc1')
>> mol1 =
>> Chem.MolFromPDBFile(RDConfig.RDBaseDir+'/rdkit/Chem/test_data/1DWD_ligand.pdb')
>> mol1 = AllChem.AssignBondOrdersFromTemplate(ref, mol1)
>> mol2 =
>> Chem.MolFromPDBFile(RDConfig.RDBaseDir+'/rdkit/Chem/test_data/1PPC_ligand.pdb')
>> mol2 = AllChem.AssignBondOrdersFromTemplate(ref, mol2)
>>
>> pyO3A = rdMolAlign.GetO3A(mol1, mol2)
>> score = pyO3A.Align()
>> print "Orig",score
>> Chem.MolToMolFile(mol1, "orig.mol")
>>
>> cids = AllChem.EmbedMultipleConfs(mol1, numConfs=100, maxAttempts=100,
>> pruneRmsThresh=0.1, useExpTorsionAnglePrefs=True, useBasicKnowledge=True)
>>
>> pyO3As = rdMolAlign.GetO3AForProbeConfs(mol1, mol2, numThreads=0)
>> i = 0
>> lowest = 999999999.9
>> highest = 0.0
>> for pyO3A in pyO3As:
>> i +=1
>> score = pyO3A.Align()
>> if score < lowest:
>> lowest = score
>> lowestConfId = i
>> if score > highest:
>> highest = score
>> highestConfId = i
>>
>> print "Lowest:", lowest, lowestConfId
>> print "Highest:", highest, highestConfId
>>
>> Chem.MolToMolFile(mol1, "lowest.mol", confId=lowestConfId)
>> Chem.MolToMolFile(mol1, "highest.mol", confId=highestConfId)
>> What I'm finding is that the alignments with the lowest and highest O3A
>> scores are much worse alignments (visually) than the original structure (the
>> structure from 1DWD). Typical scores are:
>>
>> Original 1DWD structure: 0.38
>> Lowest scoring conformer: 0.186
>> Highest scoring conformer: 0.78
>> Now I'm assuming that lower O3A align scores are better (though that's not
>> specifically stated), so as my lowest score is lower than the original
>> alignment I would have expected it to be a better alignment, but its clearly
>> much worse. And if I'm wrong and higher scores are better then the same
>> applies.
>> Clearly I've not understood something correctly!
>> Tim
>>
>>
>> ------------------------------------------------------------------------------
>> Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
>> Francisco, CA to explore cutting-edge tech and listen to tech luminaries
>> present their vision of the future. This family event has something for
>> everyone, including kids. Get more information and register today.
>> http://sdm.link/attshape
>>
>>
>> _______________________________________________
>> Rdkit-discuss mailing list
>> Rdkit-discuss@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/rdkit-discuss
>
>
> ------------------------------------------------------------------------------
> Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
> Francisco, CA to explore cutting-edge tech and listen to tech luminaries
> present their vision of the future. This family event has something for
> everyone, including kids. Get more information and register today.
> http://sdm.link/attshape
> _______________________________________________
> Rdkit-discuss mailing list
> Rdkit-discuss@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/rdkit-discuss
>
>
> ------------------------------------------------------------------------------
> Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
> Francisco, CA to explore cutting-edge tech and listen to tech luminaries
> present their vision of the future. This family event has something for
> everyone, including kids. Get more information and register today.
> http://sdm.link/attshape_______________________________________________
> Rdkit-discuss mailing list
> Rdkit-discuss@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/rdkit-discuss
------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
Rdkit-discuss mailing list
Rdkit-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss