在 RDKit 中使用金属离子处理 SMILES

Handling SMILES with metal ions in RDKit

我有以下函数,它接受 SMILES 字符串的字典并将它们转换为 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

此函数通常运行良好,我可以将任何 SMILES 转换为 mol 对象,但是当我尝试转换以下结构时出现异常。我相信这是因为这种化合物和其他也有例外的化合物具有配位金属离子。在这种情况下,铂金。也有可能是我使用的 SMILES 字符串有问题,但我不知道如何区分。

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

所以我的问题是:如何更改我的 RDKit 代码以便我可以使用具有金属原子的化合物?

问题是 SMILES 而不是 Pt

要从糟糕的 SMILES 中获取 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

但是现在你有一个坏分子。

有 2 个氮和 4 个键。

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

加法:

在 RDKit Cookbook 中有一个如何使用与格键的示例。

用你的 SMILES 试了一下,效果很好

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