如何使用 rdkit 在 Python 中确定任何分子的链烷烃 CH3、CH2 和 CH 基团的数量?

How can I determine the number of paraffinic CH3, CH2 and CH groups for any molecule with rdkit in Python?

我正在尝试使用 Python 中的 rdkit 包来确定任何分子中石蜡基团的数量。最初我开始确定石蜡 CH3 基团,我必须将其扩展到石蜡 CH2 和石蜡 CH 基团。

MWE 中,我试图通过匹配的子结构来确定这一点,但它没有按预期工作。我也尝试为此搜索 Fragments 函数,但它不可用。

如何确定 Python 中具有 rdkit 的任何分子的链烷烃 CH3、CH2 和 CH 基团的数量?

MWE

from rdkit import Chem
from rdkit.Chem import Descriptors, Draw, Fragments

smiles_n_decane = 'CCCCCCCCCC'
smiles_branched = 'CCC(C)(C)C(C)CC(C)(C)C'
smiles_carboxylic_acid = 'C1=CC=C2C(=C1)C(C3=CC=CC=C3O2)C(=O)O' # Xanthene-9-carboxylic acid

m =  Chem.MolFromSmiles(smiles_branched)

print m.HasSubstructMatch(Chem.MolFromSmiles('[CH3]'))
print Fragments.fr_Al_COO(m)

问题示例

对于下面给出的分子(2,2,4,5,5-五甲基庚烷):

代码应该给我以下输出:

您应该使用 SMARTS 进行子结构查询。此外,如果查询匹配 HasSubstructMatch()

GetSubstructMatches() 将 return 所有子结构匹配,而不仅仅是 return 布尔值
ch3 = Chem.MolFromSmarts('[CH3]')
ch2 = Chem.MolFromSmarts('[CH2]')
ch1 = Chem.MolFromSmarts('[CH]')

print("no. of CH3 groups:", len(m.GetSubstructMatches(ch3)))
print("no. of CH2 groups:", len(m.GetSubstructMatches(ch2)))
print("no. of CH groups:", len(m.GetSubstructMatches(ch1)))

[Out]:
no. of CH3 groups: 7
no. of CH2 groups: 2
no. of CH groups: 1