Re: [Rdkit-discuss] Question about generating configurational isomerism
Worked great! Thanks for your help, Pavel. On Sat, Jan 28, 2017 at 1:52 AM Pavel Polishchuk wrote: > Hi Jacob, > > you need to call AssignStereochemistry with force=True parameter > Chem.AssignStereochemistry(mol, force=True) > > Pavel. > > On 01/28/2017 05:43 AM, Jacob Durrant wrote: > > I'm trying to set the configuration of a molecule with a double bond, but > it doesn't seem to be working. Here's my code: > > === > from rdkit.Chem import AllChem > from rdkit import Chem > from rdkit.Chem.rdchem import BondStereo > > # Make a molecule with a double bond, no stereo specified (cis or trans) > smi = "NC(O)=C(C)S" > mol = Chem.MolFromSmiles(smi) > > # Get that double bond > double_bonds = [b.GetIdx() for b in mol.GetBonds() if > b.GetBondTypeAsDouble() == 2 and b.GetStereo() is BondStereo.STEREONONE] > double_bond_index = double_bonds[0] > double_bond = mol.GetBondWithIdx(double_bond_index) > > # It's stereo is STEREONONE at this point > print double_bond.GetStereo() > > # Get the bonds connected to the first and second atoms > first_atom = double_bond.GetBeginAtom() > bonds_connected_to_first_atom = first_atom.GetBonds() > > second_atom = double_bond.GetEndAtom() > bonds_connected_to_second_atom = second_atom.GetBonds() > > # Get the indecies of those bonds, removing the central double bond. > bonds_connected_to_first_atom_indecies = [b.GetIdx() for b in > first_atom.GetBonds()] > bonds_connected_to_first_atom_indecies.remove(double_bond_index) > > bonds_connected_to_second_atom_indecies = [b.GetIdx() for b in > second_atom.GetBonds()] > bonds_connected_to_second_atom_indecies.remove(double_bond_index) > > # Set the directions of the for bonds connected to this double bond. > > mol.GetBondWithIdx(bonds_connected_to_first_atom_indecies[0]).SetBondDir(Chem.BondDir.ENDUPRIGHT) > > mol.GetBondWithIdx(bonds_connected_to_first_atom_indecies[1]).SetBondDir(Chem.BondDir.ENDDOWNRIGHT) > > > mol.GetBondWithIdx(bonds_connected_to_second_atom_indecies[0]).SetBondDir(Chem.BondDir.ENDUPRIGHT) > > mol.GetBondWithIdx(bonds_connected_to_second_atom_indecies[1]).SetBondDir(Chem.BondDir.ENDDOWNRIGHT) > > # I assume this should set the stereochemistry. But it doesn't appear to. > # It's stereo is STEREONONE at this point > print double_bond.GetStereo() > Chem.AssignStereochemistry(mol) > # Still STEREONONE > print double_bond.GetStereo() > > # And when I print out the smiles, no stereochemistry is given. > print Chem.MolToSmiles(mol, isomericSmiles=True, canonical=True) > # CC(S)=C(N)O > === > > Any suggestions? Thanks! > > ~Jacob > -- > > Sent from my mobile. > > > -- > Check out the vibrant tech community on one of the world's most > engaging tech sites, SlashDot.org! http://sdm.link/slashdot > > > > ___ > Rdkit-discuss mailing > listRdkit-discuss@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/rdkit-discuss > > > > -- > Check out the vibrant tech community on one of the world's most > engaging tech sites, SlashDot.org! http://sdm.link/slashdot > ___ > Rdkit-discuss mailing list > Rdkit-discuss@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/rdkit-discuss > -- Sent from my mobile. -- Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot___ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss
Re: [Rdkit-discuss] Question about generating configurational isomerism
Hi Jacob, you need to call AssignStereochemistry with force=True parameter Chem.AssignStereochemistry(mol, force=True) Pavel. On 01/28/2017 05:43 AM, Jacob Durrant wrote: I'm trying to set the configuration of a molecule with a double bond, but it doesn't seem to be working. Here's my code: === from rdkit.Chem import AllChem from rdkit import Chem from rdkit.Chem.rdchem import BondStereo # Make a molecule with a double bond, no stereo specified (cis or trans) smi = "NC(O)=C(C)S" mol = Chem.MolFromSmiles(smi) # Get that double bond double_bonds = [b.GetIdx() for b in mol.GetBonds() if b.GetBondTypeAsDouble() == 2 and b.GetStereo() is BondStereo.STEREONONE] double_bond_index = double_bonds[0] double_bond = mol.GetBondWithIdx(double_bond_index) # It's stereo is STEREONONE at this point print double_bond.GetStereo() # Get the bonds connected to the first and second atoms first_atom = double_bond.GetBeginAtom() bonds_connected_to_first_atom = first_atom.GetBonds() second_atom = double_bond.GetEndAtom() bonds_connected_to_second_atom = second_atom.GetBonds() # Get the indecies of those bonds, removing the central double bond. bonds_connected_to_first_atom_indecies = [b.GetIdx() for b in first_atom.GetBonds()] bonds_connected_to_first_atom_indecies.remove(double_bond_index) bonds_connected_to_second_atom_indecies = [b.GetIdx() for b in second_atom.GetBonds()] bonds_connected_to_second_atom_indecies.remove(double_bond_index) # Set the directions of the for bonds connected to this double bond. mol.GetBondWithIdx(bonds_connected_to_first_atom_indecies[0]).SetBondDir(Chem.BondDir.ENDUPRIGHT) mol.GetBondWithIdx(bonds_connected_to_first_atom_indecies[1]).SetBondDir(Chem.BondDir.ENDDOWNRIGHT) mol.GetBondWithIdx(bonds_connected_to_second_atom_indecies[0]).SetBondDir(Chem.BondDir.ENDUPRIGHT) mol.GetBondWithIdx(bonds_connected_to_second_atom_indecies[1]).SetBondDir(Chem.BondDir.ENDDOWNRIGHT) # I assume this should set the stereochemistry. But it doesn't appear to. # It's stereo is STEREONONE at this point print double_bond.GetStereo() Chem.AssignStereochemistry(mol) # Still STEREONONE print double_bond.GetStereo() # And when I print out the smiles, no stereochemistry is given. print Chem.MolToSmiles(mol, isomericSmiles=True, canonical=True) # CC(S)=C(N)O === Any suggestions? Thanks! ~Jacob -- Sent from my mobile. -- Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot ___ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss -- Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot___ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss
[Rdkit-discuss] Question about generating configurational isomerism
I'm trying to set the configuration of a molecule with a double bond, but it doesn't seem to be working. Here's my code: === from rdkit.Chem import AllChem from rdkit import Chem from rdkit.Chem.rdchem import BondStereo # Make a molecule with a double bond, no stereo specified (cis or trans) smi = "NC(O)=C(C)S" mol = Chem.MolFromSmiles(smi) # Get that double bond double_bonds = [b.GetIdx() for b in mol.GetBonds() if b.GetBondTypeAsDouble() == 2 and b.GetStereo() is BondStereo.STEREONONE] double_bond_index = double_bonds[0] double_bond = mol.GetBondWithIdx(double_bond_index) # It's stereo is STEREONONE at this point print double_bond.GetStereo() # Get the bonds connected to the first and second atoms first_atom = double_bond.GetBeginAtom() bonds_connected_to_first_atom = first_atom.GetBonds() second_atom = double_bond.GetEndAtom() bonds_connected_to_second_atom = second_atom.GetBonds() # Get the indecies of those bonds, removing the central double bond. bonds_connected_to_first_atom_indecies = [b.GetIdx() for b in first_atom.GetBonds()] bonds_connected_to_first_atom_indecies.remove(double_bond_index) bonds_connected_to_second_atom_indecies = [b.GetIdx() for b in second_atom.GetBonds()] bonds_connected_to_second_atom_indecies.remove(double_bond_index) # Set the directions of the for bonds connected to this double bond. mol.GetBondWithIdx(bonds_connected_to_first_atom_indecies[0]).SetBondDir(Chem.BondDir.ENDUPRIGHT) mol.GetBondWithIdx(bonds_connected_to_first_atom_indecies[1]).SetBondDir(Chem.BondDir.ENDDOWNRIGHT) mol.GetBondWithIdx(bonds_connected_to_second_atom_indecies[0]).SetBondDir(Chem.BondDir.ENDUPRIGHT) mol.GetBondWithIdx(bonds_connected_to_second_atom_indecies[1]).SetBondDir(Chem.BondDir.ENDDOWNRIGHT) # I assume this should set the stereochemistry. But it doesn't appear to. # It's stereo is STEREONONE at this point print double_bond.GetStereo() Chem.AssignStereochemistry(mol) # Still STEREONONE print double_bond.GetStereo() # And when I print out the smiles, no stereochemistry is given. print Chem.MolToSmiles(mol, isomericSmiles=True, canonical=True) # CC(S)=C(N)O === Any suggestions? Thanks! ~Jacob -- Sent from my mobile. -- Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot___ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss