对具有楔形键的分子应用反应时出现清理错误。在对分子应用质子去除反应时,我得到了这个错误,但我在MolBlock信息中看不到任何错误。
这是为了解决一个反应问题,在这个问题中,我试图将一个简单的反应(质子去除)应用到一个分子上,给出它的异构微笑。
我创建了一个函数来使用智能和微笑来应用反应,但我得到了以下错误,我无法修复。
我使用以下代码来加载我的输入。
smile = rdkit.Chem.rdmolfiles.MolToSmiles(mol,isomericSmiles=True)
这会导致:
C/C1=C\\C[C@@H]([C+](C)C)CC/C(C)=C/CC1
我创建了下面的字典来使用我的微笑和智慧:
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)
,它实际上修复了显式的价错误。但现在我正在试图弄清楚如何获得所有这三个立体异构体。
你知道为什么会这样吗?,因为如果我检查摩尔区块,里面有价态的所有信息,看起来没问题。
发布于 2019-03-28 19:39:58
错误是说明原子0(碳)的显式价态为5,这表明显式氢还没有被移除,尽管键现在是双键,因此价态为5。我不太熟悉反应智能,尽管手动解决这个问题的一种简单方法是在消毒之前将原子0上的显式氢的数量设置为0:
product.GetAtomWithIdx(0).SetNumExplicitHs(0)
Chem.SanitizeMol(product)
编辑1:删掉,我做了一些实验,尝试这个反应:
rxn = AllChem.ReactionFromSmarts('[#6@@H:1]-[#6+:2] >> [#6H0:1]=[#6+0:2]')
这样,在反应定义中,我们明确地指出,氢丢失了,生成的分子将被消毒。这对你有效吗?
编辑2:当我运行此反应时,产品似乎不包含阳离子:
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'
请注意,我们得到了两次相同的产品,我认为这是因为反应物SMARTS匹配两个CH3基团,因此反应应用于两个基团。我希望这就是你要找的。
https://stackoverflow.com/questions/55385877
复制相似问题