Re: [Rdkit-discuss] add hydrogen after its removal

2019-03-22 Thread Pavel

Thank you, Paolo!

That was not obvious for me how RDKit manage hydrogens in this case.

Pavel.

On 22/03/2019 12:15, Paolo Tosco wrote:


Hi Pavel,

After you have first called AddHs(), all hydrogens in your molecule 
are now in the molecule graph as real atoms, and there are no more 
implicit/explicit Hs .


Therefore, when you call RemoveAtom(), you are removing a real atom 
from the molecule graph, and the implicit/explicit H count stays 0 for 
the parent heavy atom. Hence calling again AddHs() does not add any 
hydrogens.


If you wish the hydrogen to come back when you call AddHs(), you need 
to increase the explicit H count on the parent heavy atom:


print(' load mol ')
m = Chem.MolFromSmiles('c1c1O')
print(Chem.MolToSmiles(m, allHsExplicit=True))
print(' add Hs ')
m = Chem.AddHs(m)
print(Chem.MolToSmiles(m, allHsExplicit=True))
print(' remove H ')
nbrs = m.GetAtomWithIdx(7).GetNeighbors()
if (len(nbrs) == 1 and nbrs[0].GetAtomicNum() > 1):
    nbrs[0].SetNumExplicitHs(nbrs[0].GetNumExplicitHs() + 1)
em = Chem.EditableMol(m)
em.RemoveAtom(7)
print(Chem.MolToSmiles(em.GetMol(), allHsExplicit=True))
print(' add Hs ')
mm = Chem.AddHs(em.GetMol())
print(Chem.MolToSmiles(mm, allHsExplicit=True))

 load mol 
[OH][c]1[cH][cH][cH][cH][cH]1
 add Hs 
[H][O][c]1[c]([H])[c]([H])[c]([H])[c]([H])[c]1[H]
 remove H 
[H][O][c]1[cH][c]([H])[c]([H])[c]([H])[c]1[H]
 add Hs 
[H][O][c]1[c]([H])[c]([H])[c]([H])[c]([H])[c]1[H]

HTH, cheers,
p.

On 03/22/19 10:20, Pavel wrote:


Hello,

  I encountered with an issue which I cannot understand and solve. 
This might be a bug or a feature. After removal of some specific 
hydrogens I could not add them back. Is it expected behavior or 
should I create an issue on github?


print(' load mol ')
m = Chem.MolFromSmiles('c1c1O')
print(Chem.MolToSmiles(m, allHsExplicit=True))
print(' add Hs ')
m = Chem.AddHs(m)
print(Chem.MolToSmiles(m, allHsExplicit=True))
print(' remove H ')
em = Chem.EditableMol(m)
em.RemoveAtom(7)
print(Chem.MolToSmiles(em.GetMol(), allHsExplicit=True))
print(' add Hs ')
mm = Chem.AddHs(em.GetMol())
print(Chem.MolToSmiles(mm, allHsExplicit=True))
print(' update property cache ')
mm.UpdatePropertyCache()
print(Chem.MolToSmiles(mm, allHsExplicit=True))

output:

 load mol 
[OH][c]1[cH][cH][cH][cH][cH]1
 add Hs 
[H][O][c]1[c]([H])[c]([H])[c]([H])[c]([H])[c]1[H]
 remove H 
[H][O][c]1[c][c]([H])[c]([H])[c]([H])[c]1[H]
 add Hs 
[H][O][c]1[c][c]([H])[c]([H])[c]([H])[c]1[H]
 update property cache 
[H][O][c]1[c][c]([H])[c]([H])[c]([H])[c]1[H]

Pavel.




___
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


Re: [Rdkit-discuss] add hydrogen after its removal

2019-03-22 Thread Paolo Tosco

Hi Pavel,

After you have first called AddHs(), all hydrogens in your molecule are 
now in the molecule graph as real atoms, and there are no more 
implicit/explicit Hs .


Therefore, when you call RemoveAtom(), you are removing a real atom from 
the molecule graph, and the implicit/explicit H count stays 0 for the 
parent heavy atom. Hence calling again AddHs() does not add any hydrogens.


If you wish the hydrogen to come back when you call AddHs(), you need to 
increase the explicit H count on the parent heavy atom:


print(' load mol ')
m = Chem.MolFromSmiles('c1c1O')
print(Chem.MolToSmiles(m, allHsExplicit=True))
print(' add Hs ')
m = Chem.AddHs(m)
print(Chem.MolToSmiles(m, allHsExplicit=True))
print(' remove H ')
nbrs = m.GetAtomWithIdx(7).GetNeighbors()
if (len(nbrs) == 1 and nbrs[0].GetAtomicNum() > 1):
    nbrs[0].SetNumExplicitHs(nbrs[0].GetNumExplicitHs() + 1)
em = Chem.EditableMol(m)
em.RemoveAtom(7)
print(Chem.MolToSmiles(em.GetMol(), allHsExplicit=True))
print(' add Hs ')
mm = Chem.AddHs(em.GetMol())
print(Chem.MolToSmiles(mm, allHsExplicit=True))

 load mol 
[OH][c]1[cH][cH][cH][cH][cH]1
 add Hs 
[H][O][c]1[c]([H])[c]([H])[c]([H])[c]([H])[c]1[H]
 remove H 
[H][O][c]1[cH][c]([H])[c]([H])[c]([H])[c]1[H]
 add Hs 
[H][O][c]1[c]([H])[c]([H])[c]([H])[c]([H])[c]1[H]

HTH, cheers,
p.

On 03/22/19 10:20, Pavel wrote:


Hello,

  I encountered with an issue which I cannot understand and solve. 
This might be a bug or a feature. After removal of some specific 
hydrogens I could not add them back. Is it expected behavior or should 
I create an issue on github?


print(' load mol ')
m = Chem.MolFromSmiles('c1c1O')
print(Chem.MolToSmiles(m, allHsExplicit=True))
print(' add Hs ')
m = Chem.AddHs(m)
print(Chem.MolToSmiles(m, allHsExplicit=True))
print(' remove H ')
em = Chem.EditableMol(m)
em.RemoveAtom(7)
print(Chem.MolToSmiles(em.GetMol(), allHsExplicit=True))
print(' add Hs ')
mm = Chem.AddHs(em.GetMol())
print(Chem.MolToSmiles(mm, allHsExplicit=True))
print(' update property cache ')
mm.UpdatePropertyCache()
print(Chem.MolToSmiles(mm, allHsExplicit=True))

output:

 load mol 
[OH][c]1[cH][cH][cH][cH][cH]1
 add Hs 
[H][O][c]1[c]([H])[c]([H])[c]([H])[c]([H])[c]1[H]
 remove H 
[H][O][c]1[c][c]([H])[c]([H])[c]([H])[c]1[H]
 add Hs 
[H][O][c]1[c][c]([H])[c]([H])[c]([H])[c]1[H]
 update property cache 
[H][O][c]1[c][c]([H])[c]([H])[c]([H])[c]1[H]

Pavel.




___
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