Thanks Greg.
For completeness, for anyone trying this from the Java wrappers, the relevant
methods are
mol.clearConformers();
and
mol.addConformer(conf, true);
Steve
From: Greg Landrum [mailto:greg.land...@gmail.com]
Sent: 11 January 2017 11:01
To: Stephen Roughley
Cc: RDKit Discuss
Subject: Re: RDKit conformer handling possible bug?
On Wed, Jan 11, 2017 at 10:47 AM, Stephen Roughley
<s.rough...@vernalis.com<mailto:s.rough...@vernalis.com>> wrote:
Thanks Greg. I think I understand!
Let me just check this to be certain.
If the molecule came from SMILES, it has no conformers, so all appears to work
as expected.
correct
If the molecule came from MOL/SDF etc, then it has coordinates in the input,
and thus a conformer. When I then add a conformer, it has 2 conformers with
id=0, and so I only get the first, original one (or either at random?)
Correct, it has 2 conformers and you only get the first one, unless you change
the ID to allow you to get the second one.
, and it looks like it only has 1 conformer? (Or it only has 1 conformer still
at all)
Any which way, the
mol.RemoveAllConformers()
call will solve it.
Yep! And you should also use assignId=True when you call AddConformer.
Thanks again,
Steve
From: Greg Landrum
[mailto:greg.land...@gmail.com<mailto:greg.land...@gmail.com>]
Sent: 11 January 2017 07:24
To: Stephen Roughley; RDKit Discuss
Subject: Re: RDKit conformer handling possible bug?
Hi Steve,
[A general request: please send RDKit questions/comments to the rdkit-discuss
mailing list so that others can see the questions and answers. I'm CC'ing the
list on my reply because I think it could be of general interest]
For this one, what you have encountered here is a feature, but it's not
immediately obvious.
There are two things going on here:
1) an RDKit molecule can have 0-N conformers. Chem.MolToMolBlock(), by default,
picks the one with ID zero. If there are no conformers, then it just outputs
zeros for the coordinates. Mol.AddConformer() does not replace existing
conformers, but just adds to the list.
2) By default Mol.AddConformer() does not change the ID of the conformer it
adds. So if you add the default conformer (number zero) from one molecule to
another, you end up with two conformers with ID 0. You can work around this by
calling Mol.AddConformer() with assignId=True
Here's a demo:
mol_SDF_H_2=Chem.AddHs(Chem.MolFromMolBlock(molString))
print(mol_SDF_H_2.GetNumConformers())
# output is 1
mol_SDF_H_2.AddConformer(mol_SDF_H.GetConformer(0),assignId=True)
print(mol_SDF_H_2.GetNumConformers())
# output is 2
print([x.GetId() for x in mol_SDF_H_2.GetConformers()])
# output is [0,1]
print(Chem.MolToMolBlock(mol_SDF_H_2,confId=1))
# output is what is expected.
If you want to replace the existing conformer, you can do:
mol.RemoveAllConformers() before you call mol.AddConformer().
Hope this helps,
-greg
On Tue, Jan 10, 2017 at 2:58 PM, Stephen Roughley
<s.rough...@vernalis.com<mailto:s.rough...@vernalis.com>> wrote:
from rdkit import Chem
from rdkit.Chem import AllChem
#From SMILES - this works!
mol_SMI = Chem.MolFromSmiles("C")
mol_SMI_H=Chem.AddHs(mol_SMI)
mol_SMI_H_2 = Chem.AddHs(Chem.MolFromSmiles("C"))
ids=AllChem.EmbedMultipleConfs(mol_SMI_H, numConfs=10)
mol_SMI_H_2.AddConformer(mol_SMI_H.GetConformer(0))
print(Chem.MolToMolBlock(mol_SMI_H_2))
## As expected, the conformer is transferred to the vanilla copy
##
## RDKit 3D
##
## 5 4 0 0 0 0 0 0 0 0999 V2000
## -0.0221 0.0032 0.0165 C 0 0 0 0 0 0 0 0 0 0 0 0
## -0.6665 0.8884 -0.1014 H 0 0 0 0 0 0 0 0 0 0 0 0
## -0.3778 -0.8578 -0.5883 H 0 0 0 0 0 0 0 0 0 0 0 0
## 0.0964 -0.3151 1.0638 H 0 0 0 0 0 0 0 0 0 0 0 0
## 0.9699 0.2812 -0.3906 H 0 0 0 0 0 0 0 0 0 0 0 0
## 1 2 1 0
## 1 3 1 0
## 1 4 1 0
## 1 5 1 0
##M END
molString="""
Mrv16b2101101711412D
1 0 0 0 0 0 999 V2000
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
M END
$$
"""
#Now try from MOL Block
mol_SDF=Chem.MolFromMolBlock(molString)
print(Chem.MolToMolBlock(mol_SDF))
## As expected we have a molecule with 1 atom and no conformers
##
## RDKit 2D
##
## 1 0 0 0 0 0 0 0 0 0999 V2000
## 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
##M END
##
mol_SDF_H=Chem.AddHs(mol_SDF)
Chem.MolFromMolBlock(molString)
mol_SDF_H_2=Chem.AddHs(Chem.MolFromMolBlock(molString))
ids=AllChem.EmbedMultipleConfs(mol_SDF_H, numConfs=10)
print(Chem.MolToMolBlock(mol_SDF_H,confId=0))
## As expected, we have an molecule with Hs added, and conformers with coords
##
## RDKit 3D
##
## 5 4 0 0 0 0 0 0 0 0999 V2000
## 0.0260 -0.0121 -0.0153 C 0 0 0 0 0 0 0 0 0 0 0 0
## 0.9804 -0.4982 -0.2778 H 0 0 0 0 0 0 0 0 0 0 0 0
## -0.0317 1.0327 -0.3649 H 0 0 0 0 0 0 0 0 0 0 0 0
## -0.1070 0.0168 1.0896 H 0 0 0 0 0 0 0 0 0 0 0 0
## -0.8677 -0.5393 -0.4316 H 0 0 0 0 0 0 0 0 0 0 0 0
## 1 2 1 0
## 1 3 1 0
## 1 4 1 0
## 1 5 1 0
##M END
mol_SDF_H_2.AddConformer(mol_SDF_H.GetConformer(0))
print(Chem.MolToMolBlock(mol_SDF_H_2))
## Whoa! This time, we have added a conformation to a vanilla copy
## exactly as we did for SMILES, but no conformer coords are exported:
##
## RDKit 2D
##
## 5 4 0 0 0 0 0 0 0 0999 V2000
## 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
## 0.0000 0.0000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
## 0.0000 0.0000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
## 0.0000 0.0000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
## 0.0000 0.0000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
## 1 2 1 0
## 1 3 1 0
## 1 4 1 0
## 1 5 1 0
##M END
mol_SMI_H_3 = Chem.AddHs(Chem.MolFromSmiles("C"))
mol_SMI_H_3.AddConformer(mol_SDF_H.GetConformer(0))
print(Chem.MolToMolBlock(mol_SMI_H_3))
## And again, this works ok...
##
## RDKit 3D
##
## 5 4 0 0 0 0 0 0 0 0999 V2000
## 0.0260 -0.0121 -0.0153 C 0 0 0 0 0 0 0 0 0 0 0 0
## 0.9804 -0.4982 -0.2778 H 0 0 0 0 0 0 0 0 0 0 0 0
## -0.0317 1.0327 -0.3649 H 0 0 0 0 0 0 0 0 0 0 0 0
## -0.1070 0.0168 1.0896 H 0 0 0 0 0 0 0 0 0 0 0 0
## -0.8677 -0.5393 -0.4316 H 0 0 0 0 0 0 0 0 0 0 0 0
## 1 2 1 0
## 1 3 1 0
## 1 4 1 0
## 1 5 1 0
##M END
______________________________________________________________________
PLEASE READ: This email is confidential and may be privileged. It is intended
for the named addressee(s) only and access to it by anyone else is
unauthorised. If you are not an addressee, any disclosure or copying of the
contents of this email or any action taken (or not taken) in reliance on it is
unauthorised and may be unlawful. If you have received this email in error,
please notify the sender or
postmas...@vernalis.com<mailto:postmas...@vernalis.com>. Email is not a secure
method of communication and the Company cannot accept responsibility for the
accuracy or completeness of this message or any attachment(s). Please check
this email for virus infection for which the Company accepts no responsibility.
If verification of this email is sought then please request a hard copy. Unless
otherwise stated, any views or opinions presented are solely those of the
author and do not represent those of the Company.
The Vernalis Group of Companies
100 Berkshire Place
Wharfedale Road
Winnersh, Berkshire
RG41 5RD, England
Tel: +44 (0)118 938 0000<tel:+44%20118%20938%200000>
To access trading company registration and address details, please go to the
Vernalis website at www.vernalis.com<http://www.vernalis.com> and click on the
"Company address and registration details" link at the bottom of the page..
______________________________________________________________________
______________________________________________________________________
PLEASE READ: This email is confidential and may be privileged. It is intended
for the named addressee(s) only and access to it by anyone else is
unauthorised. If you are not an addressee, any disclosure or copying of the
contents of this email or any action taken (or not taken) in reliance on it is
unauthorised and may be unlawful. If you have received this email in error,
please notify the sender or postmas...@vernalis.com. Email is not a secure
method of communication and the Company cannot accept responsibility for the
accuracy or completeness of this message or any attachment(s). Please check
this email for virus infection for which the Company accepts no responsibility.
If verification of this email is sought then please request a hard copy. Unless
otherwise stated, any views or opinions presented are solely those of the
author and do not represent those of the Company.
The Vernalis Group of Companies
100 Berkshire Place
Wharfedale Road
Winnersh, Berkshire
RG41 5RD, England
Tel: +44 (0)118 938 0000
To access trading company registration and address details, please go to the
Vernalis website at www.vernalis.com and click on the "Company address and
registration details" link at the bottom of the page..
______________________________________________________________________
------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
_______________________________________________
Rdkit-discuss mailing list
Rdkit-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss