Source code for mordred.AcidBase
'''
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
'''
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__ = ()
_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__ = ()
_name = 'nBase'
SMARTS = (
'[NH2]-[CX4]',
'[NH](-[CX4])-[CX4]',
'N(-[CX4])(-[CX4])-[CX4]',
'[*;+;!$(*~[*;-])]',
'N=C-N',
'N-C=N',
)