gpt4 book ai didi

python - 对分子 RDKit 应用 react 的 sanitizer 错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:16:09 25 4
gpt4 key购买 nike

对具有楔形键的分子应用 react 时出现 sanitizer 错误。我在对分子应用质子去除 react 时遇到此错误,但我在 MolBlock 信息中没有看到任何错误。

这是一个 react 问题,在这个问题中,我试图对给定同分异构体 SMILES 的分子应用一个简单的 react (质子去除)。

我创建了一个函数来使用 SMARTS 和 SMILES 应用 react ,但我收到以下无法修复的错误。

我正在使用以下代码来加载我的输入。

smile = rdkit.Chem.rdmolfiles.MolToSmiles(mol,isomericSmiles=True)

这导致:

C/C1=C\\C[C@@H]([C+](C)C)CC/C(C)=C/CC1

我创建了以下字典来使用我的 SMILES 和 SMARTS:

reaction_smarts = {}

# proton removal reaction

reaction_smarts["proton_removal"] = "[Ch:1]-[C+1:2]>>[C:1]=[C+0:2].[H+]"

reactions = {name: AllChem.ReactionFromSmarts(reaction_smarts[name]) for name in reaction_smarts}

# function to run reactions

def run_reaction(molecule, reaction):
products = []
for product in reaction.RunReactant(molecule, 0):
Chem.SanitizeMol(product[0])
products.append(product[0])
return products

# apply reaction


products = run_reaction(cation_to_rdkit_mol["mol_name"], reactions["proton_removal"])

在这一步,我收到了这个错误,但我无法修复它。 RDKit 错误:[10:43:23] 原子 # 0 C,5 的显式化合价大于允许值

预期结果应该是带有双键的分子及其立体异构体:

第一个产品:CC(C)=C1C/C=C(\\C)CC/C=C(\\C)CC1

第二个产品:C=C(C)[C@@H]1C/C=C(\\C)CC/C=C(\\C)CC1

第三个产品:C=C(C)[C@H]1C/C=C(\\C)CC/C=C(\\C)CC1

我正在使用 Chem.EnumerateStereoisomers.EnumerateStereoisomers() 获取所有立体异构体,但我只获取第一个和第二个产品。我还添加了您的初始提案 product[0].GetAtomWithIdx(0).SetNumExplicitHs(0),它实际上修复了 Explicit valence 错误。但现在我正试图弄清楚如何获得所有这三种立体异构体。

任何提示为什么会发生这种情况?因为如果我用所有关于化合价的信息检查 mol block ,它似乎没问题。

最佳答案

错误表明原子 0(碳)的显式化合价为 5,这表明显式氢尚未被移除,尽管该键现在是双键,因此化合价为 5。我不是对 Reaction SMARTS 太熟悉了,尽管手动解决这个问题的一个简单方法是在清理之前将原子 0 上显式氢的数量设置为 0:

product.GetAtomWithIdx(0).SetNumExplicitHs(0)
Chem.SanitizeMol(product)

编辑 1:从头开始,我做了一些实验,试试这个 react :

rxn = AllChem.ReactionFromSmarts('[#6@@H:1]-[#6+:2] >> [#6H0:1]=[#6+0:2]')

通过这种方式,我们在 react 定义中明确指出氢气丢失,生成的分子将被 sanitizer 。这对你有用吗?

编辑 2:当我运行这个 react 时,产物似乎不包含阳 ionic :

mol = Chem.MolFromSmiles('C/C1=C\\C[C@@H]([C+](C)C)CC/C(C)=C/CC1')
rxn = AllChem.ReactionFromSmarts('[#6@@H:1]-[#6+:2] >> [#6H0:1]=[#6+0:2]')
products = list()
for product in rxn.RunReactant(mol, 0):
Chem.SanitizeMol(product[0])
products.append(product[0])
print(Chem.MolToSmiles(products[0]))

Output:
'CC(C)=C1C/C=C(\\C)CC/C=C(\\C)CC1'

编辑 3:我想我现在明白你在找什么了:

mol = Chem.MolFromSmiles('C/C1=C\\C[C@@H]([C+](C)C)CC/C(C)=C/CC1')

# Reactant SMARTS
reactant_smarts = '[CH3:1][C+:2][C@@H:3]'

# Product SMARTS
product_smarts = [
'[CH2:1]=[CH0+0:2][CH:3]',
'[CH2:1]=[CH0+0:2][C@H:3]',
'[CH2:1]=[CH0+0:2][C@@H:3]',
]

# Reaction SMARTS
reaction_smarts = str(reactant_smarts + '>>' + '.'.join(product_smarts))

# RDKit Reaction
rxn = AllChem.ReactionFromSmarts(reaction_smarts)

# Get Products
results = list()
for products in rxn.RunReactant(mol, 0):
for product in products:
Chem.SanitizeMol(product)
results.append(product)
print(Chem.MolToSmiles(product))

Output:
'C=C(C)C1C/C=C(\\C)CC/C=C(\\C)CC1'
'C=C(C)[C@H]1C/C=C(\\C)CC/C=C(\\C)CC1'
'C=C(C)[C@@H]1C/C=C(\\C)CC/C=C(\\C)CC1'
'C=C(C)C1C/C=C(\\C)CC/C=C(\\C)CC1'
'C=C(C)[C@H]1C/C=C(\\C)CC/C=C(\\C)CC1'
'C=C(C)[C@@H]1C/C=C(\\C)CC/C=C(\\C)CC1'

请注意,我们两次得到相同的产物,我认为这是因为 react 物 SMARTS 与两个 CH3 基团匹配,因此 react 适用于两者。我希望这就是您要找的。

关于python - 对分子 RDKit 应用 react 的 sanitizer 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55385877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com