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" <[email protected]> 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:[email protected]]
> 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" <[email protected]> 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
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/cdk-user
>
> <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
[email protected]
https://lists.sourceforge.net/lists/listinfo/cdk-user