In this case, we're combining many angles for planar nitrogens into one SMIRKS. The atoms [#6X3,#6X2,#7X2+0] in the recursive part of the SMIRKS can be on atom 1 and/or 3. In this case I think you could just put the recursive part on atom 1 and leave atom 3 as a *. However, there are other patterns where it is less obvious if that works or not.
For example, on this proper torsion:
The recursive atoms could be 1 and 4. However, we could also imagine a molecule where the recursive atoms are NOT a part of the proper torsion, just neighbors helping you identifying the environment of these nitrogens. I don't know how to write a SMIRKS pattern that puts those recursive patterns on indexed or unindexed atoms.
Right now we NEVER use recursive SMIRKS. ChemPer won't make recursive SMIRKS. In fact, ChemicalEnvironments use the function _convert_embedded_smirks to switch recursive SMIRKS to normal ones.
I've thought about switching all non-indexed atoms in a SMIRKS to a recursive layer, but I'm not sure if that's universally a better option either.
As with many issues I'm going to leave on this repo, this is just an idea I've been thinking about, but not one I had time to explore.
These are used in smirnoff99frosst, such as this angle:
In this case, we're combining many angles for planar nitrogens into one SMIRKS. The atoms
[#6X3,#6X2,#7X2+0]
in the recursive part of the SMIRKS can be on atom 1 and/or 3. In this case I think you could just put the recursive part on atom 1 and leave atom 3 as a*
. However, there are other patterns where it is less obvious if that works or not. For example, on this proper torsion:The recursive atoms could be 1 and 4. However, we could also imagine a molecule where the recursive atoms are NOT a part of the proper torsion, just neighbors helping you identifying the environment of these nitrogens. I don't know how to write a SMIRKS pattern that puts those recursive patterns on indexed or unindexed atoms.
Right now we NEVER use recursive SMIRKS. ChemPer won't make recursive SMIRKS. In fact,
ChemicalEnvironments
use the function_convert_embedded_smirks
to switch recursive SMIRKS to normal ones.I've thought about switching all non-indexed atoms in a SMIRKS to a recursive layer, but I'm not sure if that's universally a better option either.