OESubSearchScreenType¶
Attention
This API is currently available in C++ and Python.
The OESubSearchScreen objects are typed bit-vectors. The type of a screen determines what kind of queries in mind the screen was designed.
In OEChem TK, a query molecule (OEQMolBase) can be constructed in three different ways.
Screen Type |
Description |
Initialize |
See Also |
---|---|---|---|
query read from MDL query file |
|||
query built from molecule |
|||
query built from SMARTS pattern |
The expression trees of the queries that are initialized from different sources
can be significantly different.
For example, the “language” of SMARTS is the most expressive one allowing
complex logical operations and recursive patterns.
A SMARTS such as [NX3;H2,H1;!$(NC=O)]
(primary or secondary amine that is not in amide)
defines a substructure that can not be expressed using MDL query features.
This also makes queries built from SMARTS the most complex ones.
The other major difference between SMARTS and MDL queries is the way how they
are expected to match aromaticity. For these reasons, OEChem TK provides three
different screen types especially designed for the three different ways that are
available to built query molecules using OEChem TK.
Note
For performance reason, OEChem TK does not support screening-based fast substructure
search with explicit hydrogens.
The OEMakeSubSearchTargetScreen
function automatically suppresses explicit
hydrogens of the molecule prior to the screen generation.
The OEMakeSubSearchQueryScreen
function will return false
if the query
molecule has any explicit hydrogen expression.
Default
The default screen type is OESubSearchScreenType_MDL
.
MDL
The following code snippet shows how to create
OESubSearchScreenType_MDL
screens.
qmol = oechem.OEQMol()
queryopts = oechem.OEMDLQueryOpts_Default | oechem.OEMDLQueryOpts_SuppressExplicitH
oechem.OEReadMDLQueryFile(ifs, qmol, queryopts)
qscreen = oechem.OESubSearchScreen()
if not oechem.OEMakeSubSearchQueryScreen(qscreen, qmol, oechem.OESubSearchScreenType_MDL):
print("query MDL screen cannot be generated")
tmol = oechem.OEGraphMol()
oechem.OESmilesToMol(tmol, "c1c[nH]cc1")
tscreen = oechem.OESubSearchScreen()
if not oechem.OEMakeSubSearchTargetScreen(tscreen, tmol, oechem.OESubSearchScreenType_MDL):
print("target MDL screen cannot be generated")
Molecule
The following code snippet shows how to create
OESubSearchScreenType_Molecule
screens.
The query molecule is created from a “real” molecule using
the BuildExpressions
method.
qmol = oechem.OEQMol()
oechem.OESmilesToMol(qmol, "c1cnccc1")
qmol.BuildExpressions(oechem.OEExprOpts_DefaultAtoms, oechem.OEExprOpts_DefaultBonds)
qscreen = oechem.OESubSearchScreen()
if not oechem.OEMakeSubSearchQueryScreen(qscreen, qmol, oechem.OESubSearchScreenType_Molecule):
print("query Molecule screen cannot be generated")
tmol = oechem.OEGraphMol()
oechem.OESmilesToMol(tmol, "c1ccc2c(c1)cccn2")
tscreen = oechem.OESubSearchScreen()
if not oechem.OEMakeSubSearchTargetScreen(tscreen, tmol, oechem.OESubSearchScreenType_Molecule):
print("target Molecule screen cannot be generated")
Note
It is highly recommended to use the
OEExprOpts_DefaultAtoms
andOEExprOpts_DefaultBonds
options when building the query molecule with theBuildExpressions
. When using other option combinations, the built query molecule might not be suitable for theOESubSearchScreenType_Molecule
screen type.If the input molecule has any explicit hydrogens, the
OESuppressHydrogens
function should be called prior to callingBuildExpressions
.
SMARTS
The following code snippet shows how to create
OESubSearchScreenType_SMARTS
screens.
qmol = oechem.OEQMol()
oechem.OEParseSmarts(qmol, "C1CC[O,N]CC1")
# generate screens
qscreen = oechem.OESubSearchScreen()
if not oechem.OEMakeSubSearchQueryScreen(qscreen, qmol, oechem.OESubSearchScreenType_SMARTS):
print("query SMARTS screen cannot be generated")
tmol = oechem.OEGraphMol()
oechem.OESmilesToMol(tmol, "C1CCOCC1")
tscreen = oechem.OESubSearchScreen()
if not oechem.OEMakeSubSearchTargetScreen(tscreen, tmol, oechem.OESubSearchScreenType_SMARTS):
print("target SMARTS screen cannot be generated")
Hint
In case of a query molecule of unknown source, the
OEIsComplementaryScreenType
function can be used to check
whether the query molecule is suited for a specific screen type.
See also
OEMakeSubSearchQueryScreen
andOEMakeSubSearchTargetScreen
functions
Code Example