3-membered rings (Lexie)
Moving a3 ([*;r3:1]1~;@[*;r3:2]~;@[*;r3:3]1
) to the end so that it also picks up the epoxy C-O-C angle (which was previously covered by a28). Instead of adding to the end, could also change a28 to be not-3 (or 4-) membered ring atoms.
Chris Bayly also suggested the following generic parameters be added for 3-membered rings, to cover situations where you have r3-r3-not r3 and not r3 - r3 - not r3:
[*;r3:1]-[*;r3:2]-[*;!r3:3]
[*;!r3:1]-[*;r3:2]-[*;!r3:3]
Some of these are already covered with existing parameters, need to figure out how they interact with the suggested ones:
a4: [*;r3:1]~;@[*;r3:2]~;!@[*:3]
r3 atom - r3 atom - not in (same) ring
a5: [*:1]~;!@[*;r3:2]~;!@[*:3]
not in (same) ring - r3 atom - not in (same) ring
a6: [#1:1]-[*;r3:2]~;!@[*:3]
H - r3 atom - not in (same) ring
For now, it appears that these capture the desired chemistry based on inspecting the captured molecules, so I’m leaving them as is.
New parameter: Renamed a3 to a41, due to moving it to the end, though it sounds like the numbering is arbitrary so could probably keep the same name.
4-membered rings (Lexie)
Moving a7 ([#6r4:1]-;@[#6r4:2]-;@[#6r4:3]
) to the end, and changing the SMIRKS pattern to [*;r4:1]-;@[*;r4:2]-;@[*;r4:3]
so that it also catches heteroatoms which were previously included under a1, a18a, and a28. Instead of adding to the end, could also keep SMIRKS change but change a28 to be not-4 (or 3-) membered ring atoms and remove a18a (or make it specific to 5-membered rings).
Chris Bayly also suggested the following generic parameters be added for 3-membered rings, to cover situations where you have r4-r4-not r4 and not r4 - r4 - not r4:
[*;r4:1]-[*;r4:2]-[*;!r4:3]
[*;!r4:1]-[*;r4:2]-[*;!r4:3]
Our existing parameters are:
a8: [!#1:1]-[#6r4:2]-;!@[!#1:3]
a9: [!#1:1]-[#6r4:2]-;!@[#1:3]
Which are both too specific (central atom must be C) and too broad (first atom could be in-ring or out of ring). Need to figure out how to work these together for the right coverage. For now, I am trying two approaches:
keep a8 and a9, but replace the central atom with a wildcard so it can be any 4-membered ring atom.
Remove a8 and a9, and add two new parameters to the end: a44(
[*;!r4:1]~[*;r4:2]~[*;!r4:3]
) and a45 ([*;r4:1]@[*;r4:2]~;!@[*:3]
). I specified!r4
instead of!@
in a44 because specifiying!@
led to it not picking up fused rings. I left a45 with!@
because specifying!r4
led to it missing two attached (e.g. connected by a single, non-ring bond) 4-membered rings.
New parameter: Renamed a7 to a42, due to moving it to the end. In (2) above, added a44 and a45 for the respective SMIRKs patterns listed.
5-member rings (Lexie)
Currently we don’t have any internal r5-r5-r5 ring angles, so I made one. I just made a generic one: [*;r5:1]@[*;r5:2]@[*;r5:3]
but we may want to break it down further. Looking at the MSM parameter distribution, it seemed like the non-aromatic rings were clustered together, but the aromatic rings were all over the place in a way that made it not obvious how to split them.
New parameter: Added a new parameter to the end called a43.
I’ve also looked into splitting a13
, as it currently covers both fused and spiro rings. Splitting them into two separate categories seems clear via the MSM parameters, so I added a13a
([*;r6:1]~;@[*;r5;x4:2]~;@[*;r5;x2:3]
), which separates out the spiro rings. However, the split is less clear using Espaloma, as there is a lot of variation even within fused or spiro rings that is not present in the MSM data.
New parameter: Added a new parameter after a13 called a13a.
Additionally, five-membered rings with S typically have a 90-degree angle around the S, rather than ~105 for other atoms. As a result I added a new parameter a43a with the pattern [*;r5:1]@[#16;r5:2]@[*;r5:3]
.
New parameter: Added a parameter a43a after a43.
Issue with fused rings (Lexie)
One issue I have noticed with separating the small ring parameters is that there is no way to specify in a SMARTS pattern that a given atom is in a ring of a given size. The primitive r
indicates the size of the smallest ring the atom is a part of, but if it is part of a fused or spiro ring, this may lead to issues. The primitive R
denotes that an atom is part of a ring, but can only be modified by the number of ring bonds, not the size of the ring.
After a lot of experimenting I haven’t been able to find a solution that involves a single elegant SMARTS pattern. To get these right, we may have to add a number of very specific parameters, and increase coverage for fused rings.
Other parameters I’ve looked at (Lexie)
All parameters:
High-priority parameters: