MobleyLab / chemper

Repository for Chemical Perception Sampling Tools
MIT License
19 stars 10 forks source link

Recursive SMIRKS patterns should be considered #88

Open bannanc opened 5 years ago

bannanc commented 5 years ago

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:

<Angle smirks="[*:1]~[#7X3$(*~[#6X3,#6X2,#7X2+0]):2]~[*:3]" angle="120." id="a19" k="140.0"/>

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:

<Proper smirks="[*:1]-[#7X3$(*-[#6X3,#6X2])r5:2]-@[#7X3$(*-[#6X3,#6X2])r5:3]~[*:4]" id="t127" idivf1="1" k1="3.600" periodicity1="2" phase1="180.0"/>

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.