Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我需要从smiles字符串(或.xyz文件)中找到分子中所有可能的键、原子之间的角度的列表_Python_Rdkit - Fatal编程技术网

Python 我需要从smiles字符串(或.xyz文件)中找到分子中所有可能的键、原子之间的角度的列表

Python 我需要从smiles字符串(或.xyz文件)中找到分子中所有可能的键、原子之间的角度的列表,python,rdkit,Python,Rdkit,我正在尝试建立力场,为了做到这一点,我需要一个列表,列出分子中所有可能的键、角度和二面体,从smiles string oe.xyz文件 有没有可能用RDkit来做呢?如果是这样的话,怎么做?要从分子中获取角度,它必须至少具有2D坐标,rdkit无法从XYZ文件构造分子,但可以读取字符串 from rdkit import Chem from rdkit.Chem import AllChem from rdkit.Chem import rdMolTransforms # Read mole

我正在尝试建立力场,为了做到这一点,我需要一个列表,列出分子中所有可能的键、角度和二面体,从smiles string oe.xyz文件


有没有可能用RDkit来做呢?如果是这样的话,怎么做?

要从分子中获取角度,它必须至少具有2D坐标,rdkit无法从XYZ文件构造分子,但可以读取字符串

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文件或类似文件读取具有3D坐标的分子。软件可以将XYZ转换为SDF

请添加您已经尝试解决的问题!我还没有找到任何可以尝试的东西。我浏览了RDKit的文档,没有太多关于我是否可以使用它来执行任务的信息。谢谢。。我试图定义原子类型,从而命名键。因此,根据RDKit文档AllChem.EmbeddeMultipleConfs(mol,numConfs=10)res=AllChem.mmfOptimizeMoleculeConfs(mol),这将自动定义原子、键等。我试图将其转储到可以获得列表的某个位置。