我正在尝试开发力场,为了做到这一点,我需要一个来自微笑字符串 oe .xyz 文件的分子中所有可能的键、角和二面角的列表。
有可能用 RDkit 做到这一点吗?如果是这样,如何?
要从分子中获取角度,它必须至少具有 2D 坐标,rdkit 无法从 XYZ 文件构造分子,但可以读取 SMILES 字符串。
from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem import rdMolTransforms
# Read molecule from smiles string
mol = Chem.MolFromSmiles('N1CCNCC1')
# Get all bonds in the molecule
bonds = [(x.GetBeginAtomIdx(), x.GetEndAtomIdx()) for x in mol.GetBonds()]
# [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 0)]
# Compute 2D coordinates
AllChem.Compute2DCoords(mol)
conf = mol.GetConformer()
# Get a torsion angle between atoms 0, 1 & 2
rdMolTransforms.GetAngleDeg(conf, 0, 1, 2)
# 119.99999999999999
# Get a dihedral angle between atoms 0, 1, 2 & 3
rdMolTransforms.GetDihedralDeg(c, 0, 1, 2, 3)
# -0.0 (obviously 0 as the molecule has no 3D coordinates)
如果需要,您可以为分子生成 3D 坐标,或者您可以使用 SDF 文件或类似文件读取具有 3D 坐标的分子。软件openbabel可以将XYZ转换为SDF