我有下面的函数,它获取微笑字符串的字典,并将它们转换为RDKit mol对象.

def smiles_dict_to_mol_list(smiles_dict):
    """smiles dict is a dictionary object containing molecule names
    as keys and smiles strings as values.

    The return value is a list of RDKit mol objects.
    """

    smiles_as_mol = []
    for mol_name, smiles_string in smiles_dict.items():
        try:
            mol = Chem.MolFromSmiles(smiles_string)
            mol.SetProp("_Name", mol_name)
            smiles_as_mol.append(mol)
        except:
            print("Error processing:", mol_name)

    return smiles_as_mol

这个函数通常工作得很好,我可以将任何微笑转换成mol对象,但是当我try 转换下面的 struct 时,我得到了一个例外.我认为这是因为这种化合物,以及其他也给出例外的化合物,有一个配位的金属ionic .在这种情况下,铂金.我使用的微笑线也可能是问题所在,但我不知道该如何区分.

enter image description here

N2W:COc1cc(cc(c1O)OC)[C@@H]2c3cc4c(cc3[C@H]([C@@H]5[C@H]2C(=O)OC5)NC(=O)CC[C@@H]6C[NH2][Pt]([NH2]6)Cl)OCO4

所以我的问题是:How can I change my RDKit code so I can work with compounds that have metal atoms?

推荐答案

问题是SMILES而不是Pt.

要从坏微笑中得到一个mol,请将sanitize标志设置为False.

from rdkit import Chem
from rdkit.Chem.Draw import IPythonConsole
IPythonConsole.molSize = (600,300)
IPythonConsole.drawOptions.addAtomIndices = True

s = 'COc1cc(cc(c1O)OC)[C@@H]2c3cc4c(cc3[C@H]([C@@H]5[C@H]2C(=O)OC5)NC(=O)CC[C@@H]6C[NH2][Pt]([NH2]6)Cl)OCO4'
m = Chem.MolFromSmiles(s, sanitize=False)
m

molecule

但现在你有了一个坏分子.

有两个氮原子和四个键.

problems = Chem.DetectChemistryProblems(m)
for p in problems:
    print(p.Message())

Explicit valence for atom # 32 N, 4, is greater than permitted
Explicit valence for atom # 34 N, 4, is greater than permitted

Addition:

在RDKit食谱中有一个如何使用与格键的例子.

用你的微笑try 了一下,成功了

https://www.rdkit.org/docs/Cookbook.html#organometallics-with-dative-bonds

Python相关问答推荐

如何在msgraph.GraphServiceClient上进行身份验证?

使用mySQL的SQlalchemy过滤重叠时间段

根据不同列的值在收件箱中移动数据

对某些列的总数进行民意调查,但不单独列出每列

ModuleNotFound错误:没有名为flags.State的模块; flags不是包

使用@ guardlasses. guardlass和注释的Python继承

用NumPy优化a[i] = a[i-1]*b[i] + c[i]的迭代计算

如何将多进程池声明为变量并将其导入到另一个Python文件

对象的`__call__`方法的setattr在Python中不起作用'

让函数调用方程

无论输入分辨率如何,稳定扩散管道始终输出512 * 512张图像

Python—转换日期:价目表到新行

在matplotlib中使用不同大小的标记顶部添加批注

如何将泛型类类型与函数返回类型结合使用?

使用SQLAlchemy从多线程Python应用程序在postgr中插入多行的最佳方法是什么?'

Python如何导入类的实例

Matplotlib中的曲线箭头样式

EST格式的Azure数据库笔记本中的当前时间戳

为什么按下按钮后屏幕的 colored颜色 保持不变?

按列表分组到新列中