AtomType Carbon_NonPolar [C&!$(C=[O,N,P,S])&!$(C#N)]creates a new name that can be used anywhere else in the FDef file that it would be useful to use this SMARTS. To reference an AtomType, just include its name in curly brackets. For example, this excerpt from an FDef file defines another atom type - Hphobe - which references the Carbon_NonPolar definition:
AtomType Carbon_NonPolar [C&!$(C=[O,N,P,S])&!$(C#N)]
AtomType Hphobe [{Carbon_NonPolar},c,s,S&H0&v2,F,Cl,Br,I]
Note that {Carbon_NonPolar} is used in the new AtomType
definition without any additional decoration (no square brackes or
recursive SMARTS markers are required).
Repeating an AtomType results in the two definitions being combined using the SMARTS "," (or) operator. Here's an example:
AtomType d1 [N&!H0] AtomType d1 [O&!H0]This is equivalent to:
AtomType d1 [N&!H0,O&!H0]Which is equivalent to the more efficient:
AtomType d1 [N,O;!H0]Note that these examples tend to use SMARTS's high-precendence and operator "&" and not the low precedence and ";". This can be important when AtomTypes are combined when they are repeated. The SMARTS "," operator is higher precedence than ";", so definitions that use ";" can lead to unexpected results.
It is also possible to define negative AtomType queries:
AtomType d1 [N,O,S] AtomType !d1 [H0]The negative query gets combined with the first to produce a definition identical to this:
AtomType d1 [!H0;N,O,S]Note that the negative AtomType is added to the beginning of the query.
DefineFeature HDonor1 [N,O;!H0]
Family HBondDonor
Weights 1.0
EndFeature
The first line of the feature definition includes the feature type and
the SMARTS string defining the feature.
AtomType tButylAtom [$([C;!R](-[CH3])(-[CH3])(-[CH3])),\
$([CH3](-[C;!R](-[CH3])(-[CH3])))]
is exactly equivalent to this one:
AtomType tButylAtom [$([C;!R](-[CH3])(-[CH3])(-[CH3])),$([CH3](-[C;!R](-[CH3])(-[CH3])))](though the first form is much easier to read!)
DefineFeature HDonor1 [O&!H0]
Family HBondDonor
Weights 1.0
EndFeature
DefineFeature HDonor1 [N&!H0]
Family HBondDonor
Weights 1.0
EndFeature
In this case both definitions of the HDonor1 feature type will
be active. This is functionally identical to:
DefineFeature HDonor1 [O,N;!H0]
Family HBondDonor
Weights 1.0
EndFeature
However the formulation of this feature definition
with a duplicated feature type is considerably less efficient and more
confusing than the simpler combined definition.