我已将一个分子作为.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
或类似的东西。
答案 0 :(得分: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]