Molecule symmetry

User 9b067d2e85

16-12-2011 19:44:09

I'm not sure if this is the correct section but I have a symmetry API question.


I'm trying to detect symetric molecules and am using the isSymmetric() func, but it only seems to work on molecules that have multiple planes of symmetry. However it does not detect achiral symmetry such as with:


C[C@H](C[C@H](C)O)O


C1[C@@H](CC[C@H](C1)O)N


C[C@@H]1CN(C[C@@H](S1)C)C


 


Is there another symmetry function to solve this?


Molecule mol = MolImporter.importMol("C[C@H](C[C@H](C)O)O");

if (mol.isSymmetric())

// do something

ChemAxon 42004978e8

17-12-2011 09:42:06

Hi,


I moved this topic to the appropriate forum.


Bye,


Robert

ChemAxon 25dcd765a3

19-12-2011 12:24:38

Hi,


Currently we do not support symmetry group calculations in molecule.


I would suggest to get the enantiomer of the molecule:


Molecule enantiomer = Stereochemistry.getEnantiomer(m);

and compare the original and the enantiomer molecules using some format, which generates unique string: inchi, inchikey or unique smiles.

User 870ab5b546

20-12-2011 04:23:42

How exactly does the getEnantiomer() method work?  Does it return the original molecule if the structure is achiral? What if there are two stereocenters, but only one is specified -- e.g., C[C@@H](Cl)CC(C)Br?  What if the structure is a 3D chiral conformer of an achiral compound, e.g., 1,2-ethanediol in the gauche conformation?

ChemAxon 25dcd765a3

21-12-2011 09:44:05

Hi,


getEnantiomer() returns the mirror image of the molecule.


If the structure is achiral it returns the mirror image of the achiral molecule which is the same as the original structure (it can be translated, rotated to the original structure).


If just one stereocenter defined the stereocenter is changed to the opposite value.


If 3D chiral conformer of an achiral compound is given, returns the mirror image which is a 3D achiral compound.

User 870ab5b546

03-01-2012 19:34:07

Thanks.  All that is the desired behavior.  Essentially, you're getting the mirror image, which will be the enantiomer only if the structure representation is chiral.


I see that Stereochemistry.getEnantiomer() takes a MoleculeGraph and returns a MoleculeGraph, which I will have to cast back to a Molecule if I want a Molecule.  Can you add a method that takes a Molecule and returns a Molecule?  If it can't have the name "getEnantiomer", I suggest "getMirror" or just "mirror".


And I *still* think that it's best to make getEnantiomer() (or getMirror()) a dynamic method in the Molecule and MoleculeGraph classes.

ChemAxon 25dcd765a3

05-01-2012 11:43:46

We will modify the method to get the same type of structure as it is given.


So if you pass a Molecule object to the method it will return Molecule.


Actually Molecule and MoleculeGraph is huge so we are focusing to shrink it.

User 870ab5b546

05-01-2012 15:32:42










volfi wrote:

We will modify the method to get the same type of structure as it is given.


So if you pass a Molecule object to the method it will return Molecule.


Actually Molecule and MoleculeGraph is huge so we are focusing to shrink it.



I understand, but I still think it's the most intuitive place for it.


A better name for the method would be mirror() or getMirrorImage().  You're not necessarily getting the enantiomer.

ChemAxon 25dcd765a3

10-01-2012 12:26:48

Thank you for the comment we will mention it on the APIdoc and later if the Molecule size is small enough we will put thi to the Molecule API.

User 81a38f9467

17-11-2012 00:17:10

I am trying to categorize compounds into asymmetric and symmetric.  Consider two structures:  


Structure A:  CCC(C)N1C[C@H](C)S[C@H](C)C1


Structure B:  [H][C@]12CC[C@]([H])(CC(C)C1)N2


Both molecules contain two defined stereogenic centers and one undefined stereogenic center.  For both molecules, getEnantiomer() returns a structure which is identical to the input, suggesting that they are both symmetric.   But:  Molecule A is asymmetric and only Molecule B is symmetric.


Is there a way to distinguish asymmetric structures (like A) from symmetric structures (like B)?

User 870ab5b546

17-11-2012 04:08:13

The way to do it is to enumerate the stereoisomers of A and see if any of them are nonidentical mirror images.  See this page.  Here's the Java code for generating the stereoisomers:


    public static Molecule[] enumerateStereo(Molecule cpd) {
Molecule[] stereoisomers = null;
try {
final StereoisomerPlugin plugin = new StereoisomerPlugin();
plugin.setMolecule(cpd);
plugin.setStereoisomerismType(StereoisomerPlugin.BOTH);
plugin.setProtectTetrahedralStereo(true);
plugin.setProtectDoubleBondStereo(true);
plugin.run();
stereoisomers = plugin.getStereoisomers();
} catch (PluginException e) {
stereoisomers = new Molecule[] {cpd};
} // try
return stereoisomers;
} // enumerateStereo(Molecule)

User 81a38f9467

21-11-2012 00:09:44

Thank you for the suggestion!  Generating the stereoisomers and then comparing them did the trick.