Quiet Filtering
Log output can be superfluous when using the OEFilter
object in a more complex program. Since all the log output is written to
the OEThrow object, the verbosity level can be lowered
by using the OEThrow.SetLevel
method. This example demonstrates setting the OEThrow
error level to OEErrorLevel_Warning. This will only allow
messages at the level of Warning or above to be emitted, thereby
silencing the OEFilter object’s logging output. The
-verbose option can be used to change the OEThrow
error level.
Command Line Interface
A description of the command line interface can be obtained by executing the program with the –help argument.
prompt> python quietfilter.py --help
will generate the following output:
Simple parameter list
filter options :
-filtertype : filter type
input/output options :
-in : Input filename
-out : Output filename
other options :
-verbose : Error level of messages
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.
#############################################################################
# Quietly filter a molecule file
#############################################################################
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")
oname = itf.GetString("-out")
ifs = oechem.oemolistream()
if not ifs.open(iname):
oechem.OEThrow.Fatal("Cannot open input file!")
ofs = oechem.oemolostream()
if not ofs.open(oname):
oechem.OEThrow.Fatal("Cannot create output file!")
ftype = oemolprop.OEGetFilterType(itf)
filt = oemolprop.OEFilter(ftype)
ver = itf.GetString("-verbose")
if ver == "Verbose":
oechem.OEThrow.SetLevel(oechem.OEErrorLevel_Verbose)
elif ver == "Info":
oechem.OEThrow.SetLevel(oechem.OEErrorLevel_Info)
elif ver == "Warning":
oechem.OEThrow.SetLevel(oechem.OEErrorLevel_Warning)
elif ver == "Error":
oechem.OEThrow.SetLevel(oechem.OEErrorLevel_Error)
else:
oechem.OEThrow.Fatal("Unrecognized error level!")
for mol in ifs.GetOEGraphMols():
if filt(mol):
oechem.OEWriteMolecule(ofs, mol)
#############################################################################
# INTERFACE
#############################################################################
InterfaceData = '''
!BRIEF [-verbose <verbose>] [-in] <input> [-out] <output>
!CATEGORY "input/output options :"
!PARAMETER -in
!ALIAS -i
!TYPE string
!REQUIRED true
!KEYLESS 1
!VISIBILITY simple
!BRIEF Input filename
!END
!PARAMETER -out
!ALIAS -o
!TYPE string
!REQUIRED true
!KEYLESS 2
!VISIBILITY simple
!BRIEF Output filename
!END
!END
!CATEGORY "other options :"
!PARAMETER -verbose
!TYPE string
!REQUIRED false
!DEFAULT Warning
!LEGAL_VALUE Verbose
!LEGAL_VALUE Info
!LEGAL_VALUE Warning
!LEGAL_VALUE Error
!VISIBILITY simple
!BRIEF Error level of messages
!DETAIL
Verbose
Info
Warning
Error
!END
!END
'''
if __name__ == "__main__":
sys.exit(main(sys.argv))
See also
OEFilterclassOEConfigureFilterParamsandOEConfigureFilterTypefunctionsOEGetFilterTypefunctionOEErrorHandler class
Examples
prompt> python quietfilter.py -in mcss.smi.gz -out .smi -filtertype Lead