【发布时间】:2020-05-29 09:18:24
【问题描述】:
我正在使用 RDKit 并尝试检查分子是否完全匹配。
使用Chem.MolFromSmiles() 后,表达式m == p 显然不会导致预期的结果。
当然,我可以检查p是否是m的子结构,m是否是p的子结构。但对我来说,这看起来太复杂了。我在 RDKit 文档中找不到或忽略了完全匹配的代码示例。我该如何正确地做到这一点?谢谢你的提示。
代码:
from rdkit import Chem
myPattern = 'c1ccc2c(c1)c3ccccc3[nH]2' # Carbazole
myMolecule = 'C1=CC=C2C(=C1)C3=CC=CC=C3N2' # Carbazole
m = Chem.MolFromSmiles(myMolecule)
p = Chem.MolFromSmiles(myPattern)
print(m == p) # returns False, first (unsuccessful) attempt to check for identity
print(m.HasSubstructMatch(p)) # returns True
print(p.HasSubstructMatch(m)) # returns True
print(m.HasSubstructMatch(p) and p.HasSubstructMatch(m)) # returns True, so are the molecules identical?
【问题讨论】:
-
您是否尝试过 rdkit 中的任何指纹识别选项?
-
惊讶地发现还没有这样的功能!
-
我认为您的测试(m.HasSubstructMatch(p) 和 p.HasSubstructMatch(m))是一个很好的平等测试。
标签: rdkit cheminformatics