On Tue, Jun 22, 2010 at 6:28 PM, Craig A. James <cja...@emolecules.com> wrote: > 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"?)
Ring system is often used. > 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. Correct. However, the 6 ring can be in the same ring system: http://imagebin.org/102279 This case remains problematic... Considering each ring system should not make the result different but would be a great performance enhancement for proteins etc. I now have the version you describe "working". It correctly gives the expected rings for relevant structures and the rings are canonical. Some examples: 6 ring, 1,4-bridged by 2 atoms: 3 rings tetrahedron: 4 rings cube: 6 rings ... fullerene c20: 12 rings fullurene c60: 32 rings All tests pass with aromaticity detection using the LSSR. The result for the new cubane structure is: # sssr = 6 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: 9 11 12 10 7 6 # lssr = 8 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: 9 11 12 10 7 6 ring: 4 3 6 7 2 1 The second 6 ring in the LSSR should not be there. If you make the criteria more strict, not enough rings are found. Most canonical ring sets (e.g. ESSR) use the SSSR (as minimum cycle basis) to generate the extended set. I'm not sure it is possible to directly compute a LSSR ring set for all cases... Tim > 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