OK, I'm closer to finding bug in my code. So I have this ctab:
>>> print ctab
Converted by chembl_beaker ver. 0.5.20
10 11 0 0 0 0 1 V2000
-0.7367 1.8295 0.0000 C 0 0
-1.4511 1.4170 0.0000 C 0 0
-1.4511 0.5919 0.0000 C 0 0
-0.7367 0.1794 0.0000 C 0 0
-0.0222 0.5919 0.0000 C 0 0
-0.0222 1.4170 0.0000 C 0 0
-0.7367 -0.6457 0.0000 C 0 0
-0.0223 -1.0582 0.0000 C 0 0
0.6922 -0.6458 0.0000 C 0 0
0.6923 0.1793 0.0000 C 0 0
1 2 2 0
2 3 1 0
3 4 2 0
4 5 1 0
5 6 2 0
6 1 1 0
7 8 2 0
8 9 1 0
9 10 2 0
10 5 1 0
4 7 1 0
M END
I read it into rdkit:
mol = Chem.MolFromMolBlock(ctab)
>>> print Chem.MolToMolBlock(mol)
RDKit 3D
10 11 0 0 0 0 0 0 0 0999 V2000
-0.7367 1.8295 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.4511 1.4170 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.4511 0.5919 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.7367 0.1794 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.0222 0.5919 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.0222 1.4170 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.7367 -0.6457 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.0223 -1.0582 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.6922 -0.6458 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.6923 0.1793 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 2 0
2 3 1 0
3 4 2 0
4 5 1 0
5 6 2 0
6 1 1 0
7 8 2 0
8 9 1 0
9 10 2 0
10 5 1 0
4 7 1 0
M END
>>> mol.GetConformer().Is3D()
True
Can you tell my why RDKit thinks this is 3D? The column with z
coordinates is all zeros. How can I build my input ctab in such a way
to clearly indicate that this is 2D depiction?
On Thu, Aug 21, 2014 at 8:16 AM, Michał Nowotka <[email protected]> wrote:
> Thank you Greg. I have to verify your example with my instance of
> RDKit, maybe my old version behaves differently.
> Which part of the code (C++ or Python part) is responsible for
> calculating coordinates?
>
> On Thu, Aug 21, 2014 at 4:40 AM, Greg Landrum <[email protected]> wrote:
>> I can't seem to reproduce the problem.
>>
>> Here's an example showing that the original atom coordinates are preserved
>> when Chem.AddHs is called with the addCoords argument:
>>
>> #--------------------------------
>>
>> In [9]: mb="""
>> ...: Mrv0541 08211405312D
>> ...:
>> ...: 6 6 0 0 0 0 999 V2000
>> ...: -3.5578 0.8250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0
>> 0
>> ...: -4.2723 0.4125 0.0000 C 0 0 0 0 0 0 0 0 0 0 0
>> 0
>> ...: -4.2723 -0.4125 0.0000 C 0 0 0 0 0 0 0 0 0 0 0
>> 0
>> ...: -3.5578 -0.8250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0
>> 0
>> ...: -1.8268 -0.7219 0.0000 C 0 0 0 0 0 0 0 0 0 0 0
>> 0
>> ...: -2.8433 0.4125 0.0000 C 0 0 0 0 0 0 0 0 0 0 0
>> 0
>> ...: 1 2 1 0 0 0 0
>> ...: 1 6 2 0 0 0 0
>> ...: 2 3 2 0 0 0 0
>> ...: 3 4 1 0 0 0 0
>> ...: 4 5 2 0 0 0 0
>> ...: 5 6 1 0 0 0 0
>> ...: M END
>> ...: """
>>
>> In [10]: m = Chem.MolFromMolBlock(mb)
>>
>> In [11]: nm = Chem.AddHs(m,addCoords=True)
>>
>> In [12]: print Chem.MolToMolBlock(nm)
>>
>> RDKit 2D
>>
>> 12 12 0 0 0 0 0 0 0 0999 V2000
>> -3.5578 0.8250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
>> -4.2723 0.4125 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
>> -4.2723 -0.4125 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
>> -3.5578 -0.8250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
>> -1.8268 -0.7219 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
>> -2.8433 0.4125 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
>> -3.5578 1.9250 0.0000 H 0 0 0 0 0 1 0 0 0 0 0 0
>> -5.2249 0.9625 0.0000 H 0 0 0 0 0 1 0 0 0 0 0 0
>> -5.2249 -0.9625 0.0000 H 0 0 0 0 0 1 0 0 0 0 0 0
>> -3.8108 -1.8955 0.0000 H 0 0 0 0 0 1 0 0 0 0 0 0
>> -0.8095 -1.1404 0.0000 H 0 0 0 0 0 1 0 0 0 0 0 0
>> -2.1500 1.2665 0.0000 H 0 0 0 0 0 1 0 0 0 0 0 0
>> 1 2 2 0
>> 1 6 1 0
>> 2 3 1 0
>> 3 4 2 0
>> 4 5 1 0
>> 5 6 2 0
>> 1 7 1 0
>> 2 8 1 0
>> 3 9 1 0
>> 4 10 1 0
>> 5 11 1 0
>> 6 12 1 0
>> M END
>>
>> #--------------------------------
>>
>> Note that addCoords does add the Hs in 3D:
>>
>> #--------------------------------
>>
>> In [5]: print Chem.MolToMolBlock(m)
>>
>> RDKit 2D
>>
>> 2 1 0 0 0 0 0 0 0 0999 V2000
>> -0.7500 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
>> 0.7500 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
>> 1 2 1 0
>> M END
>>
>> In [7]: nm=Chem.AddHs(m,addCoords=True)
>>
>> In [8]: print Chem.MolToMolBlock(nm)
>>
>> RDKit 2D
>>
>> 8 7 0 0 0 0 0 0 0 0999 V2000
>> -0.7500 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
>> 0.7500 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
>> -1.1167 0.0000 1.0371 H 0 0 0 0 0 1 0 0 0 0 0 0
>> -1.1167 0.8981 -0.5185 H 0 0 0 0 0 1 0 0 0 0 0 0
>> -1.1167 -0.8981 -0.5185 H 0 0 0 0 0 1 0 0 0 0 0 0
>> 1.1167 -0.0000 1.0371 H 0 0 0 0 0 1 0 0 0 0 0 0
>> 1.1167 -0.8981 -0.5185 H 0 0 0 0 0 1 0 0 0 0 0 0
>> 1.1167 0.8981 -0.5185 H 0 0 0 0 0 1 0 0 0 0 0 0
>> 1 2 1 0
>> 1 3 1 0
>> 1 4 1 0
>> 1 5 1 0
>> 2 6 1 0
>> 2 7 1 0
>> 2 8 1 0
>> M END
>>
>> #--------------------------------
>>
>> It is probably feasible to modify the code to add Hs in 2D when the
>> conformer is 2D, but it's likely a non-trivial amount of work and, as
>> Dimitri pointed out, there are many situations where the results aren't
>> going to look particularly good.
>>
>> -greg
>>
>>
>>
>> On Wed, Aug 20, 2014 at 7:34 PM, Greg Landrum <[email protected]>
>> wrote:
>>>
>>>
>>>
>>> On Wednesday, August 20, 2014, Michał Nowotka <[email protected]> wrote:
>>>>
>>>>
>>>> I've just checked and actually adding this flag doesn't solve my problem.
>>>> It seems that adding this flag actually calls Compute2dCoords (at
>>>> least this is how it looks like), because all coordinates are computed
>>>> from scratch, for example if my compound was translated by some vector
>>>> on 2D plane, after executing addHs it will be centered, if the
>>>> compound had one atom dragged unusually, it will be aligned back.
>>>>
>>>> The only difference between this flag and calling Compute2dCoords is
>>>> that H bonds are longer, which actually looks worse...
>>>>
>>>
>>> Hmmm, that doesn't sound like what is supposed to happen. I think that it
>>> should just add coords for the Hs that it adds. I will take a look tomorrow
>>> morning to see what is going on. There may be something odd for
>>> 2d conformers, but I really don't think it should redo the whole
>>> coordinate generation.
>>>
>>> -greg
>>
>>
------------------------------------------------------------------------------
Slashdot TV.
Video for Nerds. Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
Rdkit-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss