1

我正在使用一些任务RDKit并遇到一些问题。我正在尝试用SaltRemover()函数清理我的数据集,但是ArgumentError发生了,我无法弄清楚。

使用的代码是这样的:

from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem.PandasTools import LoadSDF

A1 = LoadSDF('finaldata_A1.sdf', smilesName='SMILES')
A1 = A1['SMILES']

for mol in A1:
A1_mol = Chem.MolFromSmiles(mol)
if mol is None: continue

from rdkit.Chem import SaltRemover
remover = SaltRemover.SaltRemover(defnFormat='smiles')
A1_mol_SR = remover.StripMol(A1_mol)

运行代码后的错误信息是:

ArgumentError:rdkit.Chem.rdmolops.DeleteSubstructs(Mol, NoneType, bool) 中的 Python 参数类型与 C++ 签名不匹配:DeleteSubstructs(class RDKit::ROMol mol, class RDKit::ROMol query, bool onlyFrags=False, bool useChirality=错误的)

4

1 回答 1

1

我认为您在这里感到困惑。

至于,SaltRemover你想用这个defnFormat论点来达到什么目的?当您使用此参数时,您还应该提供defnData定义要删除的盐,即

from rdkit import Chem
from rdkit.Chem import SaltRemover

remover = SaltRemover(defnFormat='smarts', defnData="[Cl]")
mol = Chem.MolFromSmiles('CN(C)C.Cl')
res = remover.StripMol(mol)

# We have stripped the Cl
res.GetNumAtoms()
[Out]: 4

如果您初始化SaltRemover,没有这些参数,盐定义将从作为一组 SMARTS 查询读取的文件中读取。当您设置defnFormat为“微笑”时,您是在告诉移除器将文件作为一系列 SMILES 字符串读取。当然,由于注释和格式不正确,这个文件不能被读取为 SMILES 字符串。在定义的盐中,随后有“无”对象,这就是您收到ArgumentError. 在内部,rdkit 正在使用DeleteSubstructs传递给您的查询分子的函数和要删除的盐,现在可能是“无”。

您可能不需要定义自己的盐。如果不只是使用默认参数:

remover = SaltRemover()

# We can have a look at some of the salts
Chem.MolToSmarts(remover.salts[0])

[Out]: '[Cl,Br,I]'

# Use to strip salts
mol = Chem.MolFromSmiles('CN(C)C.Cl')
res = remover.StripMol(mol)
print(Chem.MolToSmiles(res))

[Out]: 'CN(C)C'

您的另一个问题似乎与您如何处理数据有关。似乎您正在计算Mol两次对象?当您使用“LoadSDF”函数时,除非在参数中指定,否则 Mols 将添加到名称为“ROMol”的列中molColName。你也只是想剥离一个分子?您可能应该考虑尝试将去除剂应用于 A1 数据框中的分子列。

于 2019-12-03T15:56:45.047 回答