python - 如何使用 Python 中的 rdkit 确定任何分子的石蜡基 CH3、CH2 和 CH 基团的数量?

标签 python chemistry rdkit

我正在尝试使用 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-五甲基庚烷):

enter image description here

代码应该给我以下输出:

  • 不。 CH3 组数:7
  • 不。 CH2 组数:2
  • 不。 CH 组数:1

最佳答案

您应该使用SMARTS用于子结构查询。此外,如果查询匹配,GetSubstructMatches() 将返回所有子结构匹配,而不仅仅是返回 bool 值,如 HasSubstructMatch():

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

关于python - 如何使用 Python 中的 rdkit 确定任何分子的石蜡基 CH3、CH2 和 CH 基团的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61375347/

相关文章:

python - 使用 xlsxwriter 在条件格式(公式)后删除列

python - [ python ] : how to get the string from the pointer by using ctypes?

javascript - 在圆上均匀分布点的算法(壳模型 - 化学)

python - 分析化学方程式,在Python中将括号外的子索引相乘

python - Anaconda 的 rdkit 安装问题

rdkit.Chem.rdmolfiles.MolToMolBlock(NoneType) 中的 Python 参数类型

python - 化学表示 - SNL 到 SMILES

Python:如何在调用父类时进行子类化?

java - 帮助化学平衡器? (从数组列表到矩阵的转换)在java中

python - 如何使用 python 比较同一数据框中的两列来创建新列?