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

Reply via email to