如何使用RDKit修改分子结构,在支链末端添加COOH基团?
支链分子末端添加COOH基团的RDKit实现方法
需求说明
现有如图所示的支链分子,需要将所有支链末端的NH2基团替换为COOH基团:
原始简化版4支链分子SMILES如下:
[N:1]([CH2:2][CH2:3][N:4]([CH2:47][CH2:48][CH:49]([NH:50][CH2:51][CH2:52][NH2:53])[O-:55])[CH2:66][CH2:67][CH:68]([NH:69][CH2:70][CH2:71][NH2:72])[O-:74])([CH2:9][CH2:10][CH:11]([NH:12][CH2:13][CH2:14][NH2:15])[O-:17])[CH2:28][CH2:29][CH:30]([NH:31][CH2:32][CH2:33][NH2:34])[O-:36]
原有代码问题分析
你编写的替换代码无效果的核心原因有两点:
- 匹配子结构
[NH2:34]指定了唯一的原子映射编号34,仅能匹配到分子中1个对应编号的末端氨基,无法覆盖所有4个支链的末端氨基 - 替换目标为
[CH2:99]不符合需求,不需要先替换为亚甲基,可以直接一步完成COOH的替换
正确实现代码
from rdkit import Chem # 读取原始分子 raw_smiles = "[N:1]([CH2:2][CH2:3][N:4]([CH2:47][CH2:48][CH:49]([NH:50][CH2:51][CH2:52][NH2:53])[O-:55])[CH2:66][CH2:67][CH:68]([NH:69][CH2:70][CH2:71][NH2:72])[O-:74])([CH2:9][CH2:10][CH:11]([NH:12][CH2:13][CH2:14][NH2:15])[O-:17])[CH2:28][CH2:29][CH:30]([NH:31][CH2:32][CH2:33][NH2:34])[O-:36]" mol = Chem.MolFromSmiles(raw_smiles) # 定义匹配规则:匹配所有末端伯氨基 match_pattern = Chem.MolFromSmarts("[NH2]") # 定义替换规则:替换为COOH基团 # 如果需要在COOH和原有碳链之间额外插入CH2,可将替换规则改为Chem.MolFromSmarts("[CH2]C(=O)[O]") replace_pattern = Chem.MolFromSmarts("[C](=O)[O]") # 执行全量替换 modified_mol = Chem.ReplaceSubstructs(mol, match_pattern, replace_pattern, replaceAll=True)[0] # 校验分子合法性 Chem.SanitizeMol(modified_mol) # 输出修改后的分子SMILES print(Chem.MolToSmiles(modified_mol))
扩展说明
该方案可以直接迁移到更大的同类型支链分子中,只要分子的支链末端均为伯氨基结构,不需要修改匹配规则即可完成批量替换。
内容的提问来源于stack exchange,提问作者Aykut Elmas
相关产品推荐
相关产品推荐

