Hi Nick,

Okay could take some explaining :-). I'll include the mailing lists for this answer incase others are interested but otherwise we can chat off list. 

Firstly - I believe the only time one needs absolute specification is if you are naming a molecule (or making a molecule from a name) and I guess it is also intuitive for visualisation. Okay there are lots of valid reasons to use CIP. I thought CIP was the answer to a problem this time last year but soon learned it wasn't what I needed. I do intend to update the CDK CIP with the code I wrote (http://johnmay.github.io/centres/) but absolute configuration is generally, tricky to implement , slow and has some inherent well known flaws.

Okay so enough about CIP what you want is the parity/sign/winding of your atoms in a given order. One can either compute this for a given order or adjust an existing parity for a different order.

Computing for a given ordering

- Firstly, have a look at this determinant algorithm to calculate the sign of a space: http://www.mdpi.org/molecules/papers/61100915/61100915.htm
- Given the 2D coordinates and +1/0/-1 for elevations above/on/below the plane (bases on wedge/hatch) it will give you whether those atoms go clockwise/anti clockwise depending on the sign of the determinant. Will also give you '0' (or close to) if there isn't enough information. 
- The beauty of this is, it will also work in 3D.
- The approach is nice as it eliminates the 'fixed Z' issue
- This is used for the CDK hash code - https://github.com/johnmay/cdk/blob/master/src/main/org/openscience/cdk/hash/stereo/Tetrahedral2DParity.java (package private class)
- The test will probably explain better with examples what going on - https://github.com/johnmay/cdk/blob/master/src/test/org/openscience/cdk/hash/stereo/Tetrahedral2DParityTest.java#L61

You can simply pass your coordinates in the order of the atoms (e.g. "unshared", "shared", "shared", "shared"). 

Adjusting the parity for a new ordering

Alternatively if you already have the parity for a given order (i.e. from MOL file) then using the permutation parity (see below) can determine if you arrange the atoms in a specified way what will the sign/parity/winding for that order be? The permutation parity will be odd or even - if the party is odd then the sign (of the tetrahedral centre) is inverted.

http://en.wikipedia.org/wiki/Parity_of_a_permutation
https://github.com/johnmay/cdk/blob/master/src/main/org/openscience/cdk/hash/stereo/BasicPermutationParity.java (odd/even parity calculation in the CDK)
During the hash the the permutation parity is computed - if the values are variant (i.e. different ligands) then the geometry is computed and multiplied by the permutation parity 
https://github.com/johnmay/cdk/blob/master/src/main/org/openscience/cdk/hash/stereo/GeometryEncoder.java#L108 

There's also code in the hash package for using the same methods to do double bond configurations.

Hope this helps,
J

On 22 Aug 2013, at 15:41, "Nick Vandewiele" <Nick.Vandewiele@UGent.be> wrote:

Hi John,
 
Thanks for your comments. They are very refreshing to me, so much that they need some more explanation. J
 
So, if I understand correctly, the 1st part of your answer (i.e. the edge reduction procedure) is a graph theoretical method to find bridgehead atoms in bridged systems. Let me neglect this part for now.
The 2nd part is the actual trans-linked bridge identification procedure. Conceptually I understand that the rotations round the 2 bridgehead atoms should be reverse of each other to get the cis-linked bridge, when iterating in the same order over the common ligands.
 
But, how do you translate the absolute configuration (R/S) of the bridgehead centers into the “relative parity” of one center to the other relative to the non-shared vertex? The norbornane example has two S absolute configurations, meaning that the prioritized ligands turn both in counterclockwise sense. If you add a hydroxyl group to one of the secondary carbons in the same cis-linked structure, then suddenly the absolute configuration of one of the bridgehead atoms changes from S to R.
 
Regards,
Nick
 
 
<image001.png><image004.png>
 
 
From: John May [mailto:johnmay@ebi.ac.uk] 
Sent: Wednesday, August 21, 2013 6:09 PM
To: Nick Vandewiele
Cc: cdkuser
Subject: Re: [Cdk-user] stereoisomer generation - identifying physically impossible, strained stereoisomers
 
Sounds cool, Not aware of any open alternatives I'm afraid but might have an idea.
 
One way I can think of is to iteratively collapse edges of the graph to find two adjacent tetrahedral centres which share 3 vertices. You could restrict this to only collapse cyclic parts - perhaps restricted to a given ring size which is defined asrigid. When you find two centres which share three vertices compute the relative parity of one (relative to the non-shared vertex). Then the relative parity of the other (again relative to the non-share vertex) but keep the ordering of the shared vertices the same. If the configuration is valid the parties should be inverse of each other. 
 
The only tricky part there is the collapsing but might not be too bad. Not a general method but reducing all cyclic edges where both vertices are not a bridge-head tetrahedral centre might be starting point.
 
<image001.png><image002.png>
Hope it helps,
J
 
On 21 Aug 2013, at 22:00, "Nick Vandewiele" <Nick.Vandewiele@UGent.be> wrote:


Hi,
 
I am working on a tool (using CDK) that generates all possible stereoisomers, based on a molecule with unspecified stereocenters. I don’t know of a free/open tool that does this (besides ChemAxon’s Marvin, which doesn’t have an API, I assume)
 
One of the problems is the following:
How can one identify if the 2 bonds connecting the bridgehead atoms to the bridge atom are at the same side of the plane? Think of norbornane with the bond from the bridgehead atom pointing upwards to the bridge atom, the bond from the other bridgehead pointing downwards. I can only use the absolute configurations (or stereo parities if you will) of the bridgehead atoms as the source of info to determine this.
 
One idea was the following: generating up/down bonds based on the order of the ligands (retrieved from the absolute configuration). Then, check if the bridge bonds are both up or both down. This is not enough: if you’re unlucky, the other bonds of the bridgehead atoms will have the up/down stereo specification, while the bridgehead bonds will be “flat”.
 
Any thoughts?
Nick
 
<image004.png>
 
 
<oledata.mso>------------------------------------------------------------------------------
Introducing Performance Central, a new site from SourceForge and 
AppDynamics. Performance Central is your source for news, insights, 
analysis and resources for efficient Application Performance Management. 
Visit us today!
http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk_______________________________________________
Cdk-user mailing list
Cdk-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cdk-user
 
<oledata.mso>