mosdef-hub / foyer

A package for atom-typing as well as applying and disseminating forcefields
https://foyer.mosdef.org
MIT License
119 stars 77 forks source link

Current and unimplemented SMARTS functionality #63

Open ctk3b opened 7 years ago

ctk3b commented 7 years ago

We currently do not support all of SMARTS' features. Here we're keeping track of which portions are supported.

Left column denotes current foyer support. See here for implemented SMARTS grammar.

SMARTS Atomic Primitives

Symbol Symbol name Atomic propertyrequirements Default
* wildcard any atom (no default)
a aromatic aromatic (no default)
A aliphatic aliphatic (no default)
D\<n> degree \<n> explicit connections exactly one
H\<n> total-H-count \<n> attached hydrogens exactly one1
h\<n> implicit-H-count \<n> implicit hydrogens at least one
R ring membership in \<n> SSSR rings any ring atom
r\<n> ring size in smallest SSSR ring of size \<n> any ring atom
v\<n> valence total bond order \<n> exactly one
X\<n> connectivity \<n> total connections exactly one
x\<n> ring connectivity \<n> total ring connections at least one
- \<n> negative charge -\<n> charge -1 charge (-- is -2, etc)
+\<n> positive charge +\<n> formal charge +1 charge (++ is +2, etc)
#n atomic number atomic number \<n> (no default)
@ chirality anticlockwise anticlockwise, default class
@@ chirality clockwise clockwise, default class
@\<c>\<n> chirality chiral class \<c> chirality \<n> (nodefault)
@\<c>\<n>? chiral or unspec chirality \<c>\<n> or unspecified (no default)
\<n> atomic mass explicit atomic mass unspecified mass

SMARTS Bond Primitives

Symbol Atomic property requirements
- single bond (aliphatic)
/ directional bond "up"1
\ directional bond "down"1
/? directional bond "up or unspecified"
\? directional bond "down or unspecified"
= double bond
# triple bond
: aromatic bond
~ any bond (wildcard)
@ any ring bond1

SMARTS Logical Operators

Symbol Expression Meaning
exclamation !e1 not e1
ampersand e1&e2 a1 and e2 (high precedence)
comma e1,e2 e1 or e2
semicolon e1;e2 a1 and e2 (low precedence)
mattwthompson commented 4 years ago

Am I missing the % operator from this list?