On 6/21/10 2:49 PM, Tim Vandermeersch wrote:

>> The LSSR algorithm is simple:
>>
>>   for S in (3, 4, 5, 6, ...)
>>     find all rings of size S, add to LSSR
>>     if all cyclic atoms and bonds are included in at
>>       least one ring in the LSSR, quit
>
> This would give 10 rings for cubane with a 6 ring attached:
> (structure image: http://imagebin.org/102164)
>
>      ring: 1 2 3 4
>      ring: 5 6 3 4
>      ring: 1 4 5 8
>      ring: 7 8 5 6
>      ring: 2 3 6 7
>      ring: 1 2 7 8
>      ring: 7 2 1 4 5 6
>      ring: 1 4 5 6 3 2
>      ring: 4 3 6 7 2 1
>      ring: 9 10 11 12 13 14
>
> The first three 6 rings are found in the cubane part of the molecule.
> I know these rings are unexpected but they are found and should be
> removed (for use in substructure search).
>
> The algorithm would be:
>
>    for S in (3, 4, 5, 6, ...)
>      find all rings of size S, add to LSSR if not contained in the
> union of all smaller rings
>      if all cyclic atoms and bonds are included in at
>        least one ring in the LSSR, quit
>
> The first 3 6-rings are now found in the union of the 3-rings. The
> final, attached cyclohexane ring is still found. This might not be
> important for aromaticity but having a single canonical ring set is
> better IMHO. The small change shouldn't affect the results you
> require.

Sorry, I left out the first step of the algorithm.  Before you do any SSSR or 
LSSR, you always divide the molecule into "ring groups."  You (conceptually) 
remove all non-ring bonds, and end up with a set of disconnected structures.  
Each of these is a "ring group" that has its own SSSR and LSSR.  The molecule's 
SSSR and LSSR are just the union of the sets of all of the ring groups.  (Does 
anyone know a more formal name from chemistry or mathematics for "ring groups"?)

In the example you provided (cubane with a cyclohexane attached by a single 
bond), there are two ring groups.  The LSSR would have six rings of size four 
and one of size six.

This always greatly simplifies ring analysis because when you're doing kekule 
assignment and aromaticity, you only work with one ring group at a time.  The 
bonds of one ring group can't affect another ring group.

The new kekule.cpp code works this way (although don't explicitely say so).  
The way it "walks" outward across a ring group guarantees that it will finish 
one ring group completely before starting on the next ring group.

Craig

------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo
_______________________________________________
OpenBabel-Devel mailing list
OpenBabel-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbabel-devel

Reply via email to