定义的SMARTS模式
"aromatic": Chem.MolFromSmarts('c'),
"CF_bond": Chem.MolFromSmarts('C-F'),
"CH_bond": Chem.MolFromSmarts('[C]-[H,h,Br,I,Cl]'),
搜索条件
if not aromatic and not CH_bond and CF_bond:
对结果保留后,发现仍然出现了含有碳氢键的化合物(这里CH_bond会包含卤素原子,是因为我本意是想表达,只要含有碳氢键,碳溴键,碳碘键,碳氯键其中一个就满足定义要求)

根据SMILES用SMARTS进行子结构匹配,出现分类不正确问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
27条回答 默认 最新
- 才华横溢caozy 2024-07-10 15:38关注
此答案是由GPT4和本人亲自作答,如有帮助,还请采纳!
使用SMARTS进行子结构匹配时,如果出现分类不正确的问题,可能是由于SMARTS模式定义不够精准或匹配逻辑存在问题。以下是针对您的问题的详细分析和解决思路。问题分析
SMARTS模式定义:
aromatic
模式定义为'c'
,表示匹配任意芳香碳原子。CF_bond
模式定义为'C-F'
,表示匹配任意碳-氟键。CH_bond
模式定义为'[C]-[H,h,Br,I,Cl]'
,表示匹配任意碳-氢键或碳-卤素键。
搜索条件:
- 条件为
if not aromatic and not CH_bond and CF_bond:
,这意味着要匹配不包含芳香碳原子和不包含碳-氢键,但包含碳-氟键的化合物。
- 条件为
问题原因
- 模式定义不准确:您的
CH_bond
模式中包含了卤素(Br、I、Cl),这可能导致匹配逻辑混乱。 - 逻辑问题:条件判断逻辑中,
not aromatic
和not CH_bond
的顺序和逻辑可能不正确,导致过滤不准确。
解决思路
- 优化SMARTS模式:明确每个模式的匹配目标,避免过多的模糊匹配。
- 调整条件逻辑:重新审视逻辑条件,确保筛选条件准确无误。
具体代码优化
首先,优化SMARTS模式:
from rdkit import Chem # 定义更精确的SMARTS模式 patterns = { "aromatic": Chem.MolFromSmarts('a'), # 任意芳香环原子 "CF_bond": Chem.MolFromSmarts('C-F'), # 碳-氟键 "CH_bond": Chem.MolFromSmarts('C-H') # 碳-氢键 }
然后,调整条件逻辑:
def match_substructure(molecule, patterns): # 检查是否匹配各个子结构 aromatic = molecule.HasSubstructMatch(patterns['aromatic']) CF_bond = molecule.HasSubstructMatch(patterns['CF_bond']) CH_bond = molecule.HasSubstructMatch(patterns['CH_bond']) # 应用新的逻辑条件 if not aromatic and not CH_bond and CF_bond: return True return False # 示例化合物 smiles_list = [ "C1=CC=CC=C1", # 苯 "CF", # 碳-氟键 "CCl", # 碳-氯键 "CH", # 碳-氢键 ] # 检查每个化合物 for smiles in smiles_list: molecule = Chem.MolFromSmiles(smiles) if match_substructure(molecule, patterns): print(f"{smiles} 匹配") else: print(f"{smiles} 不匹配")
解释
SMARTS模式优化:
- 将
aromatic
模式定义为'a'
,表示匹配任意芳香环原子,而不是仅限于芳香碳原子。 - 保留
CF_bond
模式不变,因为它准确匹配碳-氟键。 - 将
CH_bond
模式仅定义为'C-H'
,专注于碳-氢键,避免误匹配卤素键。
- 将
逻辑调整:
- 先检测化合物是否包含芳香环原子和碳-氢键,再检查是否包含碳-氟键。
- 逻辑条件为
if not aromatic and not CH_bond and CF_bond:
,确保筛选出的化合物不包含芳香环原子和碳-氢键,但包含碳-氟键。
通过上述代码和逻辑调整,可以更精确地筛选出符合条件的化合物,避免出现包含碳-氢键的化合物匹配成功的情况。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报