rdkit GetBondLength 键长计算

参考:https://blog.csdn.net/qq_36801966/article/details/106531131
https://mattermodeling.stackexchange.com/questions/8359/how-to-plot-molecules-with-angles-and-bond-lengths

from rdkit.Chem import AllChem as Chem
from rdkit.Chem import rdMolTransforms
from rdkit.Chem.Draw import rdMolDraw2D, rdDepictor, IPythonConsole
rdDepictor.SetPreferCoordGen(True)
from IPython.display import Image

smiles = 'Nc1cc2[nH]cc(C(=O)O)c(=O)c2cc1F'

# 3D for lengths  计算3d空间结构
mol3d = Chem.AddHs(Chem.MolFromSmiles(smiles))
Chem.EmbedMolecule(mol3d, randomSeed=42)
Chem.MMFFOptimizeMolecule(mol3d)

# 2D for depiction  计算2D坐标
mol2d = Chem.AddHs(Chem.MolFromSmiles(smiles))
rdDepictor. Compute2DCoords(mol2d)




bonds = [(x.GetBeginAtomIdx(), x.GetEndAtomIdx()) for x in mol3d.GetBonds()]
conf = mol3d.GetConformer()

b_lengths = []

for b in bonds:
    bl = rdMolTransforms.GetBondLength(conf,b[0],b[1])  ##计算键长
    
    b_lengths.append(str(round(bl,2)))

d = rdMolDraw2D.MolDraw2DCairo(600, 400)

for n in range(len(b_lengths)):
    mol2d.GetBondWithIdx(n).SetProp('bondNote', b_lengths[n])

d.DrawMolecule(mol2d)
d.FinishDrawing()
d.WriteDrawingText('bonds.png')
Image('bonds.png')

rdkit GetBondLength 键长计算_第1张图片

你可能感兴趣的:(CADD/AIDD,rdkit)