Attach Molecular Properties as SD Data
The molecular properties calculated by OEFilter can be
attached as SD data to the molecule. The
OEFilter.SetSDTag method is used to attach the
calculated molecular properties to molecules passed to the filter object.
SD tag data corresponds to the tabular data functionality. The SD data tag names are exactly the same as the names found in the table header. The SD data values are exactly what is output in the data table. The only exceptions are the “SMILES”, “Name”, and “Filter” columns since this information can be obtained other ways.
This example demonstrates how to set the table output to the oenul
output stream to allow all properties to be attached as SD data, and write
the tabular data to an output in the OEFormat_SDF,
OEFormat_OEB, or the OEFormat_CSV
format. To specifically write to the OEFormat_CSV
format, also see the MolPropCSV example.
Warning
By default, only the properties up to the failing property will be attached
to each molecule. Use OEFilter.SetTable to force
every property to be attached as SD data. The same rule applies to
SD data as tabular output data,
only the properties specified in the filter file will
be attached as SD data.
Command Line Interface
A description of the command line interface can be obtained by executing the program with the –help argument.
prompt> python molpropsddata.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
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.
#############################################################################
# Attach molecular properties as SD data
#############################################################################
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!")
fmt = ofs.GetFormat()
if fmt not in [oechem.OEFormat_SDF, oechem.OEFormat_OEB, oechem.OEFormat_CSV]:
oechem.OEThrow.Fatal("Only SD, OEB, and CSV formats preserve SD data")
ftype = oemolprop.OEGetFilterType(itf)
filt = oemolprop.OEFilter(ftype)
ver = itf.GetInt("-verbose")
oechem.OEThrow.SetLevel(ver)
pwnd = False
filt.SetTable(oechem.oenul, pwnd)
filt.SetSDTag(True)
for mol in ifs.GetOEGraphMols():
filt(mol)
oechem.OEWriteMolecule(ofs, mol)
#############################################################################
# INTERFACE
#############################################################################
InterfaceData = '''
!BRIEF [-in] <input> [-out] <output> [-verbose] <verbose>
!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 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 molpropsddata.py -in drugs.sdf -out out_mpsd.sdf -filtertype Lead