Мне нужно найти список всех возможных связей, углов между атомами в молекуле из строки улыбки (или .xyz файл) - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь разработать силовые поля, и для этого мне нужен список всех возможных связей, углов и диэдра в молекуле из строки улыбок или файла .xyz.

Возможно ли, чтосделать это с RDkit? если да, то как?

1 Ответ

0 голосов
/ 15 октября 2019

Чтобы получить углы от молекулы, она должна иметь как минимум 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)

При необходимости вы можете генерировать трехмерные координаты для молекулы, или вы можете читать молекулы с трехмерными координатами, используя файл SDF или аналогичный. Программное обеспечение openbabel может конвертировать XYZ в SDF

...