首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将反应应用于分子RDKit时出现清理错误

将反应应用于分子RDKit时出现清理错误
EN

Stack Overflow用户
提问于 2019-03-28 04:25:59
回答 1查看 913关注 0票数 2

对具有楔形键的分子应用反应时出现清理错误。在对分子应用质子去除反应时,我得到了这个错误,但我在MolBlock信息中看不到任何错误。

这是为了解决一个反应问题,在这个问题中,我试图将一个简单的反应(质子去除)应用到一个分子上,给出它的异构微笑。

我创建了一个函数来使用智能和微笑来应用反应,但我得到了以下错误,我无法修复。

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

代码语言:javascript
运行
复制
smile = rdkit.Chem.rdmolfiles.MolToSmiles(mol,isomericSmiles=True)

这会导致:

代码语言:javascript
运行
复制
C/C1=C\\C[C@@H]([C+](C)C)CC/C(C)=C/CC1

我创建了下面的字典来使用我的微笑和智慧:

代码语言:javascript
运行
复制
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 ERROR: [10:43:23] Explicit valence for atom # 0 C, 5, is greater than permitted

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

第一款产品: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),它实际上修复了显式的价错误。但现在我正在试图弄清楚如何获得所有这三个立体异构体。

你知道为什么会这样吗?,因为如果我检查摩尔区块,里面有价态的所有信息,看起来没问题。

EN

Stack Overflow用户

回答已采纳

发布于 2019-03-28 19:39:58

错误是说明原子0(碳)的显式价态为5,这表明显式氢还没有被移除,尽管键现在是双键,因此价态为5。我不太熟悉反应智能,尽管手动解决这个问题的一种简单方法是在消毒之前将原子0上的显式氢的数量设置为0:

代码语言:javascript
运行
复制
product.GetAtomWithIdx(0).SetNumExplicitHs(0)
Chem.SanitizeMol(product)

编辑1:删掉,我做了一些实验,尝试这个反应:

代码语言:javascript
运行
复制
rxn = AllChem.ReactionFromSmarts('[#6@@H:1]-[#6+:2] >> [#6H0:1]=[#6+0:2]')

这样,在反应定义中,我们明确地指出,氢丢失了,生成的分子将被消毒。这对你有效吗?

编辑2:当我运行此反应时,产品似乎不包含阳离子:

代码语言:javascript
运行
复制
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:我想我现在知道你在找什么了:

代码语言:javascript
运行
复制
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'

请注意,我们得到了两次相同的产品,我认为这是因为反应物SMARTS匹配两个CH3基团,因此反应应用于两个基团。我希望这就是你要找的。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55385877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档