RDKIT:查找子结构原子坐标

RDKIT: Find Substructure Atom Coordinates

我已经将分子作为 .mol 文件导入到 rdkit 中。 该分子包含 CN=NC 子结构。 我想找到 CN=NC 子结构的坐标。

我试过使用 Chem.MolToBlock(molfile) 列出 3D 坐标;但是,这 return 是整个分子的 3D 坐标。

我的代码的基础是:

molecule = rdkit.Chem.MolFromMolFile('molfile')
query = rdkit.Chem.MolFromSmiles('CN=NC')`
subatomids = m.GetSubstructMatch(q)

但是不知道有没有简单的方法return具体原子的坐标

理想的结果是:

C = x y z
N = x y z
N = x y z
C = x y z

或类似的东西。

我将使用 molblock 而不是 .mol 文件,但它适用于两者。 在我的示例 molblock 中,您的子结构是原子 2-5。

要获得坐标,您需要分子的构象异构体和来自子结构搜索的 ID,您可以调用元素。

from rdkit import Chem

molblock = '''
cn=nc substructure
sample for Whosebug
 16 15  0  0  0  0            999 V2000
   -2.6048   -0.8132    0.1394 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.8319    0.4361   -0.2883 C   0  0  0  0  0  0  0  0  0  0  0  0
   -0.5126    0.4361    0.3487 N   0  0  0  0  0  0  0  0  0  0  0  0
    0.5126    0.4361   -0.3487 N   0  0  0  0  0  0  0  0  0  0  0  0
    1.8319    0.4361    0.2883 C   0  0  0  0  0  0  0  0  0  0  0  0
    2.6048   -0.8132   -0.1394 C   0  0  0  0  0  0  0  0  0  0  0  0
   -2.0542   -1.7032   -0.1653 H   0  0  0  0  0  0  0  0  0  0  0  0
   -2.7245   -0.8132    1.2228 H   0  0  0  0  0  0  0  0  0  0  0  0
   -3.5863   -0.8132   -0.3346 H   0  0  0  0  0  0  0  0  0  0  0  0
   -1.7122    0.4361   -1.3717 H   0  0  0  0  0  0  0  0  0  0  0  0
   -2.3825    1.3260    0.0164 H   0  0  0  0  0  0  0  0  0  0  0  0
    2.3825    1.3260   -0.0164 H   0  0  0  0  0  0  0  0  0  0  0  0
    1.7122    0.4360    1.3717 H   0  0  0  0  0  0  0  0  0  0  0  0
    2.0542   -1.7032    0.1653 H   0  0  0  0  0  0  0  0  0  0  0  0
    2.7245   -0.8132   -1.2228 H   0  0  0  0  0  0  0  0  0  0  0  0
    3.5863   -0.8132    0.3346 H   0  0  0  0  0  0  0  0  0  0  0  0
  1  2  1  0  0  0  0
  1  7  1  0  0  0  0
  1  8  1  0  0  0  0
  1  9  1  0  0  0  0
  2  3  1  0  0  0  0
  2 10  1  0  0  0  0
  2 11  1  0  0  0  0
  3  4  2  0  0  0  0
  4  5  1  0  0  0  0
  5  6  1  0  0  0  0
  5 12  1  0  0  0  0
  5 13  1  0  0  0  0
  6 14  1  0  0  0  0
  6 15  1  0  0  0  0
  6 16  1  0  0  0  0
M  END'''

m = Chem.MolFromMolBlock(molblock)
#m = Chem.MolFromMolFile('theMolFile')

conf = m.GetConformer()

patt = Chem.MolFromSmiles('CN=NC')

sub = m.GetSubstructMatch(patt)

for s in sub:
    print(m.GetAtoms()[s].GetSymbol(), list(conf.GetAtomPosition(s)))

输出:

C [-1.8319, 0.4361, -0.2883]
N [-0.5126, 0.4361, 0.3487]
N [0.5126, 0.4361, -0.3487]
C [1.8319, 0.4361, 0.2883]