【问题标题】:Why i can't get 3D mol structure in RDkit?为什么我无法在 RDkit 中获得 3D mol 结构?
【发布时间】:2021-12-14 19:43:45
【问题描述】:

我已经根据需要编辑了分子。现在我必须导出它。但是 mol 块总是看起来是 2D 的。所以我的分子变成了二维的。我想要一个 3D 结构。有谁知道解决方案? (看截图的图片)

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。
  • 我找到了解决方案。我添加了 AllChem.EmbedMolecule(m4, useRandomCoords=True , randomSeed=0xf00d) 随机坐标命令和嵌入函数返回 0。问题是分子。它是如此之大。谢谢你的努力我的朋友

标签: rdkit


【解决方案1】:

以下代码(版本 2021.03.3)没有问题:

m_smiles = 'c1ccccc1'
mol = Chem.MolFromSmiles(m_smiles)
mol = Chem.AddHs(mol)

AllChem.EmbedMolecule(mol, randomSeed=0xf00d)
print(Chem.MolToMolBlock(mol))

...


     RDKit          3D

 12 12  0  0  0  0  0  0  0  0999 V2000
   -0.2995   -1.3510    0.0141 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.3055   -0.4032    0.0428 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.0307    0.9497    0.0294 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.3037    1.3426   -0.0142 C   0  0  0  0  0  0  0  0  0  0  0  0
    1.2985    0.3934   -0.0425 C   0  0  0  0  0  0  0  0  0  0  0  0
    1.0206   -0.9630   -0.0291 C   0  0  0  0  0  0  0  0  0  0  0  0
   -0.5031   -2.4015    0.0241 H   0  0  0  0  0  0  0  0  0  0  0  0
   -2.3381   -0.7237    0.0766 H   0  0  0  0  0  0  0  0  0  0  0  0
   -1.8299    1.6790    0.0523 H   0  0  0  0  0  0  0  0  0  0  0  0
    0.5056    2.4116   -0.0242 H   0  0  0  0  0  0  0  0  0  0  0  0
    2.3290    0.7220   -0.0763 H   0  0  0  0  0  0  0  0  0  0  0  0
    1.8494   -1.6559   -0.0530 H   0  0  0  0  0  0  0  0  0  0  0  0
  1  2  2  0
  2  3  1  0
  3  4  2  0
  4  5  1  0
  5  6  2  0
  6  1  1  0
  1  7  1  0
  2  8  1  0
  3  9  1  0
  4 10  1  0
  5 11  1  0
  6 12  1  0
M  END


需要检查的一些事项:

检查 embed 函数是否返回非零退出状态,该函数可能无法嵌入您的分子

result = AllChem.EmbedMolecule(mol, randomSeed=0xf00d)
assert result != 0

检查conformer是否被标记为3D

result = AllChem.EmbedMolecule(mol, randomSeed=0xf00d)
c = mol.GetConformer()
print(c.Is3D())
...
True

打印conformer的坐标

result = AllChem.EmbedMolecule(mol, randomSeed=0xf00d)
c = mol.GetConformer()
print(c.GetPositions())
...
[[-0.29949394 -1.35098866  0.01410225]
 [-1.30551208 -0.40318505  0.04275071]
 [-1.03072469  0.949724    0.02942649]
 [ 0.30371624  1.34255959 -0.01420523]
 [ 1.29846541  0.39342702 -0.04249222]
 [ 1.02064112 -0.96295912 -0.02906111]
 [-0.50308026 -2.40153594  0.0241313 ]
 [-2.33811252 -0.72370675  0.07656442]
 [-1.82994742  1.67895926  0.0522682 ]
 [ 0.50563305  2.41164485 -0.02424598]
 [ 2.32904788  0.72199377 -0.07627234]
 [ 1.8493672  -1.65593298 -0.05296649]]

【讨论】:

  • 谢谢你的回答我的朋友。我的嵌入函数返回 -1 我认为这是问题所在。问题可能来自我的 SMILES 字符串吗?因为在上图中,字符串的开头是 SMILES,然后继续作为 SMARTS 字符串。如果这不是问题,可能是什么问题?
  • 你能分享一下 SMILES 字符串吗?
  • 我找到了解决方案。我添加了 AllChem.EmbedMolecule(m4, useRandomCoords=True , randomSeed=0xf00d) 随机坐标命令和嵌入函数返回 0。问题是分子。它是如此之大。谢谢你的努力,我的朋友。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 2020-04-29
相关资源
最近更新 更多