【问题标题】:RDKIT: Find Substructure Atom CoordinatesRDKIT:查找子结构原子坐标
【发布时间】:2019-05-01 01:22:09
【问题描述】:

我已将一个分子作为.mol 文件导入rdkit。 该分子包含 CN=NC 亚结构。 我希望找到 CN=NC 子结构的坐标。

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

我的代码的基础是:

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

但是不知道有没有简单的方法可以返回特定原子的坐标

理想的结果是:

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

或类似的东西。

【问题讨论】:

    标签: rdkit


    【解决方案1】:

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

    要获得坐标,您需要分子的构象异构体,并使用子结构搜索中的 ID 调用元素。

    from rdkit import Chem
    
    molblock = '''
    cn=nc substructure
    sample for stackoverflow
     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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多