Source code for mmtfPyspark.webfilters.chemicalStructureQuery
#!/user/bin/env python
'''chemicalStructureQuery.py
This filter returns entries that contain groups with specified chemical structures (SMILES string).
This chemical structure query supports for query: exact, similar, substructure, and superstructure.
For details see references.
References
----------
- `Chemical Structure Search <http://www.rcsb.org/pdb/staticHelp.do?p=help/advancedsearch/chemSmiles.html>`_
'''
__author__ = "Mars (Shih-Cheng) Huang"
__maintainer__ = "Mars (Shih-Cheng) Huang"
__email__ = "marshuang80@gmail.com"
__version__ = "0.2.0"
__status__ = "Done"
from mmtfPyspark.webfilters import AdvancedQuery
[docs]class ChemicalStructureQuery(object):
EXACT = "Exact"
SIMILAR = "Similar"
SUBSTRUCTURE = "Substructure"
SUPERSTRUCTURE = "Superstructure"
def __init__(self, smiles, queryType="Substructure", percentSimilarity=0.0):
'''Constructor to setup filter that matches any entry with at least one
chemical component that matches the specified SMILES string using the
specified query type.
For details see:
`Chemical Structure Search <http://www.rcsb.org/pdb/staticHelp.do?p=help/advancedsearch/chemSmiles.html>`_
Parameters
----------
smiles : str
SMILES string representing chemical structure
queryType : str
One of the 4 supported types
percentSimilarity : float
percent similarity for similarity search. This parameter is ignored
for all other query types [default: 0.0]
'''
if not (queryType == self.EXACT
or queryType == self.SIMILAR
or queryType == self.SUBSTRUCTURE
or queryType == self.SUPERSTRUCTURE):
raise Exception("Invalid search type: %s" % queryType)
query = "<orgPdbQuery>" + \
"<queryType>org.pdb.query.simple.ChemSmilesQuery</queryType>" + \
"<smiles>" + smiles + "</smiles>" + \
"<searchType>" + queryType + "</searchType>" + \
"<similarity>" + str(percentSimilarity) + "</similarity>" + \
"<polymericType>Any</polymericType>" + \
"</orgPdbQuery>"
self.filter = AdvancedQuery(query)
def __call__(self, t):
return self.filter(t)