2301_81601613 2024-07-10 15:32 采纳率: 40%
浏览 12
已结题

根据SMILES用SMARTS进行子结构匹配,出现分类不正确问题

定义的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会包含卤素原子,是因为我本意是想表达,只要含有碳氢键,碳溴键,碳碘键,碳氯键其中一个就满足定义要求)

  • 写回答

27条回答 默认 最新

  • 才华横溢caozy 2024-07-10 15:38
    关注

    此答案是由GPT4和本人亲自作答,如有帮助,还请采纳!
    使用SMARTS进行子结构匹配时,如果出现分类不正确的问题,可能是由于SMARTS模式定义不够精准或匹配逻辑存在问题。以下是针对您的问题的详细分析和解决思路。

    问题分析

    1. SMARTS模式定义

      • aromatic 模式定义为 'c',表示匹配任意芳香碳原子。
      • CF_bond 模式定义为 'C-F',表示匹配任意碳-氟键。
      • CH_bond 模式定义为 '[C]-[H,h,Br,I,Cl]',表示匹配任意碳-氢键或碳-卤素键。
    2. 搜索条件

      • 条件为 if not aromatic and not CH_bond and CF_bond:,这意味着要匹配不包含芳香碳原子和不包含碳-氢键,但包含碳-氟键的化合物。

    问题原因

    1. 模式定义不准确:您的 CH_bond 模式中包含了卤素(Br、I、Cl),这可能导致匹配逻辑混乱。
    2. 逻辑问题:条件判断逻辑中,not aromaticnot CH_bond 的顺序和逻辑可能不正确,导致过滤不准确。

    解决思路

    1. 优化SMARTS模式:明确每个模式的匹配目标,避免过多的模糊匹配。
    2. 调整条件逻辑:重新审视逻辑条件,确保筛选条件准确无误。

    具体代码优化

    首先,优化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} 不匹配")
    

    解释

    1. SMARTS模式优化

      • aromatic 模式定义为 'a',表示匹配任意芳香环原子,而不是仅限于芳香碳原子。
      • 保留 CF_bond 模式不变,因为它准确匹配碳-氟键。
      • CH_bond 模式仅定义为 'C-H',专注于碳-氢键,避免误匹配卤素键。
    2. 逻辑调整

      • 先检测化合物是否包含芳香环原子和碳-氢键,再检查是否包含碳-氟键。
      • 逻辑条件为 if not aromatic and not CH_bond and CF_bond:,确保筛选出的化合物不包含芳香环原子和碳-氢键,但包含碳-氟键。

    通过上述代码和逻辑调整,可以更精确地筛选出符合条件的化合物,避免出现包含碳-氢键的化合物匹配成功的情况。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(26条)

报告相同问题?

问题事件

  • 系统已结题 7月22日
  • 已采纳回答 7月14日
  • 修改了问题 7月10日
  • 创建了问题 7月10日

悬赏问题

  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
  • ¥15 虚拟机检测,可以是封装好的DLL,可付费
  • ¥15 kafka无法正常启动(只启动了一瞬间会然后挂了)
  • ¥30 使用matlab将观测点聚合成多条目标轨迹
  • ¥15 Workbench中材料库无法更新,如何解决?
  • ¥20 如何推断此服务器配置
  • ¥15 关于github的项目怎么在pycharm上面运行
  • ¥15 内存地址视频流转RTMP
  • ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
  • ¥15 有没有整苹果智能分拣线上图像数据