Hi Brian,
On Tue, Aug 30, 2016 at 6:41 AM, Bennion, Brian <[email protected]> wrote:
>
> I have seemed to hit a wall with what seems like a simple task.
>
> First, I have ~9800 compounds that have a primary amine for a reaction
> that I am completing in rdkit.
> About 250 of those compounds have a tertiary alkylamine that is most
> likely protonated at pH 7.4.
>
> The dataset is a set of smiles strings for which the tertiary amine is not
> protonated. I thought this would be easy enough to fix, just use a smarts
> substructure search, set the formal charge on any hits to one and then
> AddHs, sanitize, embed, and then minimize.
>
> Well, what I get is [N+] with all the other carbons with explicit atoms in
> the resulting smiles files, and if output to sdf I get a positively
> charged diradical positioned at the tertiary nitrogen.
>
Yes, what's happening here is that AddHs() is using the implicit valence on
the N atoms to determine how many Hs to add. Since the implicit valence is
not recomputed when you set the formal charge, you end up with the wrong
number of Hs attached to the N. A call to UpdatePropertyCache() will fix
this:
n [16]: m = Chem.MolFromSmiles('CN')
In [17]: AllChem.CalcMolFormula(m)
Out[17]: 'CH5N'
In [18]: m.GetAtomWithIdx(1).SetFormalCharge(1)
In [19]: AllChem.CalcMolFormula(m)
Out[19]: 'CH5N+'
In [20]: m.UpdatePropertyCache()
In [21]: AllChem.CalcMolFormula(m)
Out[21]: 'CH6N+'
In [22]: mh = Chem.AddHs(m)
In [24]: mh.GetAtomWithIdx(1).GetDegree()
Out[24]: 4
Thank you for such a great tool
>
You're welcome! Thanks for saying thanks. :-)
Hope this helps,
-greg
------------------------------------------------------------------------------
_______________________________________________
Rdkit-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss