Re: [Rdkit-discuss] Fwd: Possible stereo centers incorrectly assigned?

2015-09-08 Thread Michał Nowotka
Thank you all for your helpful answers. I will update Beaker code,
deploy it tomorrow and see if someone comes up with another example
but like Curt I think that the modification suggested by John should
work well. Thanks again!

Michał

On Tue, Sep 8, 2015 at 4:38 PM, Curt Fischer  wrote:
>
> Hi John, Michal, and everyone,
>
> I've been following this discussion with interest and wrote a code snippet
> to test out John M.'s idea to access the '_CIPCode' property of atoms.  The
> results of doing are opposite to the result of the original getStereoInfo()
> function, and thus are in accord with Michal's reports of JChem output.  So
> for the simple test case of ephedrine all is well, but I'd be interested in
> hearing stories about what goes wrong in more complex cases.
>
>> from rdkit import Chem
>
>
>>
>>
>> # old function from Michal Nowotka
>> def getStereoInfo(smiles):
>> ret = []
>> mol = Chem.MolFromSmiles(smiles)
>> Chem.AssignStereochemistry(mol, flagPossibleStereoCenters=True,
>> force=True)
>> for atom in mol.GetAtoms():
>> stereo = str(atom.GetChiralTag())
>> atomIndex = atom.GetIdx()
>> if str(atom.GetChiralTag()) != "CHI_UNSPECIFIED":
>> if stereo == "CHI_TETRAHEDRAL_CW":
>> chirality = "R"
>> elif stereo == "CHI_TETRAHEDRAL_CCW":
>> chirality = "S"
>> else:
>> chirality = "R/S"
>> ret.append({"atomIndex":atomIndex,"chirality":chirality})
>> return ret
>
>
>>
>>
>> # new function as suggested by John M.
>> def get_stereo_info_new(smiles):
>> # import the molecule into rdkit
>> mol = Chem.MolFromSmiles(smiles)
>>
>> # find chiral centers
>> Chem.FindMolChiralCenters(mol)
>>
>> # recover info on chiral centers
>> chiral_centers = {}
>> for atom in mol.GetAtoms():
>> try:
>> stereo = str(atom.GetProp('_CIPCode'))
>> chiral_centers[atom.GetIdx()] = stereo
>> except KeyError:
>> pass
>> return chiral_centers
>
>
>>
>>
>> # compare the functions on a chiral molecule
>> ephedrine = 'O[C@H](c1c1)[C@@H](NC)C'
>> print getStereoInfo(ephedrine)
>> print get_stereo_info_new(ephedrine)
>
>
> [{'chirality': 'S', 'atomIndex': 1}, {'chirality': 'R', 'atomIndex': 8}]
> {8: 'S', 1: 'R'}
>
>
> On Tue, Sep 8, 2015 at 7:19 AM, John M  wrote:
>>
>> Yes, but the ordering is relative to some ranking. I think you're
>> accessing "local parity" here, see slide 8
>> http://baoilleach.blogspot.co.uk/2015/08/the-whole-of-cheminformatics-best.html.
>>
>> Try accessing the "_CIPCode" prop on the atoms. Note there are still
>> problems.
>>
>> J
>>
>>
>> --
>>
>> ___
>> 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
>

--
___
Rdkit-discuss mailing list
Rdkit-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss


[Rdkit-discuss] Fwd: Possible stereo centers incorrectly assigned?

2015-09-08 Thread Curt Fischer
Hi John, Michal, and everyone,

I've been following this discussion with interest and wrote a code snippet
to test out John M.'s idea to access the '_CIPCode' property of atoms.  The
results of doing are opposite to the result of the original getStereoInfo()
function, and thus are in accord with Michal's reports of JChem output.  So
for the simple test case of ephedrine all is well, but I'd be interested in
hearing stories about what goes wrong in more complex cases.

from rdkit import Chem



>
> # old function from Michal Nowotka
> def getStereoInfo(smiles):
> ret = []
> mol = Chem.MolFromSmiles(smiles)
> Chem.AssignStereochemistry(mol, flagPossibleStereoCenters=True,
> force=True)
> for atom in mol.GetAtoms():
> stereo = str(atom.GetChiralTag())
> atomIndex = atom.GetIdx()
> if str(atom.GetChiralTag()) != "CHI_UNSPECIFIED":
> if stereo == "CHI_TETRAHEDRAL_CW":
> chirality = "R"
> elif stereo == "CHI_TETRAHEDRAL_CCW":
> chirality = "S"
> else:
> chirality = "R/S"
> ret.append({"atomIndex":atomIndex,"chirality":chirality})
> return ret



>
> # new function as suggested by John M.
> def get_stereo_info_new(smiles):
> # import the molecule into rdkit
> mol = Chem.MolFromSmiles(smiles)
>
> # find chiral centers
> Chem.FindMolChiralCenters(mol)
>
> # recover info on chiral centers
> chiral_centers = {}
> for atom in mol.GetAtoms():
> try:
> stereo = str(atom.GetProp('_CIPCode'))
> chiral_centers[atom.GetIdx()] = stereo
> except KeyError:
> pass
> return chiral_centers



>
> # compare the functions on a chiral molecule
> ephedrine = 'O[C@H](c1c1)[C@@H](NC)C'
> print getStereoInfo(ephedrine)
> print get_stereo_info_new(ephedrine)


[{'chirality': 'S', 'atomIndex': 1}, {'chirality': 'R', 'atomIndex': 8}]
{8: 'S', 1: 'R'}


On Tue, Sep 8, 2015 at 7:19 AM, John M  wrote:

> Yes, but the ordering is relative to some ranking. I think you're
> accessing "local parity" here, see slide 8
> http://baoilleach.blogspot.co.uk/2015/08/the-whole-of-cheminformatics-best.html
> .
>
> Try accessing the "_CIPCode" prop on the atoms. Note there are still
> problems.
>
> J
>
>
> --
>
> ___
> 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