Source code for mordred.AcidBase
"""Acid Base descriptor.
References:
* http://cdk.github.io/cdk/1.5/docs/api/org/openscience/cdk/qsar/descriptors/molecular/AcidicGroupCountDescriptor.html
* http://cdk.github.io/cdk/1.5/docs/api/org/openscience/cdk/qsar/descriptors/molecular/BasicGroupCountDescriptor.html
""" # noqa: E501
from abc import abstractproperty
from rdkit import Chem
from ._base import Descriptor
__all__ = ("AcidicGroupCount", "BasicGroupCount",)
class SmartsCountBase(Descriptor):
__slots__ = "_mol",
@classmethod
def preset(cls):
yield cls()
def _create_smarts(self):
s = ",".join("$(" + s + ")" for s in self.SMARTS)
self._mol = Chem.MolFromSmarts("[" + s + "]")
return self._mol
@abstractproperty
def SMARTS(self):
pass
def __str__(self):
return self._name
def parameters(self):
return ()
def calculate(self):
pat = getattr(self, "_mol", None) or self._create_smarts()
return len(self.mol.GetSubstructMatches(pat))
rtype = int
_extra_docs = "SMARTS",
[docs]class AcidicGroupCount(SmartsCountBase):
r"""acidic group count descriptor."""
__slots__ = ()
[docs] def description(self):
return "acidic group count"
_name = "nAcid"
SMARTS = (
"[O;H1]-[C,S,P]=O",
"[*;-;!$(*~[*;+])]",
"[NH](S(=O)=O)C(F)(F)F",
"n1nnnc1",
)
[docs]class BasicGroupCount(SmartsCountBase):
r"""basic group count descriptor."""
__slots__ = ()
[docs] def description(self):
return "basic group count"
_name = "nBase"
SMARTS = (
"[NH2]-[CX4]",
"[NH](-[CX4])-[CX4]",
"N(-[CX4])(-[CX4])-[CX4]",
"[*;+;!$(*~[*;-])]",
"N=C-N",
"N-C=N",
)