Specific Molecular Properties
The OEFilter object table can also be used to retrieve specific molecular properties or filtering terms for which a free function does not exist. The number of molecular properties is large. In addition, some properties are more experimental than others. For these reasons free functions are not provided for everything that can be calculated. This example demonstrates how to extract a property, the number of Lipinski violations, from the OEFilter object molecular property table by writing the table to a oeosstream.
Warning
The exact number of fields the OEFilter object outputs depends on the filter file being used. The field will only be output if the filter rule is turned on. That is why this example will search the header line for the position of the “Lipinski violations” field. This key-value lookup is recommended for extracting specific fields from the filter table.
Command Line Interface
A description of the command line interface can be obtained by executing the program with the –help argument.
prompt> python specificmolprop.py --help
will generate the following output:
Simple parameter list
filter options :
-filtertype : filter type
input/output options :
-in : Input filename
-out : Output filename
Code
Download code
#!/usr/bin/env python
# (C) 2022 Cadence Design Systems, Inc. (Cadence)
# All rights reserved.
# TERMS FOR USE OF SAMPLE CODE The software below ("Sample Code") is
# provided to current licensees or subscribers of Cadence products or
# SaaS offerings (each a "Customer").
# Customer is hereby permitted to use, copy, and modify the Sample Code,
# subject to these terms. Cadence claims no rights to Customer's
# modifications. Modification of Sample Code is at Customer's sole and
# exclusive risk. Sample Code may require Customer to have a then
# current license or subscription to the applicable Cadence offering.
# THE SAMPLE CODE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED. OPENEYE DISCLAIMS ALL WARRANTIES, INCLUDING, BUT
# NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE AND NONINFRINGEMENT. In no event shall Cadence be
# liable for any damages or liability in connection with the Sample Code
# or its use.
#############################################################################
# Extract the number of Lipinski violations from the table output
#############################################################################
import sys
from openeye import oechem
from openeye import oemolprop
def main(argv=[__name__]):
itf = oechem.OEInterface(InterfaceData)
oemolprop.OEConfigureFilterParams(itf)
if not oechem.OEParseCommandLine(itf, argv):
oechem.OEThrow.Fatal("Unable to interpret command line!")
iname = itf.GetString("-in")
ifs = oechem.oemolistream()
if not ifs.open(iname):
oechem.OEThrow.Fatal("Cannot open input file!")
ftype = oemolprop.OEGetFilterType(itf)
filt = oemolprop.OEFilter(ftype)
ver = itf.GetInt("-verbose")
oechem.OEThrow.SetLevel(ver)
ostr = oechem.oeosstream()
pwnd = False
filt.SetTable(ostr, pwnd)
headers = ostr.str().split(b'\t')
ostr.clear() # remove the header row from the stream
for mol in ifs.GetOEGraphMols():
filt(mol)
fields = ostr.str().decode("UTF-8").split('\t')
ostr.clear() # remove this row from the stream
tmpdct = dict(zip(headers, fields))
print(mol.GetTitle(), tmpdct[b"Lipinski violations"])
#############################################################################
# INTERFACE
#############################################################################
InterfaceData = '''
!BRIEF [-in] <input> [-verbose] <verbose>
!CATEGORY "input/output options :"
!PARAMETER -in
!ALIAS -i
!TYPE string
!REQUIRED true
!KEYLESS 1
!VISIBILITY simple
!BRIEF Input filename
!END
!END
!CATEGORY "other options :"
!PARAMETER -verbose
!TYPE int
!REQUIRED false
!LEGAL_RANGE 2 5
!DEFAULT 4
!VISIBILITY simple
!BRIEF Error level of messages
!DETAIL
2 is Verbose
3 is Info
4 is Warning
5 is Error
!END
!END
'''
if __name__ == "__main__":
sys.exit(main(sys.argv))
See also
OEFilterclassOEConfigureFilterParamsandOEConfigureFilterTypefunctionsOEGetFilterTypefunction
Examples
prompt> python specificmolprop.py -in mcss.smi.gz -filtertype Lead