RdKit 分子中原子的坐标

问题描述 投票:0回答:1

大家好,我需要一些帮助来格式化分子中原子的坐标,我正在使用 Python 进行编码。我需要的是:

(atom) x y z coordinates

对于分子中的每个原子。到目前为止我的代码是:

for molecule in mol_list:
    molecule = Chem.AddHs(molecule)
    print(molecule.GetNumAtoms())
    AllChem.EmbedMolecule(molecule)
    AllChem.UFFOptimizeMolecule(molecule)
    molecule.GetConformer()

    print()

    for atom in molecule.GetAtoms():
        # positions = molecule.GetConformer().GetAtomPosition(0)
        positions = molecule.GetConformer().GetPositions()
        print(atom.GetSymbol(), positions)
    
        print()

但这给了我输出:

(Atom) x y z coordinates for every atom

如此重复,分子中的每个原子都具有整个分子的 x、y 和 z 坐标。

mol_list
循环中的
for
是我转换为对象的字符串列表:
rdkit.Chem.rdchem.Mol
。我尝试过
geometry.xyz
中的
Chemml
函数,但遇到了 Molecule 对象的问题。另外,我尝试使用
RdKit
函数
getAtomPos()
但没有成功。任何对此的帮助都会很棒!

python chemistry rdkit
1个回答
4
投票

您必须传递原子编号才能获取其坐标。以下代码片段应该可以满足您的要求

from rdkit import Chem
from rdkit.Chem import AllChem

for molecule in mol_list:
    molecule = Chem.AddHs(molecule)
    print(molecule.GetNumAtoms())
    AllChem.EmbedMolecule(molecule)
    AllChem.UFFOptimizeMolecule(molecule)
    molecule.GetConformer()
    print()

    for i, atom in enumerate(molecule.GetAtoms()):
        positions = molecule.GetConformer().GetAtomPosition(i)
        print(atom.GetSymbol(), positions.x, positions.y, positions.z)
© www.soinside.com 2019 - 2024. All rights reserved.